diff --git a/.bazelrc b/.bazelrc index cd6226d0171..9a58b60c3ef 100644 --- a/.bazelrc +++ b/.bazelrc @@ -1,3 +1,3 @@ -build --copt="-std=c++17" +build --repo_env=CC=clang --repo_env=CXX=clang++ --copt="-std=c++17" try-import %workspace%/local.bazelrc diff --git a/.codeqlmanifest.json b/.codeqlmanifest.json deleted file mode 100644 index 24e20e77278..00000000000 --- a/.codeqlmanifest.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "provide": [ - "*/ql/src/qlpack.yml", - "*/ql/lib/qlpack.yml", - "*/ql/test/qlpack.yml", - "*/ql/examples/qlpack.yml", - "*/ql/consistency-queries/qlpack.yml", - "cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/qlpack.yml", - "javascript/ql/experimental/adaptivethreatmodeling/lib/qlpack.yml", - "javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/qlpack.yml", - "javascript/ql/experimental/adaptivethreatmodeling/src/qlpack.yml", - "csharp/ql/campaigns/Solorigate/lib/qlpack.yml", - "csharp/ql/campaigns/Solorigate/src/qlpack.yml", - "csharp/ql/campaigns/Solorigate/test/qlpack.yml", - "misc/legacy-support/*/qlpack.yml", - "misc/suite-helpers/qlpack.yml", - "ruby/extractor-pack/codeql-extractor.yml", - "ql/extractor-pack/codeql-extractor.yml" - ], - "versionPolicies": { - "default": { - "requireChangeNotes": true, - "committedPrereleaseSuffix": "dev", - "committedVersion": "nextPatchRelease" - } - } -} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index ff73bcb4e7b..7fd96b8d941 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,6 +3,8 @@ "rust-lang.rust", "bungcip.better-toml", "github.vscode-codeql", + "hbenl.vscode-test-explorer", + "ms-vscode.test-adapter-converter", "slevesque.vscode-zipexplorer" ], "settings": { diff --git a/.gitattributes b/.gitattributes index 5953177325f..352b2eafe4b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -39,6 +39,7 @@ *.py text *.lua text *.expected text +*.go text # Explicitly set a bunch of known extensions to binary, because Git < 2.10 will treat # `* text=auto eol=lf` as `* text eol=lf` @@ -52,6 +53,14 @@ java/ql/test/stubs/**/*.java linguist-generated=true java/ql/test/experimental/stubs/**/*.java linguist-generated=true +# Force git not to modify line endings for go or html files under the go/ql directory +go/ql/**/*.go -text +go/ql/**/*.html -text +# Force git not to modify line endings for go dbschemes +go/*.dbscheme -text +# Preserve unusual line ending from codeql-go merge +go/extractor/opencsv/CSVReader.java -text + # For some languages, upgrade script testing references really old dbscheme # files from legacy upgrades that have CRLF line endings. Since upgrade # resolution relies on object hashes, we must suppress line ending conversion diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 613f9287146..99a64d3b8d0 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -16,3 +16,11 @@ updates: directory: "ruby/autobuilder" schedule: interval: "daily" + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + ignore: + - dependency-name: '*' + update-types: ['version-update:semver-patch', 'version-update:semver-minor'] diff --git a/.github/labeler.yml b/.github/labeler.yml index 50956ba51c5..1dc166d6b44 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -11,7 +11,7 @@ Java: - change-notes/**/*java.* JS: - - javascript/**/* + - any: [ 'javascript/**/*', '!javascript/ql/experimental/adaptivethreatmodeling/**/*' ] - change-notes/**/*javascript* Python: @@ -21,6 +21,10 @@ Python: Ruby: - ruby/**/* - change-notes/**/*ruby* + +Swift: + - swift/**/* + - change-notes/**/*swift* documentation: - "**/*.qhelp" @@ -28,4 +32,4 @@ documentation: - docs/**/* "QL-for-QL": - - ql/**/* \ No newline at end of file + - ql/**/* diff --git a/.github/problem-matchers/codeql-query-format.json b/.github/problem-matchers/codeql-query-format.json new file mode 100644 index 00000000000..35f9c1a6f64 --- /dev/null +++ b/.github/problem-matchers/codeql-query-format.json @@ -0,0 +1,14 @@ +{ + "problemMatcher": [ + { + "owner": "codeql-query-format", + "pattern": [ + { + "regexp": "^((.*) would change by autoformatting\\.)$", + "file": 2, + "message": 1 + } + ] + } + ] +} diff --git a/.github/problem-matchers/codeql-syntax-check.json b/.github/problem-matchers/codeql-syntax-check.json new file mode 100644 index 00000000000..d285ffd77d8 --- /dev/null +++ b/.github/problem-matchers/codeql-syntax-check.json @@ -0,0 +1,17 @@ +{ + "problemMatcher": [ + { + "owner": "codeql-syntax-check", + "pattern": [ + { + "regexp": "^((ERROR|WARNING): .* \\((.*):(\\d+),(\\d+)-\\d+\\))$", + "message": 1, + "file": 3, + "line": 4, + "col": 5, + "severity": 2 + } + ] + } + ] +} diff --git a/.github/problem-matchers/codeql-test-run.json b/.github/problem-matchers/codeql-test-run.json new file mode 100644 index 00000000000..918758b3390 --- /dev/null +++ b/.github/problem-matchers/codeql-test-run.json @@ -0,0 +1,14 @@ +{ + "problemMatcher": [ + { + "owner": "codeql-test-run", + "pattern": [ + { + "regexp": "(\\[.*\\] FAILED\\((RESULT|COMPILATION)\\) (.*))$", + "file": 3, + "message": 1 + } + ] + } + ] +} diff --git a/.github/problem-matchers/make.json b/.github/problem-matchers/make.json new file mode 100644 index 00000000000..8275f4851ab --- /dev/null +++ b/.github/problem-matchers/make.json @@ -0,0 +1,13 @@ +{ + "problemMatcher": [ + { + "owner": "make", + "pattern": [ + { + "regexp": "^(make: \\*\\*\\* .*)$", + "message": 1 + } + ] + } + ] +} diff --git a/.github/workflows/check-qldoc.yml b/.github/workflows/check-qldoc.yml index 5c3da4b44a5..77f524b73e7 100644 --- a/.github/workflows/check-qldoc.yml +++ b/.github/workflows/check-qldoc.yml @@ -22,7 +22,7 @@ jobs: env: GITHUB_TOKEN: ${{ github.token }} - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 2 @@ -30,7 +30,8 @@ jobs: shell: bash run: | EXIT_CODE=0 - changed_lib_packs="$(git diff --name-only --diff-filter=ACMRT HEAD^ HEAD | { grep -o '^[a-z]*/ql/lib' || true; } | sort -u)" + # TODO: remove the swift exception from the regex when we fix generated QLdoc + changed_lib_packs="$(git diff --name-only --diff-filter=ACMRT HEAD^ HEAD | { grep -Po '^(?!swift)[a-z]*/ql/lib' || true; } | sort -u)" for pack_dir in ${changed_lib_packs}; do lang="${pack_dir%/ql/lib}" gh codeql generate library-doc-coverage --output="${RUNNER_TEMP}/${lang}-current.txt" --dir="${pack_dir}" diff --git a/.github/workflows/close-stale.yml b/.github/workflows/close-stale.yml index c63a6be690c..4f4db041493 100644 --- a/.github/workflows/close-stale.yml +++ b/.github/workflows/close-stale.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/stale@v3 + - uses: actions/stale@v5 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-issue-message: 'This issue is stale because it has been open 14 days with no activity. Comment or remove the `Stale` label in order to avoid having this issue closed in 7 days.' diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 312feb3359b..73826e30f9e 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -28,12 +28,12 @@ jobs: steps: - name: Setup dotnet - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v2 with: - dotnet-version: 6.0.101 + dotnet-version: 6.0.202 - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL @@ -49,7 +49,7 @@ jobs: # uses: github/codeql-action/autobuild@main # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl + # 📚 https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project diff --git a/.github/workflows/csv-coverage-metrics.yml b/.github/workflows/csv-coverage-metrics.yml index ca7bc176d6d..7778221dc2f 100644 --- a/.github/workflows/csv-coverage-metrics.yml +++ b/.github/workflows/csv-coverage-metrics.yml @@ -14,11 +14,11 @@ on: - ".github/workflows/csv-coverage-metrics.yml" jobs: - publish: + publish-java: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup CodeQL uses: ./.github/actions/fetch-codeql - name: Create empty database @@ -31,13 +31,40 @@ jobs: - name: Capture coverage information run: | DATABASE="${{ runner.temp }}/java-database" - codeql database analyze --format=sarif-latest --output=metrics.sarif -- "$DATABASE" ./java/ql/src/Metrics/Summaries/FrameworkCoverage.ql - - uses: actions/upload-artifact@v2 + codeql database analyze --format=sarif-latest --output=metrics-java.sarif -- "$DATABASE" ./java/ql/src/Metrics/Summaries/FrameworkCoverage.ql + - uses: actions/upload-artifact@v3 with: - name: metrics.sarif - path: metrics.sarif + name: metrics-java.sarif + path: metrics-java.sarif retention-days: 20 - name: Upload SARIF file - uses: github/codeql-action/upload-sarif@v1 + uses: github/codeql-action/upload-sarif@main with: - sarif_file: metrics.sarif + sarif_file: metrics-java.sarif + + publish-csharp: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Setup CodeQL + uses: ./.github/actions/fetch-codeql + - name: Create empty database + run: | + DATABASE="${{ runner.temp }}/csharp-database" + PROJECT="${{ runner.temp }}/csharp-project" + dotnet new classlib --language=C# --output="$PROJECT" + codeql database create "$DATABASE" --language=csharp --source-root="$PROJECT" --command 'dotnet build /t:rebuild csharp-project.csproj /p:UseSharedCompilation=false' + - name: Capture coverage information + run: | + DATABASE="${{ runner.temp }}/csharp-database" + codeql database analyze --format=sarif-latest --output=metrics-csharp.sarif -- "$DATABASE" ./csharp/ql/src/Metrics/Summaries/FrameworkCoverage.ql + - uses: actions/upload-artifact@v3 + with: + name: metrics-csharp.sarif + path: metrics-csharp.sarif + retention-days: 20 + - name: Upload SARIF file + uses: github/codeql-action/upload-sarif@main + with: + sarif_file: metrics-csharp.sarif diff --git a/.github/workflows/csv-coverage-pr-artifacts.yml b/.github/workflows/csv-coverage-pr-artifacts.yml index 8b89b9b22c1..46d43cc411b 100644 --- a/.github/workflows/csv-coverage-pr-artifacts.yml +++ b/.github/workflows/csv-coverage-pr-artifacts.yml @@ -28,11 +28,11 @@ jobs: GITHUB_CONTEXT: ${{ toJSON(github.event) }} run: echo "$GITHUB_CONTEXT" - name: Clone self (github/codeql) - MERGE - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: merge - name: Clone self (github/codeql) - BASE - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 2 path: base @@ -41,7 +41,7 @@ jobs: git log -1 --format='%H' working-directory: base - name: Set up Python 3.8 - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: 3.8 - name: Download CodeQL CLI @@ -69,21 +69,21 @@ jobs: run: | python base/misc/scripts/library-coverage/compare-folders.py out_base out_merge comparison.md - name: Upload CSV package list - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: csv-framework-coverage-merge path: | out_merge/framework-coverage-*.csv out_merge/framework-coverage-*.rst - name: Upload CSV package list - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: csv-framework-coverage-base path: | out_base/framework-coverage-*.csv out_base/framework-coverage-*.rst - name: Upload comparison results - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: comparison path: | @@ -93,7 +93,7 @@ jobs: mkdir -p pr echo ${{ github.event.pull_request.number }} > pr/NR - name: Upload PR number - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: pr path: pr/ diff --git a/.github/workflows/csv-coverage-pr-comment.yml b/.github/workflows/csv-coverage-pr-comment.yml index 399fee33e5e..c819b068b9f 100644 --- a/.github/workflows/csv-coverage-pr-comment.yml +++ b/.github/workflows/csv-coverage-pr-comment.yml @@ -20,9 +20,9 @@ jobs: GITHUB_CONTEXT: ${{ toJSON(github.event) }} run: echo "$GITHUB_CONTEXT" - name: Clone self (github/codeql) - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up Python 3.8 - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: 3.8 diff --git a/.github/workflows/csv-coverage-timeseries.yml b/.github/workflows/csv-coverage-timeseries.yml index e7c01623e04..4243f640cd2 100644 --- a/.github/workflows/csv-coverage-timeseries.yml +++ b/.github/workflows/csv-coverage-timeseries.yml @@ -10,16 +10,16 @@ jobs: steps: - name: Clone self (github/codeql) - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: script - name: Clone self (github/codeql) for analysis - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: codeqlModels fetch-depth: 0 - name: Set up Python 3.8 - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: 3.8 - name: Download CodeQL CLI @@ -35,7 +35,7 @@ jobs: echo $CLI PATH="$PATH:$CLI" python script/misc/scripts/library-coverage/generate-timeseries.py codeqlModels - name: Upload timeseries CSV - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: framework-coverage-timeseries path: framework-coverage-timeseries-*.csv diff --git a/.github/workflows/csv-coverage-update.yml b/.github/workflows/csv-coverage-update.yml index eb227ec844f..2c04d6c844f 100644 --- a/.github/workflows/csv-coverage-update.yml +++ b/.github/workflows/csv-coverage-update.yml @@ -17,12 +17,12 @@ jobs: GITHUB_CONTEXT: ${{ toJSON(github.event) }} run: echo "$GITHUB_CONTEXT" - name: Clone self (github/codeql) - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: ql fetch-depth: 0 - name: Set up Python 3.8 - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: 3.8 - name: Download CodeQL CLI diff --git a/.github/workflows/csv-coverage.yml b/.github/workflows/csv-coverage.yml index c7ab92eb0f3..b5cd915fa9d 100644 --- a/.github/workflows/csv-coverage.yml +++ b/.github/workflows/csv-coverage.yml @@ -14,16 +14,16 @@ jobs: steps: - name: Clone self (github/codeql) - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: script - name: Clone self (github/codeql) for analysis - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: codeqlModels ref: ${{ github.event.inputs.qlModelShaOverride || github.ref }} - name: Set up Python 3.8 - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: 3.8 - name: Download CodeQL CLI @@ -37,12 +37,12 @@ jobs: run: | PATH="$PATH:codeql-cli/codeql" python script/misc/scripts/library-coverage/generate-report.py ci codeqlModels script - name: Upload CSV package list - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: framework-coverage-csv path: framework-coverage-*.csv - name: Upload RST package list - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: framework-coverage-rst path: framework-coverage-*.rst diff --git a/.github/workflows/go-tests.yml b/.github/workflows/go-tests.yml new file mode 100644 index 00000000000..12e162adf29 --- /dev/null +++ b/.github/workflows/go-tests.yml @@ -0,0 +1,161 @@ +name: "Go: Run Tests" +on: + pull_request: + paths: + - "go/**" + - .github/workflows/go-tests.yml +jobs: + + test-linux: + name: Test Linux (Ubuntu) + runs-on: ubuntu-latest + steps: + + - name: Set up Go 1.18.1 + uses: actions/setup-go@v3 + with: + go-version: 1.18.1 + id: go + + - name: Set up CodeQL CLI + run: | + echo "Removing old CodeQL Directory..." + rm -rf $HOME/codeql + echo "Done" + cd $HOME + echo "Downloading CodeQL CLI..." + LATEST=$(gh release list --repo https://github.com/github/codeql-cli-binaries | cut -f 1 | sort --version-sort | grep -v beta | tail -1) + gh release download --repo https://github.com/github/codeql-cli-binaries --pattern codeql-linux64.zip "$LATEST" + echo "Done" + echo "Unpacking CodeQL CLI..." + unzip -q codeql-linux64.zip + rm -f codeql-linux64.zip + echo "Done" + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: Check out code + uses: actions/checkout@v2 + + - name: Enable problem matchers in repository + shell: bash + run: 'find .github/problem-matchers -name \*.json -exec echo "::add-matcher::{}" \;' + + - name: Build + run: | + cd go + env PATH=$PATH:$HOME/codeql make + + - name: Check that all QL and Go code is autoformatted + run: | + cd go + env PATH=$PATH:$HOME/codeql make check-formatting + + - name: Compile qhelp files to markdown + run: | + cd go + env PATH=$PATH:$HOME/codeql QHELP_OUT_DIR=qhelp-out make qhelp-to-markdown + + - name: Upload qhelp markdown + uses: actions/upload-artifact@v2 + with: + name: qhelp-markdown + path: go/qhelp-out/**/*.md + + - name: Test + run: | + cd go + env PATH=$PATH:$HOME/codeql make test + + test-mac: + name: Test MacOS + runs-on: macOS-latest + steps: + - name: Set up Go 1.18.1 + uses: actions/setup-go@v3 + with: + go-version: 1.18.1 + id: go + + - name: Set up CodeQL CLI + run: | + echo "Removing old CodeQL Directory..." + rm -rf $HOME/codeql + echo "Done" + cd $HOME + echo "Downloading CodeQL CLI..." + LATEST=$(gh release list --repo https://github.com/github/codeql-cli-binaries | cut -f 1 | sort --version-sort | grep -v beta | tail -1) + gh release download --repo https://github.com/github/codeql-cli-binaries --pattern codeql-osx64.zip "$LATEST" + echo "Done" + echo "Unpacking CodeQL CLI..." + unzip -q codeql-osx64.zip + rm -f codeql-osx64.zip + echo "Done" + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: Check out code + uses: actions/checkout@v2 + + - name: Enable problem matchers in repository + shell: bash + run: 'find .github/problem-matchers -name \*.json -exec echo "::add-matcher::{}" \;' + + - name: Build + run: | + cd go + env PATH=$PATH:$HOME/codeql make + + - name: Test + run: | + cd go + env PATH=$PATH:$HOME/codeql make test + + test-win: + name: Test Windows + runs-on: windows-2019 + steps: + - name: Set up Go 1.18.1 + uses: actions/setup-go@v3 + with: + go-version: 1.18.1 + id: go + + - name: Set up CodeQL CLI + run: | + echo "Removing old CodeQL Directory..." + rm -rf $HOME/codeql + echo "Done" + cd "$HOME" + echo "Downloading CodeQL CLI..." + LATEST=$(gh release list --repo https://github.com/github/codeql-cli-binaries | cut -f 1 | sort --version-sort | grep -v beta | tail -1) + gh release download --repo https://github.com/github/codeql-cli-binaries --pattern codeql-win64.zip "$LATEST" + echo "Done" + echo "Unpacking CodeQL CLI..." + unzip -q -o codeql-win64.zip + unzip -q -o codeql-win64.zip codeql/codeql.exe + rm -f codeql-win64.zip + echo "Done" + env: + GITHUB_TOKEN: ${{ github.token }} + shell: + bash + + - name: Check out code + uses: actions/checkout@v2 + + - name: Enable problem matchers in repository + shell: bash + run: 'find .github/problem-matchers -name \*.json -exec echo "::add-matcher::{}" \;' + + - name: Build + run: | + $Env:Path += ";$HOME\codeql" + cd go + make + + - name: Test + run: | + $Env:Path += ";$HOME\codeql" + cd go + make test diff --git a/.github/workflows/js-ml-tests.yml b/.github/workflows/js-ml-tests.yml index 35d8a2378e4..ba33779455e 100644 --- a/.github/workflows/js-ml-tests.yml +++ b/.github/workflows/js-ml-tests.yml @@ -12,6 +12,7 @@ on: paths: - "javascript/ql/experimental/adaptivethreatmodeling/**" - .github/workflows/js-ml-tests.yml + workflow_dispatch: defaults: run: @@ -22,7 +23,7 @@ jobs: name: Check QL formatting runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: ./.github/actions/fetch-codeql @@ -35,7 +36,7 @@ jobs: name: Check QL compilation runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: ./.github/actions/fetch-codeql @@ -59,7 +60,7 @@ jobs: name: Run QL tests runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: ./.github/actions/fetch-codeql diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 3606bd75cc5..31e78f82a62 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -6,6 +6,6 @@ jobs: triage: runs-on: ubuntu-latest steps: - - uses: actions/labeler@v2 + - uses: actions/labeler@v4 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/mad_modelDiff.yml b/.github/workflows/mad_modelDiff.yml index a4b9169b44e..3a1f52c532e 100644 --- a/.github/workflows/mad_modelDiff.yml +++ b/.github/workflows/mad_modelDiff.yml @@ -27,12 +27,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@v2 + uses: actions/checkout@v3 if: github.event.pull_request with: path: codeql-pr - name: Clone github/codeql from main - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: codeql-main ref: main @@ -91,12 +91,12 @@ jobs: name="diff_${basename/_main.qll/""}" (diff -w -u $m $t | diff2html -i stdin -F $MODELS/$name.html) || true done - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: models path: tmp-models/*.qll retention-days: 20 - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: diffs path: tmp-models/*.html diff --git a/.github/workflows/mad_regenerate-models.yml b/.github/workflows/mad_regenerate-models.yml index 03e64816f9d..735e224d0d6 100644 --- a/.github/workflows/mad_regenerate-models.yml +++ b/.github/workflows/mad_regenerate-models.yml @@ -26,11 +26,11 @@ jobs: ref: "placeholder" steps: - name: Clone self (github/codeql) - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup CodeQL binaries uses: ./.github/actions/fetch-codeql - name: Clone repositories - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: repos/${{ matrix.ref }} ref: ${{ matrix.ref }} @@ -55,7 +55,7 @@ jobs: find java -name "*.qll" -print0 | xargs -0 git add git status git diff --cached > models.patch - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: patch path: models.patch diff --git a/.github/workflows/post-pr-comment.yml b/.github/workflows/post-pr-comment.yml index 0d92b0af7eb..7a86909371f 100644 --- a/.github/workflows/post-pr-comment.yml +++ b/.github/workflows/post-pr-comment.yml @@ -1,12 +1,17 @@ -name: Post pull-request comment +# This workflow is the second part of the process described in +# .github/workflows/qhelp-pr-preview.yml +# See that file for more info. + +name: Post PR comment on: workflow_run: - workflows: ["Query help preview"] + workflows: [Render QHelp changes] types: - completed permissions: pull-requests: write + actions: read jobs: post_comment: @@ -17,15 +22,53 @@ jobs: env: GITHUB_TOKEN: ${{ github.token }} WORKFLOW_RUN_ID: ${{ github.event.workflow_run.id }} - - run: | - PR="$(grep -o '^[0-9]\+$' pr.txt)" + + - name: Check that PR SHA matches workflow SHA + run: | + PR="$(grep -o '^[0-9]\+$' pr_number.txt)" PR_HEAD_SHA="$(gh api "/repos/${GITHUB_REPOSITORY}/pulls/${PR}" --jq .head.sha)" # Check that the pull-request head SHA matches the head SHA of the workflow run if [ "${WORKFLOW_RUN_HEAD_SHA}" != "${PR_HEAD_SHA}" ]; then echo "PR head SHA ${PR_HEAD_SHA} does not match workflow_run event SHA ${WORKFLOW_RUN_HEAD_SHA}. Stopping." 1>&2 exit 1 fi - gh pr comment "${PR}" --repo "${GITHUB_REPOSITORY}" -F comment.txt env: GITHUB_TOKEN: ${{ github.token }} WORKFLOW_RUN_HEAD_SHA: ${{ github.event.workflow_run.head_commit.id }} + + - name: Create or update comment + run: | + COMMENT_PREFIX="QHelp previews" + COMMENT_AUTHOR="github-actions[bot]" + PR_NUMBER="$(grep -o '^[0-9]\+$' pr_number.txt)" + + # If there is no existing comment, comment_id.txt will contain just a + # newline (due to jq & gh behaviour). This will cause grep to fail, so + # we catch that. + RAW_COMMENT_ID=$(grep -o '^[0-9]\+$' comment_id.txt || true) + + if [ $RAW_COMMENT_ID ] + then + # Fetch existing comment, and validate: + # - comment belongs to the PR with number $PR_NUMBER + # - comment starts with the expected prefix ("QHelp previews") + # - comment author is github-actions[bot] + FILTER='select(.issue_url | endswith($repo+"/issues/"+$pr)) + | select(.body | startswith($prefix)) + | select(.user.login == $author) + | .id' + COMMENT_ID=$(gh api "repos/${GITHUB_REPOSITORY}/issues/comments/${RAW_COMMENT_ID}" | jq --arg repo "${GITHUB_REPOSITORY}" --arg pr "${PR_NUMBER}" --arg prefix "${COMMENT_PREFIX}" --arg author "${COMMENT_AUTHOR}" "${FILTER}") + if [ $COMMENT_ID ] + then + # Update existing comment + jq --rawfile body comment_body.txt '{"body":$body}' -n | gh api "repos/${GITHUB_REPOSITORY}/issues/comments/${COMMENT_ID}" -X PATCH --input - + else + echo "Comment ${RAW_COMMENT_ID} did not pass validations: not editing." >&2 + exit 1 + fi + else + # Create new comment + jq --rawfile body comment_body.txt '{"body":$body}' -n | gh api "repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/comments" -X POST --input - + fi + env: + GITHUB_TOKEN: ${{ github.token }} diff --git a/.github/workflows/qhelp-pr-preview.yml b/.github/workflows/qhelp-pr-preview.yml index ade85a730e1..8aba0a0c5e3 100644 --- a/.github/workflows/qhelp-pr-preview.yml +++ b/.github/workflows/qhelp-pr-preview.yml @@ -1,7 +1,25 @@ -name: Query help preview +# This workflow checks for any changes in .qhelp files in pull requests. +# For any changed files, it renders them to markdown in a file called `comment_body.txt`. +# It then checks if there's an existing comment on the pull request generated by +# this workflow, and writes the comment ID to `comment_id.txt`. +# It also writes the PR number to `pr_number.txt`. +# These three files are uploaded as an artifact. + +# When this workflow completes, the workflow "Post PR comment" runs. +# It downloads the artifact and adds a comment to the PR with the rendered +# QHelp. + +# The task is split like this because creating PR comments requires extra +# permissions that we don't want to expose to PRs from external forks. + +# For more info see: +# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run +# https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token +name: Render QHelp changes permissions: contents: read + pull-requests: read on: pull_request: @@ -15,13 +33,17 @@ jobs: qhelp: runs-on: ubuntu-latest steps: - - run: echo "${{ github.event.number }}" > pr.txt - - uses: actions/upload-artifact@v2 + - run: echo "${PR_NUMBER}" > pr_number.txt + env: + PR_NUMBER: ${{ github.event.number }} + - uses: actions/upload-artifact@v3 with: name: comment - path: pr.txt + path: pr_number.txt + if-no-files-found: error retention-days: 1 - - uses: actions/checkout@v2 + + - uses: actions/checkout@v3 with: fetch-depth: 2 persist-credentials: false @@ -36,7 +58,7 @@ jobs: - name: QHelp preview run: | EXIT_CODE=0 - echo "QHelp previews:" > comment.txt + echo "QHelp previews:" > comment_body.txt while read -r -d $'\0' path; do if [ ! -f "${path}" ]; then exit 1 @@ -52,12 +74,29 @@ jobs: echo '```' fi echo "" - done < "${RUNNER_TEMP}/paths.txt" >> comment.txt + done < "${RUNNER_TEMP}/paths.txt" >> comment_body.txt exit "${EXIT_CODE}" - if: always() - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: comment - path: comment.txt + path: comment_body.txt + if-no-files-found: error + retention-days: 1 + + - name: Save ID of existing QHelp comment (if it exists) + run: | + # Find the latest comment starting with "QHelp previews" + COMMENT_PREFIX="QHelp previews" + gh api "repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/comments" --paginate | jq --arg prefix "${COMMENT_PREFIX}" '[.[] | select(.body|startswith($prefix)) | .id] | max' > comment_id.txt + env: + GITHUB_TOKEN: ${{ github.token }} + PR_NUMBER: ${{ github.event.number }} + + - uses: actions/upload-artifact@v3 + with: + name: comment + path: comment_id.txt + if-no-files-found: error retention-days: 1 diff --git a/.github/workflows/ql-for-ql-build.yml b/.github/workflows/ql-for-ql-build.yml index 00d82659085..6b4f6a0abee 100644 --- a/.github/workflows/ql-for-ql-build.yml +++ b/.github/workflows/ql-for-ql-build.yml @@ -13,7 +13,7 @@ jobs: queries: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Find codeql id: find-codeql uses: github/codeql-action/init@aa93aea877e5fb8841bcb1193f672abf6e9f2980 @@ -29,7 +29,7 @@ jobs: CODEQL: ${{ steps.find-codeql.outputs.codeql-path }} - name: Cache queries id: cache-queries - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ runner.temp }}/query-pack.zip key: queries-${{ hashFiles('ql/**/*.ql*') }}-${{ hashFiles('ql/**/qlpack.yml') }}-${{ hashFiles('ql/ql/src/ql.dbscheme*') }}-${{ steps.get-codeql-version.outputs.version }} @@ -44,7 +44,7 @@ jobs: CODEQL: ${{ steps.find-codeql.outputs.codeql-path }} PACKZIP: ${{ runner.temp }}/query-pack.zip - name: Upload query pack - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: query-pack-zip path: ${{ runner.temp }}/query-pack.zip @@ -56,10 +56,10 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Cache entire extractor id: cache-extractor - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | ql/target/release/ql-autobuilder @@ -69,7 +69,7 @@ jobs: key: ${{ runner.os }}-extractor-${{ hashFiles('ql/**/Cargo.lock') }}-${{ hashFiles('ql/**/*.rs') }} - name: Cache cargo if: steps.cache-extractor.outputs.cache-hit != 'true' - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | ~/.cargo/registry @@ -91,7 +91,7 @@ jobs: - name: Generate dbscheme if: steps.cache-extractor.outputs.cache-hit != 'true' run: ql/target/release/ql-generator --dbscheme ql/ql/src/ql.dbscheme --library ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: extractor-ubuntu-latest path: | @@ -108,12 +108,12 @@ jobs: - queries steps: - - uses: actions/checkout@v2 - - uses: actions/download-artifact@v2 + - uses: actions/checkout@v3 + - uses: actions/download-artifact@v3 with: name: query-pack-zip path: query-pack-zip - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: extractor-ubuntu-latest path: linux64 @@ -131,7 +131,7 @@ jobs: fi cd pack zip -rq ../codeql-ql.zip . - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: codeql-ql-pack path: codeql-ql.zip @@ -140,14 +140,14 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - folder: [cpp, csharp, java, javascript, python, ql, ruby] + folder: [cpp, csharp, java, javascript, python, ql, ruby, swift, go] needs: - package steps: - name: Download pack - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: codeql-ql-pack path: ${{ runner.temp }}/codeql-ql-pack-artifact @@ -166,7 +166,7 @@ jobs: PACK: ${{ runner.temp }}/pack - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Create CodeQL config file run: | echo "paths:" > ${CONF} @@ -196,7 +196,7 @@ jobs: - name: Copy sarif file to CWD run: cp ../results/ql.sarif ./${{ matrix.folder }}.sarif - name: Sarif as artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ${{ matrix.folder }}.sarif path: ${{ matrix.folder }}.sarif diff --git a/.github/workflows/ql-for-ql-dataset_measure.yml b/.github/workflows/ql-for-ql-dataset_measure.yml index 276ebac7ed6..cf3b696f3b8 100644 --- a/.github/workflows/ql-for-ql-dataset_measure.yml +++ b/.github/workflows/ql-for-ql-dataset_measure.yml @@ -19,17 +19,16 @@ jobs: matrix: repo: - github/codeql - - github/codeql-go runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Find codeql id: find-codeql uses: github/codeql-action/init@aa93aea877e5fb8841bcb1193f672abf6e9f2980 with: languages: javascript # does not matter - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | ~/.cargo/registry @@ -41,7 +40,7 @@ jobs: env: CODEQL: ${{ steps.find-codeql.outputs.codeql-path }} - name: Checkout ${{ matrix.repo }} - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: repository: ${{ matrix.repo }} path: ${{ github.workspace }}/repo @@ -60,7 +59,7 @@ jobs: "${CODEQL}" dataset measure --threads 4 --output "stats/${{ matrix.repo }}/stats.xml" "${{ runner.temp }}/database/db-ql" env: CODEQL: ${{ steps.find-codeql.outputs.codeql-path }} - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: measurements path: stats @@ -70,15 +69,15 @@ jobs: runs-on: ubuntu-latest needs: measure steps: - - uses: actions/checkout@v2 - - uses: actions/download-artifact@v2 + - uses: actions/checkout@v3 + - uses: actions/download-artifact@v3 with: name: measurements path: stats - run: | python -m pip install --user lxml - find stats -name 'stats.xml' -print0 | sort -z | xargs -0 python ql/scripts/merge_stats.py --output ql/ql/src/ql.dbscheme.stats --normalise ql_tokeninfo - - uses: actions/upload-artifact@v2 + find stats -name 'stats.xml' -print0 | sort -z | xargs -0 python ruby/scripts/merge_stats.py --output ql/ql/src/ql.dbscheme.stats --normalise ql_tokeninfo + - uses: actions/upload-artifact@v3 with: name: ql.dbscheme.stats path: ql/ql/src/ql.dbscheme.stats diff --git a/.github/workflows/ql-for-ql-tests.yml b/.github/workflows/ql-for-ql-tests.yml index 64b71dfd7a6..a6c79237759 100644 --- a/.github/workflows/ql-for-ql-tests.yml +++ b/.github/workflows/ql-for-ql-tests.yml @@ -17,13 +17,13 @@ jobs: qltest: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Find codeql id: find-codeql uses: github/codeql-action/init@aa93aea877e5fb8841bcb1193f672abf6e9f2980 with: languages: javascript # does not matter - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | ~/.cargo/registry diff --git a/.github/workflows/query-list.yml b/.github/workflows/query-list.yml index a9f24b8c9c7..7484cc4a7a4 100644 --- a/.github/workflows/query-list.yml +++ b/.github/workflows/query-list.yml @@ -17,33 +17,23 @@ jobs: steps: - name: Clone self (github/codeql) - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: codeql - - name: Clone github/codeql-go - uses: actions/checkout@v2 - with: - repository: 'github/codeql-go' - path: codeql-go - name: Set up Python 3.8 - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: 3.8 - name: Download CodeQL CLI - uses: dsaltares/fetch-gh-release-asset@aa37ae5c44d3c9820bc12fe675e8670ecd93bd1c - with: - repo: "github/codeql-cli-binaries" - version: "latest" - file: "codeql-linux64.zip" - token: ${{ secrets.GITHUB_TOKEN }} + # Look under the `codeql` directory, as this is where we checked out the `github/codeql` repo + uses: ./codeql/.github/actions/fetch-codeql - name: Unzip CodeQL CLI run: unzip -d codeql-cli codeql-linux64.zip - name: Build code scanning query list run: | - PATH="$PATH:codeql-cli/codeql" python codeql/misc/scripts/generate-code-scanning-query-list.py > code-scanning-query-list.csv + python codeql/misc/scripts/generate-code-scanning-query-list.py > code-scanning-query-list.csv - name: Upload code scanning query list - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: code-scanning-query-list path: code-scanning-query-list.csv - diff --git a/.github/workflows/ruby-build.yml b/.github/workflows/ruby-build.yml index 63aff63b9d6..9e95839789f 100644 --- a/.github/workflows/ruby-build.yml +++ b/.github/workflows/ruby-build.yml @@ -38,13 +38,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install GNU tar if: runner.os == 'macOS' run: | brew install gnu-tar echo "/usr/local/opt/gnu-tar/libexec/gnubin" >> $GITHUB_PATH - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | ~/.cargo/registry @@ -62,17 +62,17 @@ jobs: - name: Generate dbscheme if: ${{ matrix.os == 'ubuntu-latest' }} run: target/release/ruby-generator --dbscheme ql/lib/ruby.dbscheme --library ql/lib/codeql/ruby/ast/internal/TreeSitter.qll - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 if: ${{ matrix.os == 'ubuntu-latest' }} with: name: ruby.dbscheme path: ruby/ql/lib/ruby.dbscheme - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 if: ${{ matrix.os == 'ubuntu-latest' }} with: name: TreeSitter.qll path: ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: extractor-${{ matrix.os }} path: | @@ -86,7 +86,7 @@ jobs: env: CODEQL_THREADS: 4 # TODO: remove this once it's set by the CLI steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Fetch CodeQL run: | LATEST=$(gh release list --repo https://github.com/github/codeql-cli-binaries | cut -f 1 | grep -v beta | sort --version-sort | tail -1) @@ -102,7 +102,7 @@ jobs: PACK_FOLDER=$(readlink -f target/packs/codeql/ruby-queries/*) codeql/codeql generate query-help --format=sarifv2.1.0 --output="${PACK_FOLDER}/rules.sarif" ql/src (cd ql/src; find queries \( -name '*.qhelp' -o -name '*.rb' -o -name '*.erb' \) -exec bash -c 'mkdir -p "'"${PACK_FOLDER}"'/$(dirname "{}")"' \; -exec cp "{}" "${PACK_FOLDER}/{}" \;) - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: codeql-ruby-queries path: | @@ -113,20 +113,20 @@ jobs: runs-on: ubuntu-latest needs: [build, compile-queries] steps: - - uses: actions/checkout@v2 - - uses: actions/download-artifact@v2 + - uses: actions/checkout@v3 + - uses: actions/download-artifact@v3 with: name: ruby.dbscheme path: ruby/ruby - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: extractor-ubuntu-latest path: ruby/linux64 - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: extractor-windows-latest path: ruby/win64 - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: extractor-macos-latest path: ruby/osx64 @@ -142,12 +142,12 @@ jobs: cp win64/ruby-extractor.exe ruby/tools/win64/extractor.exe chmod +x ruby/tools/{linux64,osx64}/{autobuilder,extractor} zip -rq codeql-ruby.zip ruby - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: codeql-ruby-pack path: ruby/codeql-ruby.zip retention-days: 1 - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: codeql-ruby-queries path: ruby/qlpacks @@ -159,7 +159,7 @@ jobs: ] }' > .codeqlmanifest.json zip -rq codeql-ruby-bundle.zip .codeqlmanifest.json ruby qlpacks - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: codeql-ruby-bundle path: ruby/codeql-ruby-bundle.zip @@ -177,7 +177,7 @@ jobs: runs-on: ${{ matrix.os }} needs: [package] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: repository: Shopify/example-ruby-app ref: 67a0decc5eb550f3a9228eda53925c3afd40dfe9 @@ -191,7 +191,7 @@ jobs: GITHUB_TOKEN: ${{ github.token }} working-directory: ${{ runner.temp }} - name: Download Ruby bundle - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: codeql-ruby-bundle path: ${{ runner.temp }} diff --git a/.github/workflows/ruby-dataset-measure.yml b/.github/workflows/ruby-dataset-measure.yml index ea923770dca..bb8bb6858fd 100644 --- a/.github/workflows/ruby-dataset-measure.yml +++ b/.github/workflows/ruby-dataset-measure.yml @@ -27,14 +27,14 @@ jobs: repo: [rails/rails, discourse/discourse, spree/spree, ruby/ruby] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: ./.github/actions/fetch-codeql - uses: ./ruby/actions/create-extractor-pack - name: Checkout ${{ matrix.repo }} - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: repository: ${{ matrix.repo }} path: ${{ github.workspace }}/repo @@ -49,7 +49,7 @@ jobs: run: | mkdir -p "stats/${{ matrix.repo }}" codeql dataset measure --threads 4 --output "stats/${{ matrix.repo }}/stats.xml" "${{ runner.temp }}/database/db-ruby" - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: measurements path: stats @@ -59,15 +59,15 @@ jobs: runs-on: ubuntu-latest needs: measure steps: - - uses: actions/checkout@v2 - - uses: actions/download-artifact@v2 + - uses: actions/checkout@v3 + - uses: actions/download-artifact@v3 with: name: measurements path: stats - run: | python -m pip install --user lxml find stats -name 'stats.xml' | sort | xargs python ruby/scripts/merge_stats.py --output ruby/ql/lib/ruby.dbscheme.stats --normalise ruby_tokeninfo - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: ruby.dbscheme.stats path: ruby/ql/lib/ruby.dbscheme.stats diff --git a/.github/workflows/ruby-qltest.yml b/.github/workflows/ruby-qltest.yml index 20d9be290f0..463c501c765 100644 --- a/.github/workflows/ruby-qltest.yml +++ b/.github/workflows/ruby-qltest.yml @@ -27,14 +27,14 @@ jobs: qlformat: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: ./.github/actions/fetch-codeql - name: Check QL formatting run: find ql "(" -name "*.ql" -or -name "*.qll" ")" -print0 | xargs -0 codeql query format --check-only qlcompile: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: ./.github/actions/fetch-codeql - name: Check QL compilation run: | @@ -44,7 +44,7 @@ jobs: qlupgrade: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: ./.github/actions/fetch-codeql - name: Check DB upgrade scripts run: | @@ -67,7 +67,7 @@ jobs: matrix: slice: ["1/2", "2/2"] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: ./.github/actions/fetch-codeql - uses: ./ruby/actions/create-extractor-pack - name: Run QL tests diff --git a/.github/workflows/swift-codegen.yml b/.github/workflows/swift-codegen.yml new file mode 100644 index 00000000000..b0415606415 --- /dev/null +++ b/.github/workflows/swift-codegen.yml @@ -0,0 +1,32 @@ +name: "Swift: Check code generation" + +on: + pull_request: + paths: + - "swift/**" + - .github/workflows/swift-codegen.yml + branches: + - main + +jobs: + codegen: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: ./.github/actions/fetch-codeql + - uses: bazelbuild/setup-bazelisk@v2 + - name: Run unit tests + run: | + bazel test //swift/codegen/test --test_output=errors + - name: Check that QL generated code was checked in + run: | + bazel run //swift/codegen + git add swift + git diff --exit-code --stat HEAD + - name: Generate C++ files + run: | + bazel run //swift/codegen:cppcodegen -- --cpp-output=$PWD/swift-generated-headers + - uses: actions/upload-artifact@v3 + with: + name: swift-generated-headers + path: swift-generated-headers/*.h diff --git a/.github/workflows/swift-qltest.yml b/.github/workflows/swift-qltest.yml index 6d284307d88..e0cc5a1cd02 100644 --- a/.github/workflows/swift-qltest.yml +++ b/.github/workflows/swift-qltest.yml @@ -15,7 +15,7 @@ jobs: qlformat: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: ./.github/actions/fetch-codeql - name: Check QL formatting run: find ql "(" -name "*.ql" -or -name "*.qll" ")" -print0 | xargs -0 codeql query format --check-only @@ -26,20 +26,9 @@ jobs: matrix: os : [ubuntu-20.04, macos-latest] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: ./.github/actions/fetch-codeql - - name: Install bazelisk - Linux - if: runner.os == 'Linux' - run: | - sudo apt-get update - sudo apt-get install -y wget - wget https://github.com/bazelbuild/bazelisk/releases/download/v1.11.0/bazelisk-linux-amd64 - mv bazelisk-linux-amd64 /usr/local/bin/bazel - chmod +x /usr/local/bin/bazel - - name: Install bazelisk - macOS - if: runner.os == 'MacOS' - run: | - brew install bazelisk + - uses: bazelbuild/setup-bazelisk@v2 - name: Build Swift extractor run: | bazel run //swift:create-extractor-pack @@ -48,4 +37,3 @@ jobs: codeql test run --threads=0 --ram 5000 --search-path "${{ github.workspace }}/swift/extractor-pack" --check-databases --check-unused-labels --check-repeated-labels --check-redefined-labels --check-use-before-definition ql/test env: GITHUB_TOKEN: ${{ github.token }} - diff --git a/.github/workflows/sync-files.yml b/.github/workflows/sync-files.yml index e41f4b75dc6..afa1e78edfa 100644 --- a/.github/workflows/sync-files.yml +++ b/.github/workflows/sync-files.yml @@ -14,7 +14,7 @@ jobs: sync: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Check synchronized files run: python config/sync-files.py diff --git a/.github/workflows/validate-change-notes.yml b/.github/workflows/validate-change-notes.yml index 2547b34d6a8..798913746be 100644 --- a/.github/workflows/validate-change-notes.yml +++ b/.github/workflows/validate-change-notes.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup CodeQL uses: ./.github/actions/fetch-codeql diff --git a/.gitignore b/.gitignore index 33ef1770c95..fd9e5b6a07e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ # qltest projects and artifacts */ql/test/**/*.testproj */ql/test/**/*.actual +*/ql/test/**/go.sum # Visual studio temporaries, except a file used by QL4VS .vs/* @@ -20,6 +21,9 @@ # python virtual environment folder .venv/ +# binary files created by pytest-cov +.coverage + # It's useful (though not required) to be able to unpack codeql in the ql checkout itself /codeql/ @@ -34,5 +38,20 @@ csharp/extractor/Semmle.Extraction.CSharp.Driver/Properties/launchSettings.json # links created by bazel /bazel-* +# local bazel options +/local.bazelrc + # CLion project files /.clwb + +# Go build artifacts +go/build/* + +# Go binaries +go/tools/bin +go/tools/linux64 +go/tools/osx64 +go/tools/win64 +go/tools/tokenizer.jar +go/main + diff --git a/.lgtm.yml b/.lgtm.yml index ca0d8fa4eeb..b544d59f520 100755 --- a/.lgtm.yml +++ b/.lgtm.yml @@ -6,6 +6,7 @@ path_classifiers: test: - csharp/ql/src - csharp/ql/test + - go/ql/test - javascript/extractor/parser-tests - javascript/extractor/tests - javascript/ql/src @@ -13,6 +14,9 @@ path_classifiers: - python/ql/src - python/ql/test + example: + - go/ql/src + queries: - include: "*" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d091cc922a2..ccbe07a8aa4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,29 +1,51 @@ # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks -exclude: /test/.*$(?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. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* + case @usertype.kind of + 1 = struct + | 2 = class + | 3 = union + | 4 = enum + | 5 = typedef // classic C: typedef typedef type name + | 6 = template + | 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 // a using name = type style typedef + ; +*/ +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 +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +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 +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the EDG frontend. See symbol_ref.h there. + 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 +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int 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 +); + +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 +; + +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_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 +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +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; + +@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 + ; + +/* +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 + | @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr + +@assign_expr = @assignexpr | @assign_op_expr + +/* + 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 +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * 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_expr 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_expr 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 // EDG 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 +; + +@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 + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + ; + +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. + */ +#keyset[aggregate, field] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. + */ +#keyset[aggregate, element_index] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int 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 +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_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 +); + +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_stmt 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 +; + +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 +); + +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 +); + +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 +); + +for_initialization( + unique int for_stmt: @stmt_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 +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@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 +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +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( + unique 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/cf72c8898d19eb1b3374432cf79d8276cb07ad43/semmlecode.cpp.dbscheme b/cpp/downgrades/cf72c8898d19eb1b3374432cf79d8276cb07ad43/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..e9a518baf14 --- /dev/null +++ b/cpp/downgrades/cf72c8898d19eb1b3374432cf79d8276cb07ad43/semmlecode.cpp.dbscheme @@ -0,0 +1,2096 @@ + +/** + * 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 +); + +/** + * 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, 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 +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * 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( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * 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_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * 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_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: 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_default 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 +); + +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 @macroinvocations.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 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 + 1 = normal + | 2 = constructor + | 3 = destructor + | 4 = conversion + | 5 = operator + | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk + ; +*/ +functions( + unique int id: @function, + string name: string ref, + int kind: int 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, + int handle: @variable ref, + int promise: @variable 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); + +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 +); + +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_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable 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 +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default 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: @functionorblock 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 +); + +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 = error + | 2 = unknown + | 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 = __int8 // Microsoft-specific + | 21 = __int16 // Microsoft-specific + | 22 = __int32 // Microsoft-specific + | 23 = __int64 // Microsoft-specific + | 24 = float + | 25 = double + | 26 = long_double + | 27 = _Complex_float // C99-specific + | 28 = _Complex_double // C99-specific + | 29 = _Complex_long double // C99-specific + | 30 = _Imaginary_float // C99-specific + | 31 = _Imaginary_double // C99-specific + | 32 = _Imaginary_long_double // C99-specific + | 33 = wchar_t // Microsoft-specific + | 34 = decltype_nullptr // C++11 + | 35 = __int128 + | 36 = unsigned___int128 + | 37 = signed___int128 + | 38 = __float128 + | 39 = _Complex___float128 + | 40 = _Decimal32 + | 41 = _Decimal64 + | 42 = _Decimal128 + | 43 = char16_t + | 44 = char32_t + | 45 = _Float32 + | 46 = _Float32x + | 47 = _Float64 + | 48 = _Float64x + | 49 = _Float128 + | 50 = _Float128x + | 51 = char8_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 + ; +*/ +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 +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this 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. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* + case @usertype.kind of + 1 = struct + | 2 = class + | 3 = union + | 4 = enum + | 5 = typedef // classic C: typedef typedef type name + | 6 = template + | 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 // a using name = type style typedef + ; +*/ +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 +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +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 +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the EDG frontend. See symbol_ref.h there. + 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 +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int 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 +); + +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 +; + +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_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 +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +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; + +@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 + ; + +/* +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 + | @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr + +@assign_expr = @assignexpr | @assign_op_expr + +/* + 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 +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * 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_expr 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_expr 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 // EDG 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 +; + +@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 + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + ; + +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. + */ +#keyset[aggregate, field] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. + */ +#keyset[aggregate, element_index] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int 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 +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_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 +); + +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_stmt 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 +; + +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 +); + +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_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 +); + +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 +); + +#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 +); + +for_initialization( + unique int for_stmt: @stmt_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 +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@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 +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +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( + unique 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/cf72c8898d19eb1b3374432cf79d8276cb07ad43/stmtparents.ql b/cpp/downgrades/cf72c8898d19eb1b3374432cf79d8276cb07ad43/stmtparents.ql new file mode 100644 index 00000000000..85465fdf8a3 --- /dev/null +++ b/cpp/downgrades/cf72c8898d19eb1b3374432cf79d8276cb07ad43/stmtparents.ql @@ -0,0 +1,22 @@ +class Element extends @element { + string toString() { none() } +} + +class Stmt extends @stmt { + string toString() { none() } +} + +predicate isStmtWithInitializer(Stmt stmt) { + exists(int kind | stmts(stmt, kind, _) | kind = 2 or kind = 11 or kind = 35) +} + +from Stmt child, int index, int index_new, Element parent +where + stmtparents(child, index, parent) and + ( + not isStmtWithInitializer(parent) + or + index > 0 + ) and + if isStmtWithInitializer(parent) then index_new = index - 1 else index_new = index +select child, index_new, parent diff --git a/cpp/downgrades/cf72c8898d19eb1b3374432cf79d8276cb07ad43/upgrade.properties b/cpp/downgrades/cf72c8898d19eb1b3374432cf79d8276cb07ad43/upgrade.properties new file mode 100644 index 00000000000..784726b09de --- /dev/null +++ b/cpp/downgrades/cf72c8898d19eb1b3374432cf79d8276cb07ad43/upgrade.properties @@ -0,0 +1,6 @@ +description: Support C++17 if and switch initializers +compatibility: partial +if_initialization.rel: delete +switch_initialization.rel: delete +exprparents.rel: run exprparents.qlo +stmtparents.rel: run stmtparents.qlo diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 5a0f68c2b00..6f030187ef9 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,30 @@ +## 0.2.1 + +## 0.2.0 + +### Breaking Changes + +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. + +### Minor Analysis Improvements + +* More Windows pool allocation functions are now detected as `AllocationFunction`s. +* The `semmle.code.cpp.commons.Buffer` library has been enhanced to handle array members of classes that do not specify a size. + +## 0.1.0 + +### Breaking Changes + +* The recently added flow-state versions of `isBarrierIn`, `isBarrierOut`, `isSanitizerIn`, and `isSanitizerOut` in the data flow and taint tracking libraries have been removed. + +### New Features + +* A new library `semmle.code.cpp.security.PrivateData` has been added. The new library heuristically detects variables and functions dealing with sensitive private data, such as e-mail addresses and credit card numbers. + +### Minor Analysis Improvements + +* The `semmle.code.cpp.security.SensitiveExprs` library has been enhanced with some additional rules for detecting credentials. + ## 0.0.13 ## 0.0.12 diff --git a/cpp/ql/lib/change-notes/2022-03-28-private-data.md b/cpp/ql/lib/change-notes/2022-03-28-private-data.md deleted file mode 100644 index 1c02c3ddf98..00000000000 --- a/cpp/ql/lib/change-notes/2022-03-28-private-data.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* A new library `semmle.code.cpp.security.PrivateData` has been added. The new library heuristically detects variables and functions dealing with sensitive private data, such as e-mail addresses and credit card numbers. diff --git a/cpp/ql/lib/change-notes/2022-03-31-sensitive-exprs.md b/cpp/ql/lib/change-notes/2022-03-31-sensitive-exprs.md deleted file mode 100644 index 89a0586238c..00000000000 --- a/cpp/ql/lib/change-notes/2022-03-31-sensitive-exprs.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `semmle.code.cpp.security.SensitiveExprs` library has been enhanced with some additional rules for detecting credentials. diff --git a/cpp/ql/lib/change-notes/2022-04-08-flow-state-barriers.md b/cpp/ql/lib/change-notes/2022-04-08-flow-state-barriers.md deleted file mode 100644 index c07f30e6284..00000000000 --- a/cpp/ql/lib/change-notes/2022-04-08-flow-state-barriers.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -The recently added flow-state versions of `isBarrierIn`, `isBarrierOut`, `isSanitizerIn`, and `isSanitizerOut` in the data flow and taint tracking libraries have been removed. diff --git a/cpp/ql/lib/change-notes/2022-04-12-if-and-switch-initializers.md b/cpp/ql/lib/change-notes/2022-04-12-if-and-switch-initializers.md new file mode 100644 index 00000000000..dcfa69120fa --- /dev/null +++ b/cpp/ql/lib/change-notes/2022-04-12-if-and-switch-initializers.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* A `getInitialization` predicate was added to the `ConstexprIfStmt`, `IfStmt`, and `SwitchStmt` classes that yields the C++17-style initializer of the `if` or `switch` statement when it exists. diff --git a/cpp/ql/lib/change-notes/2022-05-11-deprecated-analysed-string.md b/cpp/ql/lib/change-notes/2022-05-11-deprecated-analysed-string.md new file mode 100644 index 00000000000..82626eaf329 --- /dev/null +++ b/cpp/ql/lib/change-notes/2022-05-11-deprecated-analysed-string.md @@ -0,0 +1,4 @@ +--- + category: deprecated +--- + * The `AnalysedString` class in the `StringAnalysis` module has been replaced with `AnalyzedString`, to follow our style guide. The old name still exists as a deprecated alias. diff --git a/cpp/ql/lib/change-notes/released/0.1.0.md b/cpp/ql/lib/change-notes/released/0.1.0.md new file mode 100644 index 00000000000..bdc38108d6a --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.1.0.md @@ -0,0 +1,13 @@ +## 0.1.0 + +### Breaking Changes + +* The recently added flow-state versions of `isBarrierIn`, `isBarrierOut`, `isSanitizerIn`, and `isSanitizerOut` in the data flow and taint tracking libraries have been removed. + +### New Features + +* A new library `semmle.code.cpp.security.PrivateData` has been added. The new library heuristically detects variables and functions dealing with sensitive private data, such as e-mail addresses and credit card numbers. + +### Minor Analysis Improvements + +* The `semmle.code.cpp.security.SensitiveExprs` library has been enhanced with some additional rules for detecting credentials. diff --git a/cpp/ql/lib/change-notes/released/0.2.0.md b/cpp/ql/lib/change-notes/released/0.2.0.md new file mode 100644 index 00000000000..e0b751200c4 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.2.0.md @@ -0,0 +1,10 @@ +## 0.2.0 + +### Breaking Changes + +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. + +### Minor Analysis Improvements + +* More Windows pool allocation functions are now detected as `AllocationFunction`s. +* The `semmle.code.cpp.commons.Buffer` library has been enhanced to handle array members of classes that do not specify a size. diff --git a/cpp/ql/lib/change-notes/released/0.2.1.md b/cpp/ql/lib/change-notes/released/0.2.1.md new file mode 100644 index 00000000000..c260de2a9ee --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.2.1.md @@ -0,0 +1 @@ +## 0.2.1 diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 044e54e4f7e..df29a726bcc 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.13 +lastReleaseVersion: 0.2.1 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 8c647b8fee1..b8488e9ce82 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.1.0-dev +version: 0.2.2-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/lib/semmle/code/cpp/Element.qll b/cpp/ql/lib/semmle/code/cpp/Element.qll index a1afd61ded1..9e4ef7f5f8d 100644 --- a/cpp/ql/lib/semmle/code/cpp/Element.qll +++ b/cpp/ql/lib/semmle/code/cpp/Element.qll @@ -109,10 +109,7 @@ class Element extends ElementBase { then exists(MacroInvocation mi | this = mi.getAGeneratedElement() and - not exists(MacroInvocation closer | - this = closer.getAGeneratedElement() and - mi = closer.getParentInvocation+() - ) and + not hasCloserMacroInvocation(this, mi) and result = mi.getMacro() ) else result = this @@ -236,6 +233,14 @@ class Element extends ElementBase { } } +pragma[noinline] +private predicate hasCloserMacroInvocation(Element elem, MacroInvocation mi) { + exists(MacroInvocation closer | + elem = closer.getAGeneratedElement() and + mi = closer.getParentInvocation() + ) +} + private predicate isFromTemplateInstantiationRec(Element e, Element instantiation) { instantiation.(Function).isConstructedFrom(_) and e = instantiation diff --git a/cpp/ql/lib/semmle/code/cpp/Field.qll b/cpp/ql/lib/semmle/code/cpp/Field.qll index 5ed5e8e4b4b..95e55568c4b 100644 --- a/cpp/ql/lib/semmle/code/cpp/Field.qll +++ b/cpp/ql/lib/semmle/code/cpp/Field.qll @@ -4,7 +4,6 @@ import semmle.code.cpp.Variable import semmle.code.cpp.Enum -import semmle.code.cpp.exprs.Access /** * A C structure member or C++ non-static member variable. For example the @@ -32,7 +31,7 @@ class Field extends MemberVariable { int getByteOffset() { fieldoffsets(underlyingElement(this), result, _) } /** - * Gets the byte offset within `mostDerivedClass` of each occurence of this + * Gets the byte offset within `mostDerivedClass` of each occurrence of this * field within `mostDerivedClass` itself or a base class subobject of * `mostDerivedClass`. * Note that for fields of virtual base classes, and non-virtual base classes diff --git a/cpp/ql/lib/semmle/code/cpp/Function.qll b/cpp/ql/lib/semmle/code/cpp/Function.qll index 0f1de2b512c..bf69c33f6cb 100644 --- a/cpp/ql/lib/semmle/code/cpp/Function.qll +++ b/cpp/ql/lib/semmle/code/cpp/Function.qll @@ -38,8 +38,8 @@ class Function extends Declaration, ControlFlowNode, AccessHolder, @function { * int z = min(5, 7); * ``` * The full signature of the function called on the last line would be - * "min(int, int) -> int", and the full signature of the uninstantiated - * template on the first line would be "min(T, T) -> T". + * `min(int, int) -> int`, and the full signature of the uninstantiated + * template on the first line would be `min(T, T) -> T`. */ string getFullSignature() { exists(string name, string templateArgs, string args | diff --git a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll index 7658d5cf17a..106e49aff74 100644 --- a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll +++ b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll @@ -663,18 +663,24 @@ private predicate namedStmtChildPredicates(Locatable s, Element e, string pred) or s.(ComputedGotoStmt).getExpr() = e and pred = "getExpr()" or + s.(ConstexprIfStmt).getInitialization() = e and pred = "getInitialization()" + or s.(ConstexprIfStmt).getCondition() = e and pred = "getCondition()" or s.(ConstexprIfStmt).getThen() = e and pred = "getThen()" or s.(ConstexprIfStmt).getElse() = e and pred = "getElse()" or + s.(IfStmt).getInitialization() = e and pred = "getInitialization()" + or s.(IfStmt).getCondition() = e and pred = "getCondition()" or s.(IfStmt).getThen() = e and pred = "getThen()" or s.(IfStmt).getElse() = e and pred = "getElse()" or + s.(SwitchStmt).getInitialization() = e and pred = "getInitialization()" + or s.(SwitchStmt).getExpr() = e and pred = "getExpr()" or s.(SwitchStmt).getStmt() = e and pred = "getStmt()" diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll b/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll index 2328476d525..06dcdfb9d85 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll @@ -10,11 +10,18 @@ import semmle.code.cpp.dataflow.DataFlow * char data[1]; // v * }; * ``` - * This requires that `v` is an array of size 0 or 1. + * or + * ``` + * struct myStruct { // c + * int amount; + * char data[]; // v + * }; + * ``` + * This requires that `v` is an array of size 0 or 1, or that the array has no size. */ predicate memberMayBeVarSize(Class c, MemberVariable v) { c = v.getDeclaringType() and - v.getUnspecifiedType().(ArrayType).getArraySize() <= 1 + exists(ArrayType t | t = v.getUnspecifiedType() | not t.getArraySize() > 1) } /** @@ -27,11 +34,11 @@ int getBufferSize(Expr bufferExpr, Element why) { result = bufferVar.getUnspecifiedType().(ArrayType).getSize() and why = bufferVar and not memberMayBeVarSize(_, bufferVar) and - not result = 0 // zero sized arrays are likely to have special usage, for example - or + // zero sized arrays are likely to have special usage, for example // behaving a bit like a 'union' overlapping other fields. - // buffer is an initialized array - // e.g. int buffer[] = {1, 2, 3}; + not result = 0 + or + // buffer is an initialized array, e.g., int buffer[] = {1, 2, 3}; why = bufferVar.getInitializer().getExpr() and ( why instanceof AggregateLiteral or @@ -40,13 +47,18 @@ int getBufferSize(Expr bufferExpr, Element why) { result = why.(Expr).getType().(ArrayType).getSize() and not exists(bufferVar.getUnspecifiedType().(ArrayType).getSize()) or - exists(Class parentClass, VariableAccess parentPtr | + exists(Class parentClass, VariableAccess parentPtr, int bufferSize | // buffer is the parentPtr->bufferVar of a 'variable size struct' memberMayBeVarSize(parentClass, bufferVar) and why = bufferVar and parentPtr = bufferExpr.(VariableAccess).getQualifier() and parentPtr.getTarget().getUnspecifiedType().(PointerType).getBaseType() = parentClass and - result = getBufferSize(parentPtr, _) + bufferVar.getType().getSize() - parentClass.getSize() + ( + if exists(bufferVar.getType().getSize()) + then bufferSize = bufferVar.getType().getSize() + else bufferSize = 0 + ) and + result = getBufferSize(parentPtr, _) + bufferSize - parentClass.getSize() ) ) or diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll index dc7b8352d4b..71a31d03aac 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll @@ -872,7 +872,7 @@ class FormatLiteral extends Literal { private Type getConversionType1(int n) { exists(string cnv | cnv = this.getConversionChar(n) | - cnv.regexpMatch("d|i") and + cnv = ["d", "i"] and result = this.getIntegralConversion(n) and not result.getUnderlyingType().(IntegralType).isExplicitlySigned() and not result.getUnderlyingType().(IntegralType).isExplicitlyUnsigned() @@ -912,7 +912,7 @@ class FormatLiteral extends Literal { private Type getConversionType2(int n) { exists(string cnv | cnv = this.getConversionChar(n) | - cnv.regexpMatch("o|u|x|X") and + cnv = ["o", "u", "x", "X"] and result = this.getIntegralConversion(n) and result.getUnderlyingType().(IntegralType).isUnsigned() ) @@ -920,7 +920,7 @@ class FormatLiteral extends Literal { private Type getConversionType3(int n) { exists(string cnv | cnv = this.getConversionChar(n) | - cnv.regexpMatch("a|A|e|E|f|F|g|G") and result = this.getFloatingPointConversion(n) + cnv = ["a", "A", "e", "E", "f", "F", "g", "G"] and result = this.getFloatingPointConversion(n) ) } @@ -1312,7 +1312,7 @@ class FormatLiteral extends Literal { len = min(int v | v = this.getPrecision(n) or - v = this.getUse().getFormatArgument(n).(AnalysedString).getMaxLength() - 1 // (don't count null terminator) + v = this.getUse().getFormatArgument(n).(AnalyzedString).getMaxLength() - 1 // (don't count null terminator) ) and reason = TValueFlowAnalysis() ) diff --git a/cpp/ql/lib/semmle/code/cpp/commons/StringAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/commons/StringAnalysis.qll index b54ff6d66e3..40689adda30 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/StringAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/StringAnalysis.qll @@ -27,11 +27,14 @@ predicate canValueFlow(Expr fromExpr, Expr toExpr) { fromExpr = toExpr.(ConditionalExpr).getElse() } +/** DEPRECATED: Alias for AnalyzedString */ +deprecated class AnalysedString = AnalyzedString; + /** - * An analysed null terminated string. + * An analyzed null terminated string. */ -class AnalysedString extends Expr { - AnalysedString() { +class AnalyzedString extends Expr { + AnalyzedString() { this.getUnspecifiedType() instanceof ArrayType or this.getUnspecifiedType() instanceof PointerType } @@ -41,15 +44,15 @@ class AnalysedString extends Expr { * can be calculated. */ int getMaxLength() { - // take the longest AnalysedString it's value could 'flow' from; however if even one doesn't + // take the longest AnalyzedString its value could 'flow' from; however if even one doesn't // return a value (this essentially means 'infinity') we can't return a value either. result = - max(AnalysedString expr, int toMax | + max(AnalyzedString expr, int toMax | canValueFlow*(expr, this) and toMax = expr.(StringLiteral).getOriginalLength() | toMax ) and // maximum length - forall(AnalysedString expr | canValueFlow(expr, this) | exists(expr.getMaxLength())) // all sources return a value (recursive) + forall(AnalyzedString expr | canValueFlow(expr, this) | exists(expr.getMaxLength())) // all sources return a value (recursive) } } 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 96f03c931bf..25fdba90d52 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll @@ -708,30 +708,33 @@ private predicate straightLineSparse(Node scope, int i, Node ni, Spec spec) { or scope = any(SwitchStmt s | + // SwitchStmt [-> init] -> expr i = -1 and ni = s and spec.isAt() or - i = 0 and ni = s.getExpr() and spec.isAround() + i = 0 and ni = s.getInitialization() and spec.isAround() + or + i = 1 and ni = s.getExpr() and spec.isAround() or // If the switch body is not a block then this step is skipped, and the // expression jumps directly to the cases. - i = 1 and ni = s.getStmt().(BlockStmt) and spec.isAt() + i = 2 and ni = s.getStmt().(BlockStmt) and spec.isAt() or - i = 2 and ni = s.getASwitchCase() and spec.isBefore() + i = 3 and ni = s.getASwitchCase() and spec.isBefore() or // If there is no default case, we can jump to after the block. Note: `i` // is same value as above. not s.getASwitchCase() instanceof DefaultCase and - i = 2 and + i = 3 and ni = s.getStmt() and spec.isAfter() or - i = 3 and /* BARRIER */ ni = s and spec.isBarrier() + i = 4 and /* BARRIER */ ni = s and spec.isBarrier() or - i = 4 and ni = s.getStmt() and spec.isAfter() + i = 5 and ni = s.getStmt() and spec.isAfter() or - i = 5 and ni = s and spec.isAroundDestructors() + i = 6 and ni = s and spec.isAroundDestructors() or - i = 6 and ni = s and spec.isAfter() + i = 7 and ni = s and spec.isAfter() ) or scope = @@ -836,8 +839,15 @@ private predicate subEdge(Pos p1, Node n1, Node n2, Pos p2) { p2.nodeAt(n2, f) ) or - // IfStmt -> condition ; { then, else } -> + // IfStmt -> [ init -> ] condition ; { then, else } -> exists(IfStmt s | + p1.nodeAt(n1, s) and + p2.nodeBefore(n2, s.getInitialization()) + or + p1.nodeAfter(n1, s.getInitialization()) and + p2.nodeBefore(n2, s.getCondition()) + or + not exists(s.getInitialization()) and p1.nodeAt(n1, s) and p2.nodeBefore(n2, s.getCondition()) or @@ -851,8 +861,15 @@ private predicate subEdge(Pos p1, Node n1, Node n2, Pos p2) { p2.nodeAfter(n2, s) ) or - // ConstexprIfStmt -> condition ; { then, else } -> // same as IfStmt + // ConstexprIfStmt -> [ init -> ] condition ; { then, else } -> // same as IfStmt exists(ConstexprIfStmt s | + p1.nodeAt(n1, s) and + p2.nodeBefore(n2, s.getInitialization()) + or + p1.nodeAfter(n1, s.getInitialization()) and + p2.nodeBefore(n2, s.getCondition()) + or + not exists(s.getInitialization()) and p1.nodeAt(n1, s) and p2.nodeBefore(n2, s.getCondition()) or @@ -953,7 +970,7 @@ private predicate subEdge(Pos p1, Node n1, Node n2, Pos p2) { private predicate subEdgeIncludingDestructors(Pos p1, Node n1, Node n2, Pos p2) { subEdge(p1, n1, n2, p2) or - // If `n1` has sub-nodes to accomodate destructors, but there are none to be + // If `n1` has sub-nodes to accommodate destructors, but there are none to be // called, connect the "before destructors" node directly to the "after // destructors" node. For performance, only do this when the nodes exist. exists(Pos afterDtors | afterDtors.isAfterDestructors() | subEdge(afterDtors, n1, _, _)) and diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index ed803907c39..fb773ea89f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index ed803907c39..fb773ea89f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index ed803907c39..fb773ea89f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index ed803907c39..fb773ea89f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll index 50dcb8901ea..95b34f15dad 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll @@ -216,10 +216,9 @@ private module LambdaFlow { or // jump step exists(Node mid, DataFlowType t0 | - revLambdaFlow(lambdaCall, kind, mid, t0, _, _, _) and + revLambdaFlow(lambdaCall, kind, mid, t0, _, _, lastCall) and toReturn = false and - toJump = true and - lastCall = TDataFlowCallNone() + toJump = true | jumpStepCached(node, mid) and t = t0 @@ -305,7 +304,7 @@ cached private module Cached { /** * If needed, call this predicate from `DataFlowImplSpecific.qll` in order to - * force a stage-dependency on the `DataFlowImplCommon.qll` stage and therby + * force a stage-dependency on the `DataFlowImplCommon.qll` stage and thereby * collapsing the two stages. */ cached @@ -326,7 +325,10 @@ private module Cached { predicate jumpStepCached(Node node1, Node node2) { jumpStep(node1, node2) } cached - predicate clearsContentCached(Node n, Content c) { clearsContent(n, c) } + predicate clearsContentCached(Node n, ContentSet c) { clearsContent(n, c) } + + cached + predicate expectsContentCached(Node n, ContentSet c) { expectsContent(n, c) } cached predicate isUnreachableInCallCached(Node n, DataFlowCall call) { isUnreachableInCall(n, call) } @@ -373,7 +375,7 @@ private module Cached { // For reads, `x.f`, we want to check that the tracked type after the read (which // is obtained by popping the head of the access path stack) is compatible with // the type of `x.f`. - read(_, _, n) + readSet(_, _, n) } cached @@ -469,7 +471,7 @@ private module Cached { // read exists(Node mid | parameterValueFlowCand(p, mid, false) and - read(mid, _, node) and + readSet(mid, _, node) and read = true ) or @@ -657,8 +659,10 @@ private module Cached { * Holds if `arg` flows to `out` through a call using only * value-preserving steps and a single read step, not taking call * contexts into account, thus representing a getter-step. + * + * This predicate is exposed for testing only. */ - predicate getterStep(ArgNode arg, Content c, Node out) { + predicate getterStep(ArgNode arg, ContentSet c, Node out) { argumentValueFlowsThrough(arg, TReadStepTypesSome(_, c, _), out) } @@ -781,8 +785,12 @@ private module Cached { parameterValueFlow(p, n.getPreUpdateNode(), TReadStepTypesNone()) } - private predicate store( - Node node1, Content c, Node node2, DataFlowType contentType, DataFlowType containerType + cached + predicate readSet(Node node1, ContentSet c, Node node2) { readStep(node1, c, node2) } + + cached + predicate storeSet( + Node node1, ContentSet c, Node node2, DataFlowType contentType, DataFlowType containerType ) { storeStep(node1, c, node2) and contentType = getNodeDataFlowType(node1) and @@ -794,14 +802,19 @@ private module Cached { | argumentValueFlowsThrough(n2, TReadStepTypesSome(containerType, c, contentType), n1) or - read(n2, c, n1) and + readSet(n2, c, n1) and contentType = getNodeDataFlowType(n1) and containerType = getNodeDataFlowType(n2) ) } - cached - predicate read(Node node1, Content c, Node node2) { readStep(node1, c, node2) } + private predicate store( + Node node1, Content c, Node node2, DataFlowType contentType, DataFlowType containerType + ) { + exists(ContentSet cs | + c = cs.getAStoreContent() and storeSet(node1, cs, node2, contentType, containerType) + ) + } /** * Holds if data can flow from `node1` to `node2` via a direct assignment to @@ -932,16 +945,16 @@ class CastingNode extends Node { } private predicate readStepWithTypes( - Node n1, DataFlowType container, Content c, Node n2, DataFlowType content + Node n1, DataFlowType container, ContentSet c, Node n2, DataFlowType content ) { - read(n1, c, n2) and + readSet(n1, c, n2) and container = getNodeDataFlowType(n1) and content = getNodeDataFlowType(n2) } private newtype TReadStepTypesOption = TReadStepTypesNone() or - TReadStepTypesSome(DataFlowType container, Content c, DataFlowType content) { + TReadStepTypesSome(DataFlowType container, ContentSet c, DataFlowType content) { readStepWithTypes(_, container, c, _, content) } @@ -950,7 +963,7 @@ private class ReadStepTypesOption extends TReadStepTypesOption { DataFlowType getContainerType() { this = TReadStepTypesSome(result, _, _) } - Content getContent() { this = TReadStepTypesSome(_, result, _) } + ContentSet getContent() { this = TReadStepTypesSome(_, result, _) } DataFlowType getContentType() { this = TReadStepTypesSome(_, _, result) } @@ -1325,8 +1338,6 @@ abstract class AccessPathFront extends TAccessPathFront { abstract boolean toBoolNonEmpty(); TypedContent getHead() { this = TFrontHead(result) } - - predicate isClearedAt(Node n) { clearsContentCached(n, this.getHead().getContent()) } } class AccessPathFrontNil extends AccessPathFront, TFrontNil { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index ed803907c39..fb773ea89f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll index 0a44ec3336b..9ad3e835c38 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll @@ -198,6 +198,12 @@ predicate clearsContent(Node n, Content c) { none() // stub implementation } +/** + * Holds if the value that is being tracked is expected to be stored inside content `c` + * at node `n`. + */ +predicate expectsContent(Node n, ContentSet c) { none() } + /** Gets the type of `n` used for type pruning. */ Type getNodeType(Node n) { suppressUnusedNode(n) and 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 ed3eadca08f..af74d307cca 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll @@ -821,6 +821,34 @@ private class CollectionContent extends Content, TCollectionContent { override string toString() { result = "" } } +/** + * An entity that represents a set of `Content`s. + * + * The set may be interpreted differently depending on whether it is + * stored into (`getAStoreContent`) or read from (`getAReadContent`). + */ +class ContentSet instanceof Content { + /** Gets a content that may be stored into when storing into this set. */ + Content getAStoreContent() { result = this } + + /** Gets a content that may be read from when reading from this set. */ + Content getAReadContent() { result = this } + + /** Gets a textual representation of this content set. */ + string toString() { result = super.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/). + */ + predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { + super.hasLocationInfo(path, sl, sc, el, ec) + } +} + /** * A guard that validates some expression. * diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowVar.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowVar.qll index 6a2b087c2e1..34b2ef5aaf9 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowVar.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowVar.qll @@ -549,7 +549,7 @@ module FlowVar_internal { bb = this.(Loop).getStmt() and v = this.getARelevantVariable() or - this.reachesWithoutAssignment(bb.getAPredecessor(), v) and + this.reachesWithoutAssignment(pragma[only_bind_out](bb.getAPredecessor()), v) and this.bbInLoop(bb) ) and not assignsToVar(bb, v) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/tainttracking1/TaintTrackingImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/tainttracking1/TaintTrackingImpl.qll index e6a93c6dfe8..8cf5a49bc0b 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/tainttracking1/TaintTrackingImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/tainttracking1/TaintTrackingImpl.qll @@ -161,7 +161,7 @@ abstract class Configuration extends DataFlow::Configuration { this.isAdditionalTaintStep(node1, state1, node2, state2) } - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) { + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { (this.isSink(node) or this.isAdditionalTaintStep(node, _)) and defaultImplicitTaintRead(node, c) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/tainttracking2/TaintTrackingImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/tainttracking2/TaintTrackingImpl.qll index e6a93c6dfe8..8cf5a49bc0b 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/tainttracking2/TaintTrackingImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/tainttracking2/TaintTrackingImpl.qll @@ -161,7 +161,7 @@ abstract class Configuration extends DataFlow::Configuration { this.isAdditionalTaintStep(node1, state1, node2, state2) } - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) { + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { (this.isSink(node) or this.isAdditionalTaintStep(node, _)) and defaultImplicitTaintRead(node, c) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index ed803907c39..fb773ea89f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index ed803907c39..fb773ea89f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index ed803907c39..fb773ea89f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index ed803907c39..fb773ea89f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll index 50dcb8901ea..95b34f15dad 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll @@ -216,10 +216,9 @@ private module LambdaFlow { or // jump step exists(Node mid, DataFlowType t0 | - revLambdaFlow(lambdaCall, kind, mid, t0, _, _, _) and + revLambdaFlow(lambdaCall, kind, mid, t0, _, _, lastCall) and toReturn = false and - toJump = true and - lastCall = TDataFlowCallNone() + toJump = true | jumpStepCached(node, mid) and t = t0 @@ -305,7 +304,7 @@ cached private module Cached { /** * If needed, call this predicate from `DataFlowImplSpecific.qll` in order to - * force a stage-dependency on the `DataFlowImplCommon.qll` stage and therby + * force a stage-dependency on the `DataFlowImplCommon.qll` stage and thereby * collapsing the two stages. */ cached @@ -326,7 +325,10 @@ private module Cached { predicate jumpStepCached(Node node1, Node node2) { jumpStep(node1, node2) } cached - predicate clearsContentCached(Node n, Content c) { clearsContent(n, c) } + predicate clearsContentCached(Node n, ContentSet c) { clearsContent(n, c) } + + cached + predicate expectsContentCached(Node n, ContentSet c) { expectsContent(n, c) } cached predicate isUnreachableInCallCached(Node n, DataFlowCall call) { isUnreachableInCall(n, call) } @@ -373,7 +375,7 @@ private module Cached { // For reads, `x.f`, we want to check that the tracked type after the read (which // is obtained by popping the head of the access path stack) is compatible with // the type of `x.f`. - read(_, _, n) + readSet(_, _, n) } cached @@ -469,7 +471,7 @@ private module Cached { // read exists(Node mid | parameterValueFlowCand(p, mid, false) and - read(mid, _, node) and + readSet(mid, _, node) and read = true ) or @@ -657,8 +659,10 @@ private module Cached { * Holds if `arg` flows to `out` through a call using only * value-preserving steps and a single read step, not taking call * contexts into account, thus representing a getter-step. + * + * This predicate is exposed for testing only. */ - predicate getterStep(ArgNode arg, Content c, Node out) { + predicate getterStep(ArgNode arg, ContentSet c, Node out) { argumentValueFlowsThrough(arg, TReadStepTypesSome(_, c, _), out) } @@ -781,8 +785,12 @@ private module Cached { parameterValueFlow(p, n.getPreUpdateNode(), TReadStepTypesNone()) } - private predicate store( - Node node1, Content c, Node node2, DataFlowType contentType, DataFlowType containerType + cached + predicate readSet(Node node1, ContentSet c, Node node2) { readStep(node1, c, node2) } + + cached + predicate storeSet( + Node node1, ContentSet c, Node node2, DataFlowType contentType, DataFlowType containerType ) { storeStep(node1, c, node2) and contentType = getNodeDataFlowType(node1) and @@ -794,14 +802,19 @@ private module Cached { | argumentValueFlowsThrough(n2, TReadStepTypesSome(containerType, c, contentType), n1) or - read(n2, c, n1) and + readSet(n2, c, n1) and contentType = getNodeDataFlowType(n1) and containerType = getNodeDataFlowType(n2) ) } - cached - predicate read(Node node1, Content c, Node node2) { readStep(node1, c, node2) } + private predicate store( + Node node1, Content c, Node node2, DataFlowType contentType, DataFlowType containerType + ) { + exists(ContentSet cs | + c = cs.getAStoreContent() and storeSet(node1, cs, node2, contentType, containerType) + ) + } /** * Holds if data can flow from `node1` to `node2` via a direct assignment to @@ -932,16 +945,16 @@ class CastingNode extends Node { } private predicate readStepWithTypes( - Node n1, DataFlowType container, Content c, Node n2, DataFlowType content + Node n1, DataFlowType container, ContentSet c, Node n2, DataFlowType content ) { - read(n1, c, n2) and + readSet(n1, c, n2) and container = getNodeDataFlowType(n1) and content = getNodeDataFlowType(n2) } private newtype TReadStepTypesOption = TReadStepTypesNone() or - TReadStepTypesSome(DataFlowType container, Content c, DataFlowType content) { + TReadStepTypesSome(DataFlowType container, ContentSet c, DataFlowType content) { readStepWithTypes(_, container, c, _, content) } @@ -950,7 +963,7 @@ private class ReadStepTypesOption extends TReadStepTypesOption { DataFlowType getContainerType() { this = TReadStepTypesSome(result, _, _) } - Content getContent() { this = TReadStepTypesSome(_, result, _) } + ContentSet getContent() { this = TReadStepTypesSome(_, result, _) } DataFlowType getContentType() { this = TReadStepTypesSome(_, _, result) } @@ -1325,8 +1338,6 @@ abstract class AccessPathFront extends TAccessPathFront { abstract boolean toBoolNonEmpty(); TypedContent getHead() { this = TFrontHead(result) } - - predicate isClearedAt(Node n) { clearsContentCached(n, this.getHead().getContent()) } } class AccessPathFrontNil extends AccessPathFront, TFrontNil { 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 b065f400fa6..9dcd7f176df 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 @@ -279,6 +279,12 @@ predicate clearsContent(Node n, Content c) { none() // stub implementation } +/** + * Holds if the value that is being tracked is expected to be stored inside content `c` + * at node `n`. + */ +predicate expectsContent(Node n, ContentSet c) { none() } + /** Gets the type of `n` used for type pruning. */ IRType getNodeType(Node n) { suppressUnusedNode(n) and 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 c629550bc3a..4171f5a5227 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 @@ -37,7 +37,7 @@ private module Cached { * along the chain of addresses computed by `StoreNodeInstr.getInner` to identify field writes * and call `storeStep` accordingly (i.e., for an expression like `a.b.c = x`, we visit `c`, then * `b`, then `a`). - * 2. Flow is transfered from a `WriteSideEffectInstruction` to a `StoreNodeOperand` after flow + * 2. Flow is transferred from a `WriteSideEffectInstruction` to a `StoreNodeOperand` after flow * returns to a caller. Flow will then proceed to the defining instruction of the operand (because * the `StoreNodeInstr` computed by `StoreNodeOperand.getInner()` is the `StoreNode` containing * the defining instruction), and then along the chain computed by `StoreNodeInstr.getInner` like @@ -1063,6 +1063,34 @@ private class CollectionContent extends Content, TCollectionContent { override string toString() { result = "" } } +/** + * An entity that represents a set of `Content`s. + * + * The set may be interpreted differently depending on whether it is + * stored into (`getAStoreContent`) or read from (`getAReadContent`). + */ +class ContentSet instanceof Content { + /** Gets a content that may be stored into when storing into this set. */ + Content getAStoreContent() { result = this } + + /** Gets a content that may be read from when reading from this set. */ + Content getAReadContent() { result = this } + + /** Gets a textual representation of this content set. */ + string toString() { result = super.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/). + */ + predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { + super.hasLocationInfo(path, sl, sc, el, ec) + } +} + /** * A guard that validates some instruction. * diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking1/TaintTrackingImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking1/TaintTrackingImpl.qll index e6a93c6dfe8..8cf5a49bc0b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking1/TaintTrackingImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking1/TaintTrackingImpl.qll @@ -161,7 +161,7 @@ abstract class Configuration extends DataFlow::Configuration { this.isAdditionalTaintStep(node1, state1, node2, state2) } - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) { + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { (this.isSink(node) or this.isAdditionalTaintStep(node, _)) and defaultImplicitTaintRead(node, c) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking2/TaintTrackingImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking2/TaintTrackingImpl.qll index e6a93c6dfe8..8cf5a49bc0b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking2/TaintTrackingImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking2/TaintTrackingImpl.qll @@ -161,7 +161,7 @@ abstract class Configuration extends DataFlow::Configuration { this.isAdditionalTaintStep(node1, state1, node2, state2) } - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) { + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { (this.isSink(node) or this.isAdditionalTaintStep(node, _)) and defaultImplicitTaintRead(node, c) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking3/TaintTrackingImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking3/TaintTrackingImpl.qll index e6a93c6dfe8..8cf5a49bc0b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking3/TaintTrackingImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking3/TaintTrackingImpl.qll @@ -161,7 +161,7 @@ abstract class Configuration extends DataFlow::Configuration { this.isAdditionalTaintStep(node1, state1, node2, state2) } - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) { + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { (this.isSink(node) or this.isAdditionalTaintStep(node, _)) and defaultImplicitTaintRead(node, c) } 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 32e36bb6787..91e1fe03e23 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll @@ -67,7 +67,7 @@ class DefaultEdge extends EdgeKind, TDefaultEdge { /** * A "case" edge, representing the successor of a `Switch` instruction when the - * the condition value matches a correponding `case` label. + * the condition value matches a corresponding `case` label. */ class CaseEdge extends EdgeKind, TCaseEdge { string minValue; diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll index 796fb792366..ca3c378cd7e 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll @@ -34,7 +34,7 @@ class ValueNumber extends TValueNumber { final Instruction getAnInstruction() { this = valueNumber(result) } /** - * Gets one of the instructions that was assigned this value number. The chosen instuction is + * Gets one of the instructions that was assigned this value number. The chosen instruction is * deterministic but arbitrary. Intended for use only in debugging. */ final Instruction getExampleInstruction() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll index 13ec2ca4ca4..303a9683011 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll @@ -1005,7 +1005,7 @@ predicate canReuseSsaForMemoryResult(Instruction instruction) { deprecated predicate canReuseSSAForMemoryResult = canReuseSsaForMemoryResult/1; /** - * Expose some of the internal predicates to PrintSSA.qll. We do this by publically importing those modules in the + * Expose some of the internal predicates to PrintSSA.qll. We do this by publicly importing those modules in the * `DebugSSA` module, which is then imported by PrintSSA. */ module DebugSsa { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll index 796fb792366..ca3c378cd7e 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll @@ -34,7 +34,7 @@ class ValueNumber extends TValueNumber { final Instruction getAnInstruction() { this = valueNumber(result) } /** - * Gets one of the instructions that was assigned this value number. The chosen instuction is + * Gets one of the instructions that was assigned this value number. The chosen instruction is * deterministic but arbitrary. Intended for use only in debugging. */ final Instruction getExampleInstruction() { 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 4449b03a84a..c81b7c5943a 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 @@ -11,7 +11,6 @@ private import TranslatedDeclarationEntry private import TranslatedElement private import TranslatedFunction private import TranslatedInitialization -private import TranslatedFunction private import TranslatedStmt import TranslatedCall 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 eb195286339..187dbc2f994 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 @@ -421,20 +421,36 @@ class TranslatedCatchAnyHandler extends TranslatedHandler { class TranslatedIfStmt extends TranslatedStmt, ConditionContext { override IfStmt stmt; - override Instruction getFirstInstruction() { result = getCondition().getFirstInstruction() } + override Instruction getFirstInstruction() { + if hasInitialization() + then result = getInitialization().getFirstInstruction() + else result = getFirstConditionInstruction() + } override TranslatedElement getChild(int id) { - id = 0 and result = getCondition() + id = 0 and result = getInitialization() or - id = 1 and result = getThen() + id = 1 and result = getCondition() or - id = 2 and result = getElse() + id = 2 and result = getThen() + or + id = 3 and result = getElse() + } + + private predicate hasInitialization() { exists(stmt.getInitialization()) } + + private TranslatedStmt getInitialization() { + result = getTranslatedStmt(stmt.getInitialization()) } private TranslatedCondition getCondition() { result = getTranslatedCondition(stmt.getCondition().getFullyConverted()) } + private Instruction getFirstConditionInstruction() { + result = getCondition().getFirstInstruction() + } + private TranslatedStmt getThen() { result = getTranslatedStmt(stmt.getThen()) } private TranslatedStmt getElse() { result = getTranslatedStmt(stmt.getElse()) } @@ -456,6 +472,9 @@ class TranslatedIfStmt extends TranslatedStmt, ConditionContext { } override Instruction getChildSuccessor(TranslatedElement child) { + child = getInitialization() and + result = getFirstConditionInstruction() + or (child = getThen() or child = getElse()) and result = getParent().getChildSuccessor(this) } @@ -698,14 +717,28 @@ class TranslatedSwitchStmt extends TranslatedStmt { result = getTranslatedExpr(stmt.getExpr().getFullyConverted()) } + private Instruction getFirstExprInstruction() { result = getExpr().getFirstInstruction() } + private TranslatedStmt getBody() { result = getTranslatedStmt(stmt.getStmt()) } - override Instruction getFirstInstruction() { result = getExpr().getFirstInstruction() } + override Instruction getFirstInstruction() { + if hasInitialization() + then result = getInitialization().getFirstInstruction() + else result = getFirstExprInstruction() + } override TranslatedElement getChild(int id) { - id = 0 and result = getExpr() + id = 0 and result = getInitialization() or - id = 1 and result = getBody() + id = 1 and result = getExpr() + or + id = 2 and result = getBody() + } + + private predicate hasInitialization() { exists(stmt.getInitialization()) } + + private TranslatedStmt getInitialization() { + result = getTranslatedStmt(stmt.getInitialization()) } override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { @@ -735,6 +768,8 @@ class TranslatedSwitchStmt extends TranslatedStmt { } override Instruction getChildSuccessor(TranslatedElement child) { + child = getInitialization() and result = getFirstExprInstruction() + or child = getExpr() and result = getInstruction(SwitchBranchTag()) or child = getBody() and result = getParent().getChildSuccessor(this) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll index 796fb792366..ca3c378cd7e 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll @@ -34,7 +34,7 @@ class ValueNumber extends TValueNumber { final Instruction getAnInstruction() { this = valueNumber(result) } /** - * Gets one of the instructions that was assigned this value number. The chosen instuction is + * Gets one of the instructions that was assigned this value number. The chosen instruction is * deterministic but arbitrary. Intended for use only in debugging. */ final Instruction getExampleInstruction() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll index 13ec2ca4ca4..303a9683011 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll @@ -1005,7 +1005,7 @@ predicate canReuseSsaForMemoryResult(Instruction instruction) { deprecated predicate canReuseSSAForMemoryResult = canReuseSsaForMemoryResult/1; /** - * Expose some of the internal predicates to PrintSSA.qll. We do this by publically importing those modules in the + * Expose some of the internal predicates to PrintSSA.qll. We do this by publicly importing those modules in the * `DebugSSA` module, which is then imported by PrintSSA. */ module DebugSsa { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/internal/CppType.qll b/cpp/ql/lib/semmle/code/cpp/ir/internal/CppType.qll index 2ce23f098a2..f3130baec4e 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/internal/CppType.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/internal/CppType.qll @@ -141,7 +141,7 @@ private predicate isOpaqueType(Type type) { * Holds if an `IROpaqueType` with the specified `tag` and `byteSize` should exist. */ predicate hasOpaqueType(Type tag, int byteSize) { - isOpaqueType(tag) and byteSize = getTypeSize(tag) + isOpaqueType(tag) and byteSize = getTypeSize(tag.getUnspecifiedType()) or tag instanceof UnknownType and Raw::needsUnknownOpaqueType(byteSize) } @@ -153,17 +153,18 @@ private IRType getIRTypeForPRValue(Type type) { exists(Type unspecifiedType | unspecifiedType = type.getUnspecifiedType() | isOpaqueType(unspecifiedType) and exists(IROpaqueType opaqueType | opaqueType = result | - opaqueType.getByteSize() = getTypeSize(type) and + opaqueType.getByteSize() = getTypeSize(unspecifiedType) and opaqueType.getTag() = unspecifiedType ) or - unspecifiedType instanceof BoolType and result.(IRBooleanType).getByteSize() = type.getSize() + unspecifiedType instanceof BoolType and + result.(IRBooleanType).getByteSize() = unspecifiedType.getSize() or isSignedIntegerType(unspecifiedType) and - result.(IRSignedIntegerType).getByteSize() = type.getSize() + result.(IRSignedIntegerType).getByteSize() = unspecifiedType.getSize() or isUnsignedIntegerType(unspecifiedType) and - result.(IRUnsignedIntegerType).getByteSize() = type.getSize() + result.(IRUnsignedIntegerType).getByteSize() = unspecifiedType.getSize() or exists(FloatingPointType floatType, IRFloatingPointType irFloatType | floatType = unspecifiedType and @@ -173,7 +174,8 @@ private IRType getIRTypeForPRValue(Type type) { irFloatType.getDomain() = floatType.getDomain() ) or - isPointerIshType(unspecifiedType) and result.(IRAddressType).getByteSize() = getTypeSize(type) + isPointerIshType(unspecifiedType) and + result.(IRAddressType).getByteSize() = getTypeSize(unspecifiedType) or unspecifiedType instanceof FunctionPointerIshType and result.(IRFunctionAddressType).getByteSize() = getTypeSize(type) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Allocation.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Allocation.qll index 1da6e3b0b3b..892673ff1c8 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Allocation.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Allocation.qll @@ -42,10 +42,13 @@ private class MallocAllocationFunction extends AllocationFunction { this.hasGlobalName([ // --- Windows Memory Management for Windows Drivers "ExAllocatePool", // ExAllocatePool(type, size) + "ExAllocatePool2", // ExAllocatePool2(flags, size, tag) + "ExAllocatePool3", // ExAllocatePool3(flags, size, tag, extparams, extparamscount) "ExAllocatePoolWithTag", // ExAllocatePool(type, size, tag) "ExAllocatePoolWithTagPriority", // ExAllocatePoolWithTagPriority(type, size, tag, priority) "ExAllocatePoolWithQuota", // ExAllocatePoolWithQuota(type, size) "ExAllocatePoolWithQuotaTag", // ExAllocatePoolWithQuotaTag(type, size, tag) + "ExAllocatePoolZero", // ExAllocatePoolZero(type, size, tag) "IoAllocateMdl", // IoAllocateMdl(address, size, flag, flag, irp) "IoAllocateErrorLogEntry", // IoAllocateErrorLogEntry(object, size) // --- Windows Global / Local legacy allocation diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Strtok.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Strtok.qll index f2cb6498819..f2759e4a737 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Strtok.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Strtok.qll @@ -5,7 +5,6 @@ import semmle.code.cpp.Function import semmle.code.cpp.models.interfaces.ArrayFunction -import semmle.code.cpp.models.interfaces.ArrayFunction import semmle.code.cpp.models.interfaces.Alias import semmle.code.cpp.models.interfaces.SideEffect import semmle.code.cpp.models.interfaces.Taint diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index e4f562af582..c9e790d9077 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -1802,5 +1802,3 @@ module SimpleRangeAnalysisInternal { defMightOverflowNegatively(def, v) and result = varMaxVal(v) } } - -private import SimpleRangeAnalysisInternal diff --git a/cpp/ql/lib/semmle/code/cpp/security/BufferWrite.qll b/cpp/ql/lib/semmle/code/cpp/security/BufferWrite.qll index a980de9785d..a112f5a3371 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/BufferWrite.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/BufferWrite.qll @@ -6,7 +6,6 @@ */ import cpp -import semmle.code.cpp.commons.Alloc import semmle.code.cpp.commons.Buffer import semmle.code.cpp.commons.Scanf import semmle.code.cpp.models.implementations.Strcat @@ -156,7 +155,7 @@ class StrCopyBW extends BufferWriteCall { // when result exists, it is an exact flow analysis reason instanceof ValueFlowAnalysis and result = - this.getArgument(this.getParamSrc()).(AnalysedString).getMaxLength() * this.getCharSize() + this.getArgument(this.getParamSrc()).(AnalyzedString).getMaxLength() * this.getCharSize() } override int getMaxData(BufferWriteEstimationReason reason) { @@ -202,7 +201,7 @@ class StrCatBW extends BufferWriteCall { // when result exists, it is an exact flow analysis reason instanceof ValueFlowAnalysis and result = - this.getArgument(this.getParamSrc()).(AnalysedString).getMaxLength() * this.getCharSize() + this.getArgument(this.getParamSrc()).(AnalyzedString).getMaxLength() * this.getCharSize() } override int getMaxData(BufferWriteEstimationReason reason) { diff --git a/cpp/ql/lib/semmle/code/cpp/security/Encryption.qll b/cpp/ql/lib/semmle/code/cpp/security/Encryption.qll index 120b154b787..00be9a3deb5 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/Encryption.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/Encryption.qll @@ -59,7 +59,7 @@ predicate isInsecureEncryption(string name) { name.regexpMatch(getInsecureAlgori /** * Holds if there is additional evidence that `name` looks like it might be * related to operations with an encyption algorithm, besides the name of a - * specific algorithm. This can be used in conjuction with + * specific algorithm. This can be used in conjunction with * `isInsecureEncryption` to produce a stronger heuristic. */ bindingset[name] diff --git a/cpp/ql/lib/semmle/code/cpp/security/Overflow.qll b/cpp/ql/lib/semmle/code/cpp/security/Overflow.qll index 32428cd30a7..4d6d22c086a 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/Overflow.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/Overflow.qll @@ -5,8 +5,6 @@ import cpp import semmle.code.cpp.controlflow.Dominance -// `GlobalValueNumbering` is only imported to prevent IR re-evaluation. -private import semmle.code.cpp.valuenumbering.GlobalValueNumbering import semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis import semmle.code.cpp.rangeanalysis.RangeAnalysisUtils import semmle.code.cpp.controlflow.Guards diff --git a/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll b/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll index ef311e6fc45..7ccd9f797dd 100644 --- a/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll +++ b/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll @@ -213,6 +213,26 @@ class ConditionalStmt extends ControlStructure, TConditionalStmt { } class IfStmt extends ConditionalStmt, @stmt_if { override string getAPrimaryQlClass() { result = "IfStmt" } + /** + * Gets the initialization statement of this 'if' statement, if any. + * + * For example, for + * ``` + * if (int x = y; b) { f(); } + * ``` + * the result is `int x = y;`. + * + * Does not hold if the initialization statement is missing or an empty statement, as in + * ``` + * if (b) { f(); } + * ``` + * or + * ``` + * if (; b) { f(); } + * ``` + */ + Stmt getInitialization() { if_initialization(underlyingElement(this), unresolveElement(result)) } + /** * Gets the condition expression of this 'if' statement. * @@ -222,7 +242,7 @@ class IfStmt extends ConditionalStmt, @stmt_if { * ``` * the result is `b`. */ - Expr getCondition() { result = this.getChild(0) } + Expr getCondition() { result = this.getChild(1) } override Expr getControllingExpr() { result = this.getCondition() } @@ -299,6 +319,28 @@ class IfStmt extends ConditionalStmt, @stmt_if { class ConstexprIfStmt extends ConditionalStmt, @stmt_constexpr_if { override string getAPrimaryQlClass() { result = "ConstexprIfStmt" } + /** + * Gets the initialization statement of this 'constexpr if' statement, if any. + * + * For example, for + * ``` + * if constexpr (int x = y; b) { f(); } + * ``` + * the result is `int x = y;`. + * + * Does not hold if the initialization statement is missing or an empty statement, as in + * ``` + * if constexpr (b) { f(); } + * ``` + * or + * ``` + * if constexpr (; b) { f(); } + * ``` + */ + Stmt getInitialization() { + constexpr_if_initialization(underlyingElement(this), unresolveElement(result)) + } + /** * Gets the condition expression of this 'constexpr if' statement. * @@ -308,7 +350,7 @@ class ConstexprIfStmt extends ConditionalStmt, @stmt_constexpr_if { * ``` * the result is `b`. */ - Expr getCondition() { result = this.getChild(0) } + Expr getCondition() { result = this.getChild(1) } override Expr getControllingExpr() { result = this.getCondition() } @@ -926,7 +968,7 @@ class ForStmt extends Loop, @stmt_for { * * Does not hold if the initialization statement is an empty statement, as in * ``` - * for (; i < 10; i++) { j++ } + * for (; i < 10; i++) { j++; } * ``` */ Stmt getInitialization() { for_initialization(underlyingElement(this), unresolveElement(result)) } @@ -1470,6 +1512,28 @@ class DefaultCase extends SwitchCase { class SwitchStmt extends ConditionalStmt, @stmt_switch { override string getAPrimaryQlClass() { result = "SwitchStmt" } + /** + * Gets the initialization statement of this 'switch' statement, if any. + * + * For example, for + * ``` + * switch (int x = y; b) { } + * ``` + * the result is `int x = y;`. + * + * Does not hold if the initialization statement is missing or an empty statement, as in + * ``` + * switch (b) { } + * ``` + * or + * ``` + * switch (; b) { } + * ``` + */ + Stmt getInitialization() { + switch_initialization(underlyingElement(this), unresolveElement(result)) + } + /** * Gets the expression that this 'switch' statement switches on. * @@ -1485,7 +1549,7 @@ class SwitchStmt extends ConditionalStmt, @stmt_switch { * ``` * the result is `i`. */ - Expr getExpr() { result = this.getChild(0) } + Expr getExpr() { result = this.getChild(1) } override Expr getControllingExpr() { result = this.getExpr() } diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index e9a518baf14..cf72c8898d1 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -1863,6 +1863,11 @@ variable_vla( int decl: @stmt_vla_decl 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 @@ -1873,6 +1878,11 @@ if_else( 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 @@ -1893,6 +1903,11 @@ do_body( 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, diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 472bfd55aaf..52676255dbd 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 9999 + 9980 @externalDataElement @@ -18,67 +18,67 @@ @location_stmt - 3805195 - - - @location_default - 30199622 - - - @location_expr - 13127189 + 3805462 @diagnostic - 667106 + 632933 @file - 124610 + 124189 @folder - 15576 + 15994 + + + @location_expr + 13128112 + + + @location_default + 30128761 @macroinvocation - 34062185 + 33895024 @function - 4759741 + 4726273 @fun_decl - 5131684 - - - @type_decl - 3292736 - - - @namespace_decl - 307863 - - - @using - 375719 - - - @static_assert - 130790 + 5096962 @var_decl - 8586319 + 8543232 + + + @type_decl + 3283977 + + + @namespace_decl + 306979 + + + @using + 374921 + + + @static_assert + 130414 @parameter - 6696867 + 6660155 @membervariable - 1050009 + 1050083 @globalvariable @@ -86,63 +86,63 @@ @localvariable - 581746 + 581698 @enumconstant - 240596 + 240613 @builtintype - 22184 + 22109 @derivedtype - 4456239 + 4413446 @decltype - 31152 + 31047 @usertype - 5362968 + 5342989 @mangledname - 1733994 + 1730792 @type_mention - 4011226 + 4011508 @routinetype - 543059 + 546982 @ptrtomember - 38232 + 38103 @specifier - 25016 + 24932 @gnuattribute - 663644 + 664228 @stdattribute - 468476 + 469328 @alignas - 8968 + 8937 @declspec - 238528 + 238544 @msattribute @@ -150,15 +150,15 @@ @attribute_arg_token - 25960 + 25402 @attribute_arg_constant - 324742 + 326469 @attribute_arg_type - 1535 + 470 @attribute_arg_empty @@ -166,99 +166,207 @@ @derivation - 397280 + 402388 @frienddecl - 710038 + 715075 @comment - 9024167 + 9004230 @namespace - 12744 + 12701 @specialnamequalifyingelement - 472 + 470 @namequalifier - 1593457 + 1618961 @value - 10645398 + 10646146 @initialiser - 1736804 + 1731850 + + + @lambdacapture + 28224 + + + @stmt_expr + 1480414 + + + @stmt_if + 723174 + + + @stmt_while + 30207 + + + @stmt_label + 53046 + + + @stmt_return + 1306346 + + + @stmt_block + 1446530 + + + @stmt_end_test_while + 148604 + + + @stmt_for + 61324 + + + @stmt_switch_case + 191408 + + + @stmt_switch + 20901 + + + @stmt_try_block + 42701 + + + @stmt_decl + 608508 + + + @stmt_empty + 193487 + + + @stmt_continue + 22507 + + + @stmt_break + 102234 + + + @stmt_range_based_for + 8467 + + + @stmt_handler + 59432 + + + @stmt_constexpr_if + 52508 + + + @stmt_goto + 110490 + + + @stmt_asm + 110589 + + + @stmt_microsoft_try + 163 + + + @stmt_set_vla_size + 26 + + + @stmt_vla_decl + 21 + + + @stmt_assigned_goto + 9059 + + + @stmt_co_return + 2 @delete_array_expr - 1413 + 1410 @new_array_expr - 5113 + 5099 @ctordirectinit - 111984 + 112813 @ctorvirtualinit - 6546 + 6534 @ctorfieldinit - 199374 + 200789 @ctordelegatinginit - 7857 + 3347 @dtordirectdestruct - 41421 + 41715 @dtorvirtualdestruct - 4093 + 4122 @dtorfielddestruct - 41351 + 41644 @static_cast - 212170 + 211822 @reinterpret_cast - 30881 + 30813 @const_cast - 35398 + 35320 + + + @dynamic_cast + 1040 @c_style_cast - 4209375 + 4209393 @lambdaexpr - 21712 + 21639 @param_ref - 403726 + 375289 @errorexpr - 54470 + 46823 @address_of @@ -266,143 +374,139 @@ @reference_to - 1615323 + 1596143 @indirect - 292094 + 292115 @ref_indirect - 1941936 + 1934537 @array_to_pointer - 1424786 + 1424883 @vacuous_destructor_call - 8711 + 8138 @parexpr - 3572304 + 3572547 @arithnegexpr - 650877 - - - @unaryplusexpr - 2903 + 650874 @complementexpr - 27785 + 27787 @notexpr - 277973 + 277992 @postincrexpr - 61769 + 61774 @postdecrexpr - 41857 + 41860 @preincrexpr - 70302 + 70307 @predecrexpr - 26107 + 26108 @conditionalexpr - 654457 + 654502 @addexpr - 400330 + 400358 @subexpr - 339317 + 339340 @mulexpr - 305870 + 305891 @divexpr - 133721 + 133731 @remexpr - 15707 + 15819 @paddexpr - 86499 + 86505 @psubexpr - 49678 + 49681 @pdiffexpr - 35608 + 35529 @lshiftexpr - 562948 + 562988 @rshiftexpr - 141607 + 141617 @andexpr - 491783 + 491818 @orexpr - 146257 + 146267 @xorexpr - 53934 + 53938 @eqexpr - 468840 + 468873 @neexpr - 300391 + 300411 @gtexpr - 101009 + 100669 @ltexpr - 108562 + 106314 @geexpr - 58985 + 58989 @leexpr - 212126 + 212141 @assignexpr - 933354 + 933419 @assignaddexpr @@ -410,19 +514,19 @@ @assignsubexpr - 15624 + 11157 @assignmulexpr - 7586 + 7170 @assigndivexpr - 4971 + 4972 @assignremexpr - 1625 + 419 @assignlshiftexpr @@ -434,123 +538,119 @@ @assignandexpr - 5780 + 4852 @assignorexpr - 23853 + 23851 @assignxorexpr - 21802 + 21804 @assignpaddexpr - 13576 - - - @assignpsubexpr - 1148 + 13577 @andlogicalexpr - 248991 + 249008 @orlogicalexpr - 863957 + 864018 @commaexpr - 181070 + 181539 @subscriptexpr - 367945 + 367915 @callexpr - 310110 + 309063 @vastartexpr - 3713 + 3703 @vaendexpr - 2832 + 2822 + + + @vacopyexpr + 140 @varaccess - 6005942 + 6006364 @thisaccess - 1129204 + 1125933 @new_expr - 55240 + 47598 @delete_expr - 11649 + 11732 @throw_expr - 21806 + 21765 @condition_decl - 38495 + 38595 @braced_init_list - 1005 + 1008 @type_id - 36173 + 36430 @runtime_sizeof - 289248 + 289268 @runtime_alignof - 48208 + 48550 @sizeof_pack - 5664 + 5644 @routineexpr - 3065607 + 3047613 @type_operand - 1125950 - - - @offsetofexpr - 20101 + 1126029 @isemptyexpr - 2310 + 2305 @ispodexpr - 637 + 636 @hastrivialdestructor - 472 + 470 @literal - 4351842 + 4350894 @aggregateliteral @@ -558,31 +658,39 @@ @istrivialexpr - 944 + 940 @istriviallycopyableexpr - 3776 + 3763 + + + @isconstructibleexpr + 2724 @isfinalexpr - 2100 + 2096 @noexceptexpr - 35718 + 23574 @builtinaddressof - 13189 + 13282 @temp_init - 759580 + 760683 @assume - 3209 + 3200 + + + @unaryplusexpr + 2903 @conjugation @@ -628,6 +736,10 @@ @maxexpr 1 + + @assignpsubexpr + 1148 + @virtfunptrexpr 1 @@ -637,12 +749,12 @@ 950 - @vacopyexpr - 139 + @expr_stmt + 94929 - @expr_stmt - 94922 + @offsetofexpr + 20103 @hasassignexpr @@ -686,7 +798,7 @@ @isabstractexpr - 17 + 18 @isbaseofexpr @@ -694,15 +806,15 @@ @isclassexpr - 1841 + 1835 @isconvtoexpr - 1155 + 1152 @isenumexpr - 1260 + 1257 @ispolyexpr @@ -714,7 +826,7 @@ @typescompexpr - 562376 + 562415 @intaddrexpr @@ -722,23 +834,19 @@ @uuidof - 20051 + 19994 @foldexpr 4 - - @dynamic_cast - 1042 - @noopexpr 37 @istriviallyconstructibleexpr - 2836 + 2829 @isdestructibleexpr @@ -754,15 +862,15 @@ @istriviallyassignableexpr - 525 + 524 @isnothrowassignableexpr - 2100 + 2096 @isstandardlayoutexpr - 840 + 838 @isliteraltypeexpr @@ -780,13 +888,9 @@ @hasnothrowmoveassignexpr 4 - - @isconstructibleexpr - 2731 - @isnothrowconstructibleexpr - 4831 + 4821 @hasfinalizerexpr @@ -826,7 +930,7 @@ @builtinchooseexpr - 9135 + 9136 @vec_fill @@ -852,157 +956,53 @@ @co_yield 1 - - @lambdacapture - 28320 - - - @stmt_expr - 1480310 - - - @stmt_if - 723123 - - - @stmt_while - 30265 - - - @stmt_goto - 110482 - - - @stmt_label - 53042 - - - @stmt_return - 1310769 - - - @stmt_block - 1451428 - - - @stmt_end_test_while - 148593 - - - @stmt_for - 61319 - - - @stmt_switch_case - 190914 - - - @stmt_switch - 20900 - - - @stmt_asm - 110581 - - - @stmt_try_block - 42591 - - - @stmt_decl - 609675 - - - @stmt_empty - 193503 - - - @stmt_continue - 22506 - - - @stmt_break - 102528 - - - @stmt_range_based_for - 8496 - - - @stmt_handler - 59279 - - - @stmt_microsoft_try - 163 - - - @stmt_set_vla_size - 26 - - - @stmt_vla_decl - 21 - - - @stmt_assigned_goto - 9058 - - - @stmt_constexpr_if - 52624 - - - @stmt_co_return - 2 - @ppd_if - 671197 + 672225 @ppd_ifdef - 266213 + 265314 @ppd_ifndef - 269517 + 268607 @ppd_elif - 25488 + 25402 @ppd_else - 211460 + 210746 @ppd_endif - 1206927 + 1206147 @ppd_plain_include - 314830 + 313767 @ppd_define - 2443222 + 2437824 @ppd_undef - 264325 + 262021 @ppd_pragma - 313333 + 312641 @ppd_include_next - 1888 + 1881 @ppd_line - 27783 + 27780 @ppd_error @@ -1048,11 +1048,11 @@ compilations - 9999 + 9980 id - 9999 + 9980 cwd @@ -1070,7 +1070,7 @@ 1 2 - 9999 + 9980 @@ -1096,7 +1096,7 @@ compilation_args - 656105 + 656151 id @@ -1104,11 +1104,11 @@ num - 712 + 713 arg - 34648 + 34651 @@ -1346,7 +1346,7 @@ 1 2 - 32573 + 32576 2 @@ -1367,7 +1367,7 @@ 1 2 - 33435 + 33438 2 @@ -1382,7 +1382,7 @@ compilation_compiling_files - 11494 + 11495 id @@ -1394,7 +1394,7 @@ file - 9983 + 9984 @@ -1628,7 +1628,7 @@ compilation_time - 45979 + 45982 id @@ -1644,7 +1644,7 @@ seconds - 13762 + 10779 @@ -1725,48 +1725,48 @@ 3 4 - 278 + 596 4 5 - 715 + 397 6 - 7 - 119 - - - 9 - 11 - 119 - - - 11 - 12 - 238 - - - 13 - 17 - 119 - - - 18 - 20 - 119 - - - 21 - 26 + 9 159 - 44 - 132 + 9 + 10 + 79 + + + 10 + 11 + 159 + + + 11 + 16 + 159 + + + 17 + 19 119 + + 19 + 22 + 159 + + + 26 + 97 + 159 + @@ -1833,32 +1833,32 @@ 3 4 - 1073 + 1153 4 5 - 676 + 596 5 6 - 238 + 119 6 7 - 437 + 556 7 8 - 159 + 79 8 - 10 - 238 + 9 + 318 11 @@ -1866,8 +1866,8 @@ 278 - 29 - 93 + 28 + 98 198 @@ -1916,21 +1916,16 @@ 3 4 + 79 + + + 132 + 133 39 - 5 - 6 - 39 - - - 167 - 168 - 39 - - - 178 - 179 + 141 + 142 39 @@ -1947,22 +1942,27 @@ 1 2 - 8591 + 5887 2 3 - 3420 + 2505 3 4 - 1312 + 1431 4 - 40 - 437 + 7 + 835 + + + 29 + 45 + 119 @@ -1978,22 +1978,32 @@ 1 2 - 8591 + 5369 2 3 - 2744 + 2625 3 4 - 1551 + 875 4 + 5 + 715 + + + 5 + 7 + 914 + + + 7 64 - 875 + 278 @@ -2009,12 +2019,12 @@ 1 2 - 13483 + 10461 2 3 - 278 + 318 @@ -2024,23 +2034,23 @@ diagnostic_for - 917206 + 968526 diagnostic - 667106 + 632828 compilation - 1890 + 1991 file_number - 105 + 104 file_number_diagnostic_number - 105144 + 104912 @@ -2054,17 +2064,22 @@ 1 2 - 465220 + 405919 2 3 - 177937 + 151656 3 - 9 - 23949 + 4 + 42237 + + + 4 + 8 + 33014 @@ -2080,7 +2095,7 @@ 1 2 - 667106 + 632828 @@ -2096,12 +2111,17 @@ 1 2 - 633284 + 561454 2 - 5 - 33822 + 3 + 71164 + + + 3 + 4 + 209 @@ -2117,52 +2137,67 @@ 37 38 - 105 + 104 - 78 - 79 - 210 + 38 + 39 + 104 - 119 - 120 - 105 + 77 + 78 + 104 - 155 - 156 - 105 + 79 + 80 + 104 - 156 - 157 - 210 + 198 + 199 + 104 + + + 222 + 223 + 104 352 353 - 105 + 104 353 354 - 105 + 104 - 710 - 711 - 105 + 359 + 360 + 104 + + + 418 + 419 + 104 + + + 570 + 571 + 104 756 757 - 630 + 628 1001 1002 - 210 + 209 @@ -2178,7 +2213,7 @@ 1 2 - 1890 + 1991 @@ -2194,52 +2229,67 @@ 37 38 - 105 + 104 - 78 - 79 - 210 + 38 + 39 + 104 - 119 - 120 - 105 + 77 + 78 + 104 - 155 - 156 - 105 + 79 + 80 + 104 - 156 - 157 - 210 + 198 + 199 + 104 + + + 222 + 223 + 104 352 353 - 105 + 104 353 354 - 105 + 104 - 710 - 711 - 105 + 359 + 360 + 104 + + + 418 + 419 + 104 + + + 570 + 571 + 104 756 757 - 630 + 628 1001 1002 - 210 + 209 @@ -2253,9 +2303,9 @@ 12 - 6351 - 6352 - 105 + 6038 + 6039 + 104 @@ -2269,9 +2319,9 @@ 12 - 18 - 19 - 105 + 19 + 20 + 104 @@ -2287,7 +2337,7 @@ 1001 1002 - 105 + 104 @@ -2303,42 +2353,42 @@ 2 3 - 25734 + 25677 + + + 5 + 6 + 5974 6 7 - 12814 + 6183 7 8 - 105 + 17083 8 9 - 42015 + 9327 9 10 - 8193 + 22428 10 11 - 525 + 14358 11 - 12 - 9978 - - - 12 - 14 - 5777 + 13 + 3877 @@ -2354,37 +2404,42 @@ 2 3 - 25734 + 25677 8 9 - 4831 + 19494 9 10 - 37499 + 15930 10 - 11 - 105 - - - 11 - 12 - 20587 + 13 + 6917 13 - 16 - 8193 + 14 + 13624 - 17 - 19 - 8193 + 14 + 15 + 2515 + + + 15 + 16 + 12472 + + + 16 + 20 + 8279 @@ -2400,7 +2455,7 @@ 1 2 - 105144 + 104912 @@ -2410,19 +2465,19 @@ compilation_finished - 9999 + 9980 id - 9999 + 9980 cpu_seconds - 8319 + 7181 elapsed_seconds - 139 + 115 @@ -2436,7 +2491,7 @@ 1 2 - 9999 + 9980 @@ -2452,7 +2507,7 @@ 1 2 - 9999 + 9980 @@ -2468,17 +2523,17 @@ 1 2 - 7160 + 5666 2 3 - 915 + 1063 3 - 11 - 243 + 14 + 451 @@ -2494,12 +2549,12 @@ 1 2 - 8064 + 6661 2 3 - 254 + 520 @@ -2527,49 +2582,39 @@ 5 11 - - 6 - 7 - 11 - 7 8 11 - 13 - 14 + 18 + 19 11 - 23 - 24 + 27 + 28 11 - 64 - 65 + 83 + 84 11 - 95 - 96 + 190 + 191 11 - 136 - 137 + 258 + 259 11 - 254 - 255 - 11 - - - 257 - 258 + 272 + 273 11 @@ -2598,49 +2643,39 @@ 5 11 - - 6 - 7 - 11 - 7 8 11 - 13 - 14 + 18 + 19 11 - 22 - 23 + 25 + 26 11 - 63 - 64 + 79 + 80 11 - 91 - 92 + 135 + 136 11 - 94 - 95 + 169 + 170 11 - 203 - 204 - 11 - - - 233 - 234 + 225 + 226 11 @@ -2867,11 +2902,11 @@ sourceLocationPrefix - 472 + 470 prefix - 472 + 470 @@ -4365,31 +4400,31 @@ locations_default - 30199622 + 30128761 id - 30199622 + 30128761 container - 140186 + 140184 startLine - 2121681 + 2114992 startColumn - 37288 + 37162 endLine - 2124985 + 2117814 endColumn - 48616 + 48452 @@ -4403,7 +4438,7 @@ 1 2 - 30199622 + 30128761 @@ -4419,7 +4454,7 @@ 1 2 - 30199622 + 30128761 @@ -4435,7 +4470,7 @@ 1 2 - 30199622 + 30128761 @@ -4451,7 +4486,7 @@ 1 2 - 30199622 + 30128761 @@ -4467,7 +4502,7 @@ 1 2 - 30199622 + 30128761 @@ -4483,67 +4518,67 @@ 1 2 - 16048 + 16464 2 12 - 10856 + 10819 13 20 - 11800 + 11760 21 36 - 11328 + 11289 36 55 - 11328 + 11289 55 77 - 10856 + 10819 77 102 - 10856 + 10819 102 - 146 - 10856 + 149 + 10819 - 148 - 223 - 10856 + 149 + 227 + 11289 - 226 + 228 350 - 11800 + 11289 358 628 - 10856 + 10819 671 1926 - 10856 + 10819 - 2171 + 2168 2380 - 1888 + 1881 @@ -4559,67 +4594,67 @@ 1 2 - 16048 + 16464 2 9 - 10856 + 10819 9 16 - 11800 + 11760 16 25 - 11328 + 11289 25 40 - 10856 + 10819 40 57 - 10856 + 10819 58 72 - 10856 + 10819 73 - 99 - 10856 + 103 + 11289 - 101 + 106 141 - 12272 + 11760 148 226 - 10856 + 11289 226 - 365 - 10856 + 373 + 10819 - 372 - 1253 - 10856 + 381 + 1456 + 10819 - 1452 - 1616 - 1888 + 1464 + 1613 + 1411 @@ -4635,67 +4670,67 @@ 1 2 - 16048 + 16464 2 4 - 8968 + 8937 4 5 - 7552 + 7526 5 6 - 7552 + 7526 6 8 - 12272 + 11760 8 13 - 11800 + 12230 13 17 - 10856 + 10819 17 25 - 11328 + 11289 25 31 - 11800 + 11760 31 38 - 10856 + 10819 38 52 - 10856 + 10819 52 64 - 10856 + 10819 65 77 - 9440 + 9408 @@ -4711,67 +4746,67 @@ 1 2 - 16048 + 16464 2 9 - 10856 + 10819 9 16 - 11800 + 11760 16 25 - 11328 + 11289 25 40 - 10856 + 10819 40 57 - 10856 + 10819 58 71 - 10856 + 10819 72 - 97 - 10856 + 98 + 10819 - 97 + 101 140 - 11800 + 11760 140 - 225 - 11328 + 224 + 10819 - 225 - 365 - 10856 + 224 + 360 + 10819 - 372 - 1253 - 10856 + 364 + 1185 + 10819 - 1449 - 1613 - 1888 + 1254 + 1610 + 2352 @@ -4787,62 +4822,62 @@ 1 2 - 16048 + 16464 2 10 - 11328 + 11289 10 14 - 10856 + 10819 14 21 - 11328 + 11289 22 31 - 11328 + 11289 31 39 - 12744 + 12701 39 48 - 12272 + 12230 48 56 - 11800 + 11760 56 64 - 11800 + 11760 64 72 - 10856 + 10819 72 77 - 11328 + 11289 77 90 - 8496 + 8467 @@ -4858,719 +4893,59 @@ 1 2 - 598507 + 581905 2 3 - 302085 + 318001 3 4 - 190691 + 199456 4 6 - 171339 + 160882 6 10 - 192579 + 190048 10 16 - 161427 + 166057 16 - 24 - 159539 - - - 24 - 42 - 159539 - - - 42 - 142 - 159539 - - - 142 - 298 - 26432 - - - - - - - startLine - container - - - 12 - - - 1 - 2 - 881241 - - - 2 - 3 - 262437 - - - 3 - 4 - 135466 - - - 4 - 7 - 195883 - - - 7 - 11 - 177475 - - - 11 - 16 - 161899 - - - 16 - 29 - 159539 - - - 29 - 298 - 147738 - - - - - - - startLine - startColumn - - - 12 - - - 1 - 2 - 625884 - - - 2 - 3 - 296893 - - - 3 - 4 - 203435 - - - 4 - 6 - 195411 - - - 6 - 9 - 178891 - - - 9 - 13 - 167091 - - - 13 - 19 - 178419 - - - 19 - 29 - 162843 - - - 29 - 52 - 112810 - - - - - - - startLine - endLine - - - 12 - - - 1 - 2 - 1552910 - - - 2 - 3 - 345510 - - - 3 - 5 - 171811 - - - 5 - 16 - 51449 - - - - - - - startLine - endColumn - - - 12 - - - 1 - 2 - 601811 - - - 2 - 3 - 305389 - - - 3 - 4 - 194939 - - - 4 - 6 - 174171 - - - 6 - 9 - 165675 - - - 9 - 14 - 172755 - - - 14 - 20 - 164259 - - - 20 - 31 - 171339 - - - 31 - 58 - 160955 - - - 58 - 67 - 10384 - - - - - - - startColumn - id - - - 12 - - - 1 - 31 - 2832 - - - 42 - 85 - 2832 - - - 86 - 128 - 2832 - - - 129 - 230 - 2832 - - - 247 - 292 - 2832 - - - 292 - 360 - 2832 - - - 377 - 459 - 2832 - - - 476 - 559 - 2832 - - - 565 - 620 - 2832 - - - 625 - 689 - 2832 - - - 700 - 795 - 2832 - - - 820 - 1546 - 2832 - - - 1698 - 5668 - 2832 - - - 15394 - 15395 - 472 - - - - - - - startColumn - container - - - 12 - - - 1 - 18 - 2832 - - - 23 - 35 - 3304 - - - 37 - 43 - 2832 - - - 44 - 61 - 2832 - - - 65 - 73 - 2832 - - - 73 - 83 - 2832 - - - 83 - 96 - 2832 - - - 96 - 100 - 2832 - - - 101 - 103 - 2832 - - - 104 - 108 - 2832 - - - 108 - 115 - 2832 - - - 116 - 150 - 3304 - - - 152 - 298 - 2360 - - - - - - - startColumn - startLine - - - 12 - - - 1 - 19 - 2832 - - - 30 - 72 - 2832 - - - 83 - 122 - 2832 - - - 123 - 204 - 2832 - - - 213 - 262 - 2832 - - - 264 - 324 - 2832 - - - 324 - 380 - 2832 - - - 404 - 439 - 2832 - - - 455 - 475 - 2832 - - - 477 - 510 - 2832 - - - 517 - 579 - 2832 - - - 588 - 836 - 2832 - - - 1112 - 2199 - 2832 - - - 2401 - 2402 - 472 - - - - - - - startColumn - endLine - - - 12 - - - 1 - 19 - 2832 - - - 30 - 72 - 2832 - - - 83 - 122 - 2832 - - - 123 - 204 - 2832 - - - 213 - 262 - 2832 - - - 264 - 324 - 2832 - - - 324 - 380 - 2832 - - - 405 - 439 - 2832 - - - 455 - 475 - 2832 - - - 476 - 509 - 2832 - - - 520 - 578 - 2832 - - - 588 - 835 - 2832 - - - 1115 - 2200 - 2832 - - - 2409 - 2410 - 472 - - - - - - - startColumn - endColumn - - - 12 - - - 1 - 7 - 2832 - - - 7 - 10 - 1888 - - - 10 - 13 - 2832 - - - 13 - 19 - 2832 - - - 19 - 23 - 2832 - - - 23 25 - 3304 + 168879 25 - 31 - 2832 - - - 31 - 36 - 2832 - - - 38 - 41 - 2360 - - - 41 46 - 3304 + 163704 46 - 50 - 3304 + 169 + 159000 - 51 - 62 - 2832 - - - 63 - 81 - 2832 - - - 85 - 86 - 472 + 170 + 299 + 7056 - endLine - id - - - 12 - - - 1 - 2 - 600867 - - - 2 - 3 - 301141 - - - 3 - 4 - 198243 - - - 4 - 6 - 165203 - - - 6 - 10 - 189275 - - - 10 - 16 - 163315 - - - 16 - 24 - 161899 - - - 24 - 43 - 162371 - - - 43 - 145 - 160011 - - - 146 - 298 - 22656 - - - - - - - endLine + startLine container @@ -5579,42 +4954,702 @@ 1 2 - 883129 + 869799 2 3 - 275181 + 280838 3 5 - 194467 + 191459 5 8 - 177947 + 181110 8 12 - 159539 + 162293 12 18 - 171811 + 166527 18 39 - 160011 + 159941 39 - 298 - 102898 + 299 + 103021 + + + + + + + startLine + startColumn + + + 12 + + + 1 + 2 + 612482 + + + 2 + 3 + 313297 + + + 3 + 4 + 202749 + + + 4 + 6 + 184403 + + + 6 + 9 + 180639 + + + 9 + 13 + 166997 + + + 13 + 19 + 173583 + + + 19 + 29 + 167468 + + + 29 + 52 + 113370 + + + + + + + startLine + endLine + + + 12 + + + 1 + 2 + 1545788 + + + 2 + 3 + 351401 + + + 3 + 5 + 164645 + + + 5 + 16 + 53157 + + + + + + + startLine + endColumn + + + 12 + + + 1 + 2 + 586609 + + + 2 + 3 + 318942 + + + 3 + 4 + 201808 + + + 4 + 6 + 167468 + + + 6 + 9 + 160412 + + + 9 + 14 + 178287 + + + 14 + 21 + 176406 + + + 21 + 32 + 163234 + + + 32 + 61 + 159000 + + + 61 + 66 + 2822 + + + + + + + startColumn + id + + + 12 + + + 1 + 31 + 2822 + + + 42 + 85 + 2822 + + + 86 + 128 + 2822 + + + 129 + 229 + 2822 + + + 248 + 292 + 2822 + + + 292 + 360 + 2822 + + + 376 + 459 + 2822 + + + 476 + 558 + 2822 + + + 565 + 620 + 2822 + + + 626 + 699 + 2822 + + + 699 + 796 + 2822 + + + 819 + 1546 + 2822 + + + 1705 + 5645 + 2822 + + + 15306 + 15307 + 470 + + + + + + + startColumn + container + + + 12 + + + 1 + 18 + 2822 + + + 23 + 35 + 3292 + + + 38 + 43 + 2822 + + + 44 + 61 + 2822 + + + 65 + 73 + 2822 + + + 73 + 83 + 2822 + + + 83 + 95 + 2822 + + + 96 + 101 + 3292 + + + 101 + 105 + 3292 + + + 106 + 111 + 2822 + + + 111 + 123 + 2822 + + + 127 + 153 + 2822 + + + 169 + 299 + 1881 + + + + + + + startColumn + startLine + + + 12 + + + 1 + 19 + 2822 + + + 30 + 72 + 2822 + + + 83 + 122 + 2822 + + + 122 + 205 + 2822 + + + 214 + 261 + 2822 + + + 264 + 322 + 2822 + + + 325 + 380 + 2822 + + + 403 + 436 + 2822 + + + 454 + 474 + 2822 + + + 477 + 514 + 2822 + + + 517 + 586 + 2822 + + + 587 + 831 + 2822 + + + 1116 + 2197 + 2822 + + + 2387 + 2388 + 470 + + + + + + + startColumn + endLine + + + 12 + + + 1 + 19 + 2822 + + + 30 + 72 + 2822 + + + 83 + 122 + 2822 + + + 122 + 205 + 2822 + + + 214 + 261 + 2822 + + + 264 + 322 + 2822 + + + 325 + 380 + 2822 + + + 403 + 435 + 2822 + + + 454 + 474 + 2822 + + + 476 + 513 + 2822 + + + 520 + 585 + 2822 + + + 587 + 831 + 2822 + + + 1121 + 2205 + 2822 + + + 2383 + 2384 + 470 + + + + + + + startColumn + endColumn + + + 12 + + + 1 + 7 + 2822 + + + 7 + 11 + 3292 + + + 11 + 16 + 3292 + + + 16 + 22 + 2822 + + + 22 + 24 + 2352 + + + 24 + 27 + 3292 + + + 28 + 33 + 2822 + + + 33 + 40 + 3292 + + + 40 + 43 + 2822 + + + 43 + 49 + 2822 + + + 49 + 54 + 2822 + + + 54 + 74 + 2822 + + + 75 + 86 + 1881 + + + + + + + endLine + id + + + 12 + + + 1 + 2 + 589902 + + + 2 + 3 + 312356 + + + 3 + 4 + 198986 + + + 4 + 6 + 161352 + + + 6 + 10 + 189577 + + + 10 + 16 + 163704 + + + 16 + 25 + 171231 + + + 25 + 45 + 159471 + + + 45 + 160 + 159941 + + + 160 + 299 + 11289 + + + + + + + endLine + container + + + 12 + + + 1 + 2 + 881560 + + + 2 + 3 + 270019 + + + 3 + 4 + 123249 + + + 4 + 6 + 142065 + + + 6 + 10 + 195693 + + + 10 + 15 + 168409 + + + 15 + 26 + 165586 + + + 26 + 120 + 159471 + + + 121 + 299 + 11760 @@ -5630,22 +5665,22 @@ 1 2 - 1542998 + 1538732 2 3 - 354006 + 349048 3 5 - 170395 + 172172 5 10 - 57585 + 57861 @@ -5661,47 +5696,47 @@ 1 2 - 625412 + 621890 2 3 - 301613 + 304359 3 4 - 204852 + 204631 4 6 - 194467 + 186755 6 9 - 175115 + 177817 9 13 - 172755 + 169349 13 19 - 179363 + 174524 19 - 30 - 165203 + 29 + 162764 - 30 + 29 52 - 106202 + 115722 @@ -5717,52 +5752,52 @@ 1 2 - 605115 + 596488 2 3 - 305389 + 311415 3 4 - 200603 + 198986 4 6 - 168507 + 171701 6 9 - 164259 + 157589 9 14 - 174171 + 173583 14 - 20 - 161899 + 21 + 180169 - 20 - 30 - 159539 + 21 + 32 + 165116 - 30 - 54 - 159539 + 32 + 60 + 159000 - 54 - 66 - 25960 + 60 + 65 + 3763 @@ -5778,67 +5813,67 @@ 1 2 - 5192 + 5174 2 8 - 3776 + 3763 9 - 184 - 3776 + 186 + 3763 196 295 - 3776 + 3763 - 297 - 492 - 3776 + 298 + 498 + 3763 - 506 + 503 553 - 3776 + 3763 - 560 - 632 - 3776 + 563 + 634 + 3763 - 638 - 760 - 3776 + 639 + 762 + 3763 763 871 - 3776 + 3763 - 878 - 1082 - 3776 + 879 + 1081 + 3763 - 1085 + 1083 1286 - 3776 + 3763 - 1307 + 1309 1590 - 3776 + 3763 - 1674 - 2430 - 1888 + 1682 + 2419 + 1881 @@ -5854,67 +5889,67 @@ 1 2 - 5664 + 5644 2 6 - 3776 + 3763 6 65 - 3776 + 3763 - 69 - 99 - 3776 + 70 + 100 + 3763 - 99 - 112 - 4248 + 100 + 111 + 3763 - 113 + 112 122 - 3776 + 3763 - 124 - 140 - 3776 + 122 + 134 + 3763 - 143 - 153 - 3776 + 139 + 152 + 3763 - 153 + 152 160 - 3776 + 4233 160 172 - 3776 + 3763 172 176 - 3776 + 3763 176 208 - 3776 + 3763 240 - 298 - 944 + 299 + 940 @@ -5930,67 +5965,67 @@ 1 2 - 5664 + 5644 2 8 - 3776 + 3763 9 106 - 3776 + 3763 - 152 - 242 - 3776 + 155 + 241 + 3763 253 - 333 - 3776 + 335 + 3763 - 339 - 430 - 3776 + 340 + 426 + 3763 - 434 - 490 - 3776 + 437 + 488 + 3763 - 493 - 572 - 3776 + 488 + 574 + 3763 - 572 - 623 - 3776 + 575 + 628 + 3763 - 629 - 696 - 3776 + 630 + 698 + 4233 - 703 - 814 - 3776 + 701 + 817 + 3763 - 822 - 994 - 3776 + 843 + 1107 + 3763 - 1107 - 1175 - 1416 + 1160 + 1174 + 940 @@ -6006,67 +6041,67 @@ 1 2 - 6136 + 6115 2 4 - 3776 + 3763 4 8 - 3776 + 4233 8 - 14 - 3776 + 15 + 3763 - 14 - 22 - 3776 + 15 + 23 + 3763 - 22 + 23 29 - 4248 + 3763 29 35 - 4248 + 4233 35 39 - 3304 + 3292 39 42 - 3304 + 3763 42 44 - 3304 + 2822 44 46 - 3776 + 3763 46 - 50 - 4248 + 49 + 3763 - 51 + 49 53 - 944 + 1411 @@ -6082,67 +6117,67 @@ 1 2 - 5664 + 5644 2 8 - 3776 + 3763 9 - 153 - 3776 + 156 + 3763 - 157 - 243 - 3776 + 159 + 240 + 3763 - 250 - 333 - 3776 + 251 + 334 + 3763 - 341 - 432 - 3776 + 342 + 430 + 3763 - 432 - 488 - 3776 + 435 + 490 + 4233 - 495 - 571 - 3776 + 504 + 576 + 3763 - 573 - 621 - 3776 + 576 + 631 + 3763 - 628 - 700 - 3776 + 635 + 702 + 3763 - 703 - 815 - 3776 + 702 + 813 + 3763 - 819 - 994 - 3776 + 838 + 1109 + 3763 - 1108 - 1177 - 1416 + 1161 + 1181 + 940 @@ -6152,11 +6187,11 @@ locations_stmt - 3805195 + 3805462 id - 3805195 + 3805462 container @@ -6164,7 +6199,7 @@ startLine - 199402 + 199416 startColumn @@ -6172,7 +6207,7 @@ endLine - 193680 + 193694 endColumn @@ -6190,7 +6225,7 @@ 1 2 - 3805195 + 3805462 @@ -6206,7 +6241,7 @@ 1 2 - 3805195 + 3805462 @@ -6222,7 +6257,7 @@ 1 2 - 3805195 + 3805462 @@ -6238,7 +6273,7 @@ 1 2 - 3805195 + 3805462 @@ -6254,7 +6289,7 @@ 1 2 - 3805195 + 3805462 @@ -6655,67 +6690,67 @@ 1 2 - 21492 + 21494 2 3 - 15258 + 15259 3 4 - 12448 + 12449 4 6 - 14417 + 14418 6 8 - 12489 + 12490 8 11 - 16673 + 16674 11 16 - 17226 + 17228 16 22 - 15319 + 15320 22 29 - 16939 + 16941 29 37 - 17329 + 17330 37 45 - 15053 + 15054 45 56 - 16140 + 16141 56 73 - 8613 + 8614 @@ -6731,62 +6766,62 @@ 1 2 - 22251 + 22253 2 3 - 15688 + 15689 3 4 - 12653 + 12654 4 6 - 14355 + 14356 6 8 - 12694 + 12695 8 11 - 17534 + 17535 11 16 - 16324 + 16325 16 22 - 16181 + 16182 22 29 - 16919 + 16920 29 36 - 15955 + 15956 36 44 - 16283 + 16284 44 54 - 15606 + 15607 54 @@ -6807,52 +6842,52 @@ 1 2 - 26763 + 26765 2 3 - 20795 + 20796 3 4 - 16775 + 16776 4 5 - 16037 + 16038 5 6 - 17391 + 17392 6 7 - 19811 + 19812 7 8 - 22702 + 22704 8 9 - 20344 + 20345 9 10 - 14971 + 14972 10 12 - 16611 + 16612 12 @@ -6873,47 +6908,47 @@ 1 2 - 34515 + 34517 2 3 - 25737 + 25739 3 4 - 18395 + 18397 4 5 - 16181 + 16182 5 6 - 12756 + 12757 6 7 - 11997 + 11998 7 8 - 10151 + 10152 8 9 - 10951 + 10952 9 10 - 10705 + 10706 10 @@ -6923,17 +6958,17 @@ 11 12 - 10151 + 10152 12 14 - 15750 + 15751 14 24 - 11607 + 11608 @@ -6949,62 +6984,62 @@ 1 2 - 22087 + 22089 2 3 - 16160 + 16161 3 4 - 12920 + 12921 4 6 - 16037 + 16038 6 8 - 14663 + 14664 8 10 - 13166 + 13167 10 14 - 18252 + 18253 14 18 - 16980 + 16982 18 22 - 17534 + 17535 22 26 - 18457 + 18458 26 30 - 16345 + 16346 30 36 - 15196 + 15197 36 @@ -7395,12 +7430,12 @@ 1 2 - 17370 + 17371 2 3 - 14376 + 14377 3 @@ -7410,7 +7445,7 @@ 4 6 - 15565 + 15566 6 @@ -7420,42 +7455,42 @@ 8 11 - 15422 + 15423 11 15 - 14601 + 14602 15 21 - 16058 + 16059 21 27 - 15381 + 15382 27 34 - 14909 + 14910 34 42 - 15709 + 15710 42 52 - 15975 + 15977 52 130 - 14376 + 14377 @@ -7471,62 +7506,62 @@ 1 2 - 24897 + 24898 2 3 - 16099 + 16100 3 4 - 12735 + 12736 4 6 - 15627 + 15628 6 8 - 14971 + 14972 8 11 - 15852 + 15854 11 16 - 17411 + 17412 16 20 - 14560 + 14561 20 26 - 17124 + 17125 26 32 - 16222 + 16223 32 39 - 14827 + 14828 39 59 - 13350 + 13351 @@ -7542,62 +7577,62 @@ 1 2 - 32403 + 32405 2 3 - 23707 + 23709 3 4 - 18416 + 18417 4 5 - 15114 + 15115 5 6 - 13843 + 13844 6 7 - 11648 + 11649 7 8 - 11710 + 11711 8 9 - 10889 + 10890 9 10 - 10151 + 10152 10 12 - 17924 + 17925 12 15 - 17678 + 17679 15 100 - 10192 + 10193 @@ -7613,52 +7648,52 @@ 1 2 - 24897 + 24898 2 3 - 20344 + 20345 3 4 - 16796 + 16797 4 5 - 17760 + 17761 5 6 - 18539 + 18540 6 7 - 20385 + 20386 7 8 - 22374 + 22376 8 9 - 18703 + 18704 9 10 - 12899 + 12900 10 12 - 14991 + 14992 12 @@ -7679,12 +7714,12 @@ 1 2 - 24650 + 24652 2 3 - 16591 + 16592 3 @@ -7694,52 +7729,52 @@ 4 6 - 17780 + 17781 6 8 - 15299 + 15300 8 10 - 12797 + 12798 10 13 - 14376 + 14377 13 16 - 14991 + 14992 16 19 - 14622 + 14623 19 22 - 14007 + 14008 22 26 - 17083 + 17084 26 31 - 15299 + 15300 31 39 - 3670 + 3671 @@ -8134,27 +8169,27 @@ locations_expr - 13127189 + 13128112 id - 13127189 + 13128112 container - 4347 + 4348 startLine - 191486 + 191499 startColumn - 2460 + 2461 endLine - 191465 + 191479 endColumn @@ -8172,7 +8207,7 @@ 1 2 - 13127189 + 13128112 @@ -8188,7 +8223,7 @@ 1 2 - 13127189 + 13128112 @@ -8204,7 +8239,7 @@ 1 2 - 13127189 + 13128112 @@ -8220,7 +8255,7 @@ 1 2 - 13127189 + 13128112 @@ -8236,7 +8271,7 @@ 1 2 - 13127189 + 13128112 @@ -8642,67 +8677,67 @@ 1 5 - 16078 + 16079 5 9 - 16447 + 16448 9 15 - 15996 + 15997 15 23 - 15073 + 15074 23 32 - 15114 + 15115 32 44 - 14971 + 14972 44 60 - 14724 + 14726 60 80 - 14807 + 14808 80 103 - 14581 + 14582 103 130 - 14786 + 14787 130 159 - 14560 + 14561 159 194 - 14560 + 14561 194 302 - 9782 + 9783 @@ -8718,22 +8753,22 @@ 1 2 - 23461 + 23463 2 3 - 15586 + 15587 3 4 - 11320 + 11321 4 6 - 16324 + 16325 6 @@ -8743,32 +8778,32 @@ 8 11 - 16406 + 16407 11 16 - 17329 + 17330 16 21 - 16406 + 16407 21 28 - 16611 + 16612 28 35 - 15955 + 15956 35 43 - 15934 + 15936 43 @@ -8789,62 +8824,62 @@ 1 4 - 15934 + 15936 4 7 - 17493 + 17494 7 11 - 16652 + 16653 11 16 - 17370 + 17371 16 21 - 17473 + 17474 21 26 - 15032 + 15033 26 31 - 16140 + 16141 31 36 - 17698 + 17699 36 40 - 15791 + 15792 40 44 - 16529 + 16530 44 49 - 16591 + 16592 49 63 - 8777 + 8778 @@ -8860,22 +8895,22 @@ 1 2 - 101762 + 101769 2 3 - 44564 + 44567 3 4 - 27501 + 27503 4 6 - 14540 + 14541 6 @@ -8896,62 +8931,62 @@ 1 4 - 16919 + 16920 4 7 - 16611 + 16612 7 11 - 16386 + 16387 11 16 - 16181 + 16182 16 21 - 16406 + 16407 21 27 - 16734 + 16735 27 33 - 16406 + 16407 33 38 - 14458 + 14459 38 43 - 15504 + 15505 43 47 - 14745 + 14746 47 52 - 16714 + 16715 52 65 - 14376 + 14377 66 @@ -9352,67 +9387,67 @@ 1 5 - 16099 + 16100 5 9 - 16447 + 16448 9 15 - 15770 + 15772 15 23 - 15053 + 15054 23 32 - 15606 + 15607 32 44 - 14704 + 14705 44 60 - 14458 + 14459 60 80 - 15237 + 15238 80 103 - 14478 + 14479 103 130 - 14786 + 14787 130 159 - 14458 + 14459 159 193 - 14376 + 14377 193 299 - 9987 + 9988 @@ -9428,67 +9463,67 @@ 1 2 - 23461 + 23463 2 3 - 15524 + 15525 3 4 - 11320 + 11321 4 6 - 16016 + 16018 6 8 - 13453 + 13454 8 11 - 16468 + 16469 11 15 - 14458 + 14459 15 20 - 16673 + 16674 20 26 - 14971 + 14972 26 33 - 16119 + 16120 33 40 - 14724 + 14726 40 49 - 14724 + 14726 49 60 - 3547 + 3548 @@ -9504,22 +9539,22 @@ 1 2 - 95343 + 95349 2 3 - 49835 + 49838 3 4 - 29306 + 29308 4 6 - 15565 + 15566 6 @@ -9540,62 +9575,62 @@ 1 4 - 15791 + 15792 4 7 - 17411 + 17412 7 11 - 16447 + 16448 11 16 - 17309 + 17310 16 21 - 17268 + 17269 21 26 - 15114 + 15115 26 31 - 16263 + 16264 31 36 - 17678 + 17679 36 40 - 15340 + 15341 40 44 - 16591 + 16592 44 49 - 16734 + 16735 49 63 - 9515 + 9516 @@ -9611,62 +9646,62 @@ 1 4 - 17144 + 17146 4 7 - 16755 + 16756 7 11 - 16386 + 16387 11 16 - 16837 + 16838 16 21 - 15975 + 15977 21 26 - 14478 + 14479 26 32 - 16119 + 16120 32 37 - 14376 + 14377 37 42 - 15832 + 15833 42 46 - 14232 + 14233 46 51 - 17247 + 17248 51 59 - 14458 + 14459 59 @@ -9726,7 +9761,7 @@ 4177 - 7133 + 7135 225 @@ -9803,22 +9838,22 @@ 135 139 - 225 + 246 139 146 - 225 + 205 146 148 - 225 + 205 148 152 - 225 + 246 152 @@ -10056,23 +10091,23 @@ numlines - 1411307 + 1406545 element_id - 1404227 + 1399488 num_lines - 103842 + 102550 num_code - 85433 + 85615 num_comment - 59945 + 60213 @@ -10086,12 +10121,12 @@ 1 2 - 1397147 + 1392432 2 3 - 7080 + 7056 @@ -10107,12 +10142,12 @@ 1 2 - 1398091 + 1393373 2 3 - 6136 + 6115 @@ -10128,7 +10163,7 @@ 1 2 - 1404227 + 1399488 @@ -10144,27 +10179,27 @@ 1 2 - 69385 + 68680 2 3 - 14160 + 12230 3 - 5 - 8496 + 4 + 7526 - 5 - 63 - 8024 + 4 + 21 + 7997 - 79 + 29 926 - 3776 + 6115 @@ -10180,27 +10215,27 @@ 1 2 - 71745 + 71032 2 3 - 14160 + 12230 3 4 - 7552 + 8467 4 6 - 8968 + 9408 6 7 - 1416 + 1411 @@ -10216,22 +10251,22 @@ 1 2 - 70801 + 70092 2 3 - 16992 + 15053 3 4 - 9912 + 10819 4 7 - 6136 + 6585 @@ -10247,27 +10282,27 @@ 1 2 - 52393 + 53157 2 3 - 15104 + 14582 3 5 - 6608 + 6585 5 42 - 6608 + 6585 - 45 + 44 927 - 4720 + 4704 @@ -10283,27 +10318,27 @@ 1 2 - 52393 + 53157 2 3 - 17464 + 16934 3 5 - 6136 + 6115 5 8 - 7080 + 6585 8 12 - 2360 + 2822 @@ -10319,27 +10354,27 @@ 1 2 - 52865 + 53627 2 3 - 16520 + 15994 3 5 - 7552 + 7526 5 7 - 5192 + 5174 7 10 - 3304 + 3292 @@ -10355,32 +10390,32 @@ 1 2 - 34928 + 34810 2 3 - 8496 + 9408 3 4 - 4720 + 4233 4 6 - 4720 + 4704 6 11 - 5192 + 5174 17 2622 - 1888 + 1881 @@ -10396,32 +10431,32 @@ 1 2 - 34928 + 34810 2 3 - 8496 + 9408 3 4 - 4720 + 4233 4 6 - 4720 + 4704 6 8 - 4720 + 4704 10 - 37 - 2360 + 38 + 2352 @@ -10437,32 +10472,32 @@ 1 2 - 34928 + 34810 2 3 - 8496 + 9408 3 4 - 4720 + 4233 4 6 - 4720 + 4704 6 10 - 4720 + 4704 10 37 - 2360 + 2352 @@ -10472,31 +10507,31 @@ diagnostics - 667106 + 632933 id - 667106 + 632933 severity - 210 + 209 error_tag - 7142 + 7441 error_message - 50629 + 50202 full_error_message - 666371 + 632199 location - 366903 + 354878 @@ -10510,7 +10545,7 @@ 1 2 - 667106 + 632933 @@ -10526,7 +10561,7 @@ 1 2 - 667106 + 632933 @@ -10542,7 +10577,7 @@ 1 2 - 667106 + 632933 @@ -10558,7 +10593,7 @@ 1 2 - 667106 + 632933 @@ -10574,7 +10609,7 @@ 1 2 - 667106 + 632933 @@ -10588,14 +10623,14 @@ 12 - 375 - 376 - 105 + 354 + 355 + 104 - 5976 - 5977 - 105 + 5685 + 5686 + 104 @@ -10611,12 +10646,12 @@ 4 5 - 105 + 104 - 64 - 65 - 105 + 67 + 68 + 104 @@ -10632,12 +10667,12 @@ 6 7 - 105 + 104 - 476 - 477 - 105 + 473 + 474 + 104 @@ -10651,14 +10686,14 @@ 12 - 375 - 376 - 105 + 354 + 355 + 104 - 5969 - 5970 - 105 + 5678 + 5679 + 104 @@ -10672,14 +10707,14 @@ 12 - 211 - 212 - 105 + 198 + 199 + 104 - 3378 - 3379 - 105 + 3278 + 3279 + 104 @@ -10695,256 +10730,246 @@ 1 2 - 735 + 1048 2 3 - 735 + 1048 3 - 4 - 525 - - - 4 - 6 - 630 - - - 6 - 8 - 630 - - - 8 - 14 - 630 - - - 14 - 17 - 525 - - - 18 - 30 - 630 - - - 33 - 51 - 630 - - - 52 - 149 - 630 - - - 200 - 808 - 630 - - - 845 - 1335 - 210 - - - - - - - error_tag - severity - - - 12 - - - 1 - 2 - 7142 - - - - - - - error_tag - error_message - - - 12 - - - 1 - 2 - 4726 - - - 2 - 3 - 630 - - - 3 - 4 - 420 - - - 4 - 6 - 630 - - - 6 - 53 - 630 - - - 249 - 250 - 105 - - - - - - - error_tag - full_error_message - - - 12 - - - 1 - 2 - 840 - - - 2 - 3 - 735 - - - 3 - 4 - 525 - - - 4 - 6 - 630 - - - 6 - 8 - 630 - - - 8 - 14 - 525 - - - 14 - 17 - 525 - - - 18 - 30 - 630 - - - 33 - 51 - 630 - - - 52 - 149 - 630 - - - 200 - 808 - 630 - - - 845 - 1335 - 210 - - - - - - - error_tag - location - - - 12 - - - 1 - 2 - 1155 - - - 2 - 3 - 840 - - - 3 - 4 - 735 - - - 4 5 - 420 + 628 5 - 6 - 420 + 7 + 628 - 6 - 8 - 525 + 7 + 11 + 628 - 8 - 13 - 630 + 12 + 16 + 524 - 14 + 16 25 - 630 + 628 25 + 38 + 628 + + + 41 + 72 + 628 + + + 95 + 610 + 628 + + + 624 + 1277 + 419 + + + + + + + error_tag + severity + + + 12 + + + 1 + 2 + 7441 + + + + + + + error_tag + error_message + + + 12 + + + 1 + 2 + 5240 + + + 2 + 3 + 419 + + + 3 + 4 + 419 + + + 4 + 6 + 628 + + + 6 51 - 630 + 628 - 57 - 219 - 630 + 251 + 252 + 104 + + + + + + + error_tag + full_error_message + + + 12 + + + 1 + 2 + 1152 - 382 - 733 - 525 + 2 + 3 + 1048 + + + 3 + 5 + 628 + + + 5 + 7 + 628 + + + 7 + 13 + 628 + + + 13 + 16 + 419 + + + 16 + 25 + 628 + + + 25 + 38 + 628 + + + 41 + 72 + 628 + + + 95 + 610 + 628 + + + 624 + 1277 + 419 + + + + + + + error_tag + location + + + 12 + + + 1 + 2 + 1781 + + + 2 + 3 + 733 + + + 3 + 4 + 524 + + + 4 + 6 + 628 + + + 6 + 7 + 524 + + + 7 + 12 + 628 + + + 12 + 17 + 628 + + + 24 + 44 + 628 + + + 44 + 110 + 628 + + + 167 + 542 + 628 + + + 704 + 705 + 104 @@ -10960,42 +10985,42 @@ 1 2 - 20377 + 20437 2 3 - 10503 + 10899 3 4 - 2415 + 2829 4 5 - 4411 + 2515 5 - 7 - 3991 + 6 + 2829 - 7 - 14 - 4096 + 6 + 9 + 3773 - 14 - 67 - 3886 + 9 + 21 + 3773 - 75 - 1335 - 945 + 21 + 1277 + 3144 @@ -11011,7 +11036,7 @@ 1 2 - 50629 + 50202 @@ -11027,7 +11052,7 @@ 1 2 - 50629 + 50202 @@ -11043,42 +11068,42 @@ 1 2 - 20482 + 20542 2 3 - 10503 + 10899 3 4 - 2415 + 2829 4 5 - 4411 + 2515 5 - 7 - 3991 + 6 + 2829 - 7 - 14 - 3991 + 6 + 10 + 4087 - 14 - 67 - 3886 + 10 + 24 + 3877 - 75 - 1335 - 945 + 25 + 1277 + 2620 @@ -11094,32 +11119,32 @@ 1 2 - 32352 + 32280 2 3 - 5987 + 5345 3 5 - 3886 + 3563 5 - 9 - 3886 + 8 + 3877 - 9 - 86 - 3886 + 8 + 34 + 3773 - 130 - 733 - 630 + 34 + 705 + 1362 @@ -11135,12 +11160,12 @@ 1 2 - 666266 + 632094 8 9 - 105 + 104 @@ -11156,7 +11181,7 @@ 1 2 - 666371 + 632199 @@ -11172,7 +11197,7 @@ 1 2 - 666371 + 632199 @@ -11188,7 +11213,7 @@ 1 2 - 666371 + 632199 @@ -11204,7 +11229,7 @@ 1 2 - 666371 + 632199 @@ -11220,22 +11245,22 @@ 1 2 - 184554 + 180059 2 3 - 134345 + 135621 3 - 5 - 31721 + 6 + 31023 - 5 + 6 17 - 16281 + 8174 @@ -11251,12 +11276,12 @@ 1 2 - 356819 + 345445 2 3 - 10083 + 9432 @@ -11272,12 +11297,12 @@ 1 2 - 349361 + 338947 2 - 5 - 17541 + 6 + 15930 @@ -11293,12 +11318,12 @@ 1 2 - 348836 + 338423 2 - 5 - 18066 + 6 + 16454 @@ -11314,22 +11339,22 @@ 1 2 - 184659 + 180164 2 3 - 134345 + 135621 3 - 5 - 31721 + 6 + 31023 - 5 + 6 17 - 16176 + 8070 @@ -11339,15 +11364,15 @@ files - 124610 + 124189 id - 124610 + 124189 name - 124610 + 124189 @@ -11361,7 +11386,7 @@ 1 2 - 124610 + 124189 @@ -11377,7 +11402,7 @@ 1 2 - 124610 + 124189 @@ -11387,15 +11412,15 @@ folders - 15576 + 15994 id - 15576 + 15994 name - 15576 + 15994 @@ -11409,7 +11434,7 @@ 1 2 - 15576 + 15994 @@ -11425,7 +11450,7 @@ 1 2 - 15576 + 15994 @@ -11435,15 +11460,15 @@ containerparent - 139242 + 139243 parent - 15576 + 15994 child - 139242 + 139243 @@ -11457,32 +11482,32 @@ 1 2 - 6608 + 7056 2 3 - 3304 + 3292 3 5 - 1416 + 1411 5 12 - 1416 + 1411 23 28 - 1416 + 1411 40 67 - 1416 + 1411 @@ -11498,7 +11523,7 @@ 1 2 - 139242 + 139243 @@ -11508,11 +11533,11 @@ fileannotations - 5264964 + 5254893 id - 5028 + 5019 kind @@ -11520,11 +11545,11 @@ name - 56220 + 56112 value - 47263 + 47173 @@ -11543,7 +11568,7 @@ 2 3 - 4854 + 4845 @@ -11564,52 +11589,52 @@ 102 225 - 382 + 381 227 299 - 382 + 381 301 452 - 405 + 404 452 555 - 382 + 381 559 626 - 382 + 381 626 716 - 382 + 381 729 904 - 382 + 381 904 934 - 81 + 80 936 937 - 1459 + 1457 1083 2036 - 382 + 381 2293 @@ -11635,32 +11660,32 @@ 114 275 - 382 + 381 275 363 - 382 + 381 393 638 - 382 + 381 643 744 - 382 + 381 751 955 - 382 + 381 955 1087 - 382 + 381 1088 @@ -11670,17 +11695,17 @@ 1501 1502 - 1459 + 1457 1504 1874 - 382 + 381 1972 4080 - 243 + 242 @@ -11759,62 +11784,62 @@ 1 2 - 9095 + 9078 2 3 - 6384 + 6372 3 5 - 4287 + 4279 5 9 - 4379 + 4371 9 14 - 4090 + 4082 14 18 - 4287 + 4279 18 20 - 4843 + 4834 20 34 - 4333 + 4325 34 128 - 4623 + 4614 128 229 - 4229 + 4221 229 387 - 4356 + 4348 387 434 - 1309 + 1306 @@ -11830,7 +11855,7 @@ 1 2 - 56220 + 56112 @@ -11846,62 +11871,62 @@ 1 2 - 9107 + 9089 2 3 - 8273 + 8257 3 4 - 2630 + 2625 4 6 - 4634 + 4625 6 9 - 4240 + 4232 9 14 - 4321 + 4313 14 17 - 4240 + 4232 17 22 - 4715 + 4706 22 41 - 4321 + 4313 41 82 - 4275 + 4267 82 157 - 4217 + 4209 158 1895 - 1239 + 1237 @@ -11917,67 +11942,67 @@ 1 2 - 7346 + 7332 2 5 - 2294 + 2289 5 8 - 3418 + 3411 8 15 - 3626 + 3619 15 17 - 2607 + 2602 17 19 - 4252 + 4244 19 34 - 3418 + 3411 34 189 - 3719 + 3712 189 201 - 3707 + 3700 201 266 - 3649 + 3642 266 321 - 3777 + 3770 322 399 - 4055 + 4047 399 435 - 1390 + 1387 @@ -11993,7 +12018,7 @@ 1 2 - 47251 + 47161 2 @@ -12014,67 +12039,67 @@ 1 2 - 7369 + 7355 2 5 - 2653 + 2648 5 8 - 3603 + 3596 8 15 - 3649 + 3642 15 17 - 2908 + 2902 17 19 - 3684 + 3677 19 29 - 3603 + 3596 29 39 - 3765 + 3758 39 48 - 3707 + 3700 48 74 - 3661 + 3654 74 102 - 3545 + 3538 102 119 - 3696 + 3689 119 146 - 1413 + 1410 @@ -12084,15 +12109,15 @@ inmacroexpansion - 109305879 + 109313317 id - 17940692 + 17941916 inv - 2681885 + 2682068 @@ -12106,37 +12131,37 @@ 1 3 - 1565908 + 1566018 3 5 - 1071272 + 1071344 5 6 - 1179734 + 1179814 6 7 - 4799673 + 4800000 7 8 - 6358947 + 6359380 8 9 - 2595071 + 2595248 9 150 - 370084 + 370109 @@ -12152,32 +12177,32 @@ 1 2 - 371830 + 371855 2 3 - 540079 + 540113 3 4 - 349893 + 349917 4 7 - 199801 + 199815 7 8 - 206276 + 206290 8 9 - 240865 + 240882 9 @@ -12187,22 +12212,22 @@ 10 11 - 324110 + 324132 11 337 - 223895 + 223913 339 422 - 201369 + 201383 422 7616 - 21561 + 21563 @@ -12212,15 +12237,15 @@ affectedbymacroexpansion - 35538114 + 35540532 id - 5134928 + 5135277 inv - 2772993 + 2773181 @@ -12234,37 +12259,37 @@ 1 2 - 2804021 + 2804212 2 3 - 557759 + 557797 3 4 - 263786 + 263804 4 5 - 563401 + 563439 5 12 - 390245 + 390272 12 50 - 405678 + 405705 50 9900 - 150035 + 150045 @@ -12280,67 +12305,67 @@ 1 4 - 228146 + 228162 4 7 - 230808 + 230823 7 9 - 219545 + 219560 9 12 - 250025 + 250042 12 13 - 332565 + 332588 13 14 - 164888 + 164899 14 15 - 297580 + 297600 15 16 - 121327 + 121336 16 17 - 275438 + 275457 17 18 - 146319 + 146328 18 20 - 251068 + 251085 20 25 - 208095 + 208109 25 109 - 47183 + 47186 @@ -12350,19 +12375,19 @@ macroinvocations - 34062185 + 33895024 id - 34062185 + 33895024 macro_id - 81572 + 81382 location - 779877 + 778558 kind @@ -12380,7 +12405,7 @@ 1 2 - 34062185 + 33895024 @@ -12396,7 +12421,7 @@ 1 2 - 34062185 + 33895024 @@ -12412,7 +12437,7 @@ 1 2 - 34062185 + 33895024 @@ -12428,52 +12453,57 @@ 1 2 - 16835 + 17578 2 3 - 17322 + 16977 3 4 - 3846 + 3700 4 - 6 - 7323 + 5 + 4880 - 6 - 11 - 7265 + 5 + 8 + 6048 - 11 - 21 - 6546 + 8 + 14 + 6406 - 21 - 47 - 6257 + 14 + 29 + 6291 - 47 - 143 - 6117 + 29 + 72 + 6106 - 143 - 934 - 6152 + 72 + 247 + 6129 - 934 - 168391 - 3904 + 248 + 4166 + 6106 + + + 4220 + 168296 + 1156 @@ -12489,37 +12519,37 @@ 1 2 - 43648 + 43507 2 3 - 10648 + 10651 3 4 - 5295 + 5285 4 6 - 7010 + 6985 6 13 - 6627 + 6626 13 66 - 6152 + 6140 66 3614 - 2189 + 2185 @@ -12535,12 +12565,12 @@ 1 2 - 75732 + 75553 2 3 - 5839 + 5828 @@ -12556,42 +12586,37 @@ 1 2 - 297219 + 320983 2 3 - 195287 + 177752 3 4 - 48978 + 47300 4 5 - 57610 + 59605 5 - 8 - 59059 + 9 + 68533 - 8 - 17 - 59267 + 9 + 23 + 58425 - 17 - 934 - 58572 - - - 942 - 244474 - 3881 + 23 + 244365 + 45958 @@ -12607,12 +12632,12 @@ 1 2 - 732509 + 731281 2 350 - 47367 + 47277 @@ -12628,7 +12653,7 @@ 1 2 - 779877 + 778558 @@ -12642,13 +12667,13 @@ 12 - 21085 - 21086 + 20414 + 20415 11 - 2918595 - 2918596 + 2910446 + 2910447 11 @@ -12668,8 +12693,8 @@ 11 - 5421 - 5422 + 5418 + 5419 11 @@ -12684,13 +12709,13 @@ 12 - 6289 - 6290 + 6291 + 6292 11 - 61017 - 61018 + 61030 + 61031 11 @@ -12701,15 +12726,15 @@ macroparent - 30544569 + 30455631 id - 30544569 + 30455631 parent_id - 23768631 + 23698229 @@ -12723,7 +12748,7 @@ 1 2 - 30544569 + 30455631 @@ -12739,17 +12764,17 @@ 1 2 - 18363231 + 18307194 2 3 - 4552338 + 4540068 3 88 - 853060 + 850966 @@ -12759,15 +12784,15 @@ macrolocationbind - 3984360 + 3984640 id - 2778691 + 2778886 location - 1988314 + 1988454 @@ -12781,22 +12806,22 @@ 1 2 - 2182951 + 2183104 2 3 - 336419 + 336443 3 7 - 229799 + 229815 7 57 - 29521 + 29523 @@ -12812,22 +12837,22 @@ 1 2 - 1589477 + 1589588 2 3 - 169635 + 169647 3 8 - 154222 + 154233 8 723 - 74979 + 74984 @@ -12837,19 +12862,19 @@ macro_argument_unexpanded - 86422356 + 86176891 invocation - 26658798 + 26568376 argument_index - 764 + 763 text - 326615 + 326094 @@ -12863,22 +12888,22 @@ 1 2 - 7473686 + 7436803 2 3 - 10892801 + 10861705 3 4 - 6274590 + 6256816 4 67 - 2017720 + 2013051 @@ -12894,22 +12919,22 @@ 1 2 - 7545213 + 7508019 2 3 - 11043502 + 11011575 3 4 - 6104017 + 6087240 4 67 - 1966065 + 1961541 @@ -12923,18 +12948,18 @@ 12 - 41253 - 41254 - 672 + 41230 + 41231 + 670 - 41455 - 174137 + 41432 + 174067 57 - 715654 - 2300744 + 715085 + 2297335 34 @@ -12951,7 +12976,7 @@ 2 3 - 672 + 670 13 @@ -12960,7 +12985,7 @@ 6559 - 19569 + 19579 34 @@ -12977,57 +13002,57 @@ 1 2 - 39998 + 40858 2 3 - 66161 + 65607 3 4 - 14947 + 15184 4 5 - 44065 + 45103 5 - 7 - 24761 + 8 + 25569 - 7 + 8 12 - 18643 + 16075 12 16 - 22281 + 22297 16 23 - 26673 + 26518 23 43 - 24784 + 24748 43 164 - 24506 + 24459 164 - 521728 - 19790 + 521384 + 19671 @@ -13043,17 +13068,17 @@ 1 2 - 236190 + 235830 2 3 - 79869 + 79728 3 9 - 10555 + 10535 @@ -13063,19 +13088,19 @@ macro_argument_expanded - 86422356 + 86176891 invocation - 26658798 + 26568376 argument_index - 764 + 763 text - 197906 + 197597 @@ -13089,22 +13114,22 @@ 1 2 - 7473686 + 7436803 2 3 - 10892801 + 10861705 3 4 - 6274590 + 6256816 4 67 - 2017720 + 2013051 @@ -13120,22 +13145,22 @@ 1 2 - 10794971 + 10747757 2 3 - 9400379 + 9374150 3 4 - 5321625 + 5307004 4 9 - 1141821 + 1139463 @@ -13149,18 +13174,18 @@ 12 - 41253 - 41254 - 672 + 41230 + 41231 + 670 - 41455 - 174137 + 41432 + 174067 57 - 715654 - 2300744 + 715085 + 2297335 34 @@ -13177,7 +13202,7 @@ 1 2 - 660 + 659 2 @@ -13186,7 +13211,7 @@ 870 - 13871 + 13877 46 @@ -13203,62 +13228,62 @@ 1 2 - 24008 + 24552 2 3 - 41238 + 41147 3 4 - 6940 + 6927 4 5 - 15874 + 16364 5 6 - 3835 + 2995 6 7 - 23324 + 23291 7 9 - 15457 + 15982 9 15 - 17345 + 16699 15 - 30 - 14842 + 31 + 15589 - 30 - 89 - 14947 + 31 + 97 + 15080 - 90 - 505 - 14854 + 97 + 775 + 15485 - 510 - 1054483 - 5237 + 775 + 1052916 + 3481 @@ -13274,17 +13299,17 @@ 1 2 - 100112 + 99989 2 3 - 83009 + 82850 3 66 - 14785 + 14756 @@ -13294,19 +13319,19 @@ functions - 4759741 + 4726273 id - 4759741 + 4726273 name - 1941845 + 1934352 kind - 3304 + 3292 @@ -13320,7 +13345,7 @@ 1 2 - 4759741 + 4726273 @@ -13336,7 +13361,7 @@ 1 2 - 4759741 + 4726273 @@ -13352,22 +13377,22 @@ 1 2 - 1523173 + 1516622 2 3 - 153875 + 154296 3 5 - 151986 + 151003 5 - 1754 - 112810 + 1724 + 112429 @@ -13383,12 +13408,12 @@ 1 2 - 1941373 + 1933881 2 3 - 472 + 470 @@ -13404,37 +13429,37 @@ 6 7 - 472 + 470 64 65 - 472 + 470 173 174 - 472 + 470 195 196 - 472 + 470 - 1365 - 1366 - 472 + 1358 + 1359 + 470 - 2462 - 2463 - 472 + 2432 + 2433 + 470 5819 5820 - 472 + 470 @@ -13450,37 +13475,37 @@ 3 4 - 472 + 470 33 34 - 472 + 470 39 40 - 472 + 470 94 95 - 472 + 470 195 196 - 472 + 470 - 246 - 247 - 472 + 244 + 245 + 470 3505 3506 - 472 + 470 @@ -13490,15 +13515,15 @@ function_entry_point - 1180967 + 1176981 id - 1171054 + 1167103 entry_point - 1180967 + 1176981 @@ -13512,12 +13537,12 @@ 1 2 - 1161142 + 1157224 2 3 - 9912 + 9878 @@ -13533,7 +13558,7 @@ 1 2 - 1180967 + 1176981 @@ -13543,15 +13568,15 @@ function_return_type - 4768237 + 4734741 id - 4759741 + 4726273 return_type - 1027092 + 1016569 @@ -13565,12 +13590,12 @@ 1 2 - 4752660 + 4719217 2 5 - 7080 + 7056 @@ -13586,22 +13611,22 @@ 1 2 - 524874 + 523103 2 3 - 398847 + 390445 3 11 - 78825 + 78559 11 - 2523 - 24544 + 2516 + 24461 @@ -13923,48 +13948,48 @@ purefunctions - 99735 + 99448 id - 99735 + 99448 function_deleted - 141130 + 140654 id - 141130 + 140654 function_defaulted - 74577 + 74325 id - 74577 + 74325 member_function_this_type - 549916 + 553641 id - 549916 + 553641 this_type - 188354 + 189690 @@ -13978,7 +14003,7 @@ 1 2 - 549916 + 553641 @@ -13994,32 +14019,32 @@ 1 2 - 68044 + 68526 2 3 - 45024 + 45414 3 4 - 30331 + 30475 4 5 - 15428 + 15537 5 7 - 15497 + 15607 7 66 - 14028 + 14128 @@ -14029,27 +14054,27 @@ fun_decls - 5136876 + 5102136 id - 5131684 + 5096962 function - 4611530 + 4578563 type_id - 1023788 + 1013276 name - 1843196 + 1836035 location - 3473987 + 3461324 @@ -14063,7 +14088,7 @@ 1 2 - 5131684 + 5096962 @@ -14079,12 +14104,12 @@ 1 2 - 5126492 + 5091787 2 3 - 5192 + 5174 @@ -14100,7 +14125,7 @@ 1 2 - 5131684 + 5096962 @@ -14116,7 +14141,7 @@ 1 2 - 5131684 + 5096962 @@ -14132,17 +14157,17 @@ 1 2 - 4172561 + 4141075 2 3 - 364391 + 363161 3 7 - 74577 + 74325 @@ -14158,12 +14183,12 @@ 1 2 - 4569521 + 4536696 2 5 - 42008 + 41867 @@ -14179,7 +14204,7 @@ 1 2 - 4611530 + 4578563 @@ -14195,17 +14220,17 @@ 1 2 - 4229674 + 4197996 2 4 - 380439 + 379155 4 6 - 1416 + 1411 @@ -14221,22 +14246,22 @@ 1 2 - 447464 + 445954 2 3 - 462097 + 453481 3 9 - 79769 + 79500 9 - 2775 - 34456 + 2768 + 34340 @@ -14252,22 +14277,22 @@ 1 2 - 532426 + 530629 2 3 - 390351 + 381978 3 11 - 77409 + 77148 11 - 2484 - 23600 + 2477 + 23520 @@ -14283,17 +14308,17 @@ 1 2 - 893985 + 883912 2 5 - 90625 + 90319 5 - 824 - 39176 + 822 + 39044 @@ -14309,22 +14334,22 @@ 1 2 - 789199 + 779480 2 3 - 133578 + 133127 3 11 - 78353 + 78089 11 - 2032 - 22656 + 2030 + 22579 @@ -14340,27 +14365,27 @@ 1 2 - 1250824 + 1245192 2 3 - 269517 + 269548 3 4 - 80713 + 80441 4 6 - 139714 + 138772 6 - 1788 - 102426 + 1758 + 102080 @@ -14376,22 +14401,22 @@ 1 2 - 1432076 + 1425832 2 3 - 152930 + 153355 3 5 - 146322 + 145358 5 - 1738 - 111866 + 1708 + 111488 @@ -14407,17 +14432,17 @@ 1 2 - 1622295 + 1615880 2 4 - 135466 + 135009 4 - 969 - 85433 + 954 + 85145 @@ -14433,27 +14458,27 @@ 1 2 - 1272064 + 1266831 2 3 - 297365 + 296362 3 4 - 79769 + 79500 4 8 - 139714 + 139243 8 - 666 - 54281 + 664 + 54097 @@ -14469,17 +14494,17 @@ 1 2 - 3005754 + 2995611 2 4 - 304445 + 302007 4 55 - 163787 + 163704 @@ -14495,17 +14520,17 @@ 1 2 - 3073724 + 3063351 2 6 - 270933 + 268607 6 55 - 129330 + 129364 @@ -14521,12 +14546,12 @@ 1 2 - 3256863 + 3245873 2 27 - 217124 + 215450 @@ -14542,12 +14567,12 @@ 1 2 - 3296512 + 3285388 2 13 - 177475 + 175935 @@ -14557,22 +14582,22 @@ fun_def - 1970638 + 1963988 id - 1970638 + 1963988 fun_specialized - 26432 + 26343 id - 26432 + 26343 @@ -14590,15 +14615,15 @@ fun_decl_specifiers - 2947225 + 2937280 id - 1716697 + 1710904 name - 2832 + 2822 @@ -14612,17 +14637,17 @@ 1 2 - 505049 + 503345 2 3 - 1192767 + 1188742 3 4 - 18880 + 18816 @@ -14638,32 +14663,32 @@ 50 51 - 472 + 470 203 204 - 472 + 470 209 210 - 472 + 470 657 658 - 472 + 470 2561 2562 - 472 + 470 2564 2565 - 472 + 470 @@ -14794,26 +14819,26 @@ fun_decl_empty_throws - 2002263 + 1978101 fun_decl - 2002263 + 1978101 fun_decl_noexcept - 61343 + 61207 fun_decl - 61343 + 61207 constant - 61238 + 61102 @@ -14827,7 +14852,7 @@ 1 2 - 61343 + 61207 @@ -14843,12 +14868,12 @@ 1 2 - 61133 + 60998 2 3 - 105 + 104 @@ -14858,11 +14883,11 @@ fun_decl_empty_noexcept - 890209 + 888146 fun_decl - 890209 + 888146 @@ -14967,19 +14992,19 @@ param_decl_bind - 7511554 + 7472094 id - 7511554 + 7472094 index - 8024 + 7997 fun_decl - 4315108 + 4286434 @@ -14993,7 +15018,7 @@ 1 2 - 7511554 + 7472094 @@ -15009,7 +15034,7 @@ 1 2 - 7511554 + 7472094 @@ -15025,72 +15050,72 @@ 2 3 - 944 + 940 5 6 - 472 + 470 7 8 - 472 + 470 10 11 - 944 + 940 11 12 - 472 + 470 12 13 - 944 + 940 13 14 - 472 + 470 25 26 - 472 + 470 78 79 - 472 + 470 245 246 - 472 + 470 636 637 - 472 + 470 1713 1714 - 472 + 470 3991 3992 - 472 + 470 - 9142 - 9143 - 472 + 9112 + 9113 + 470 @@ -15106,72 +15131,72 @@ 2 3 - 944 + 940 5 6 - 472 + 470 7 8 - 472 + 470 10 11 - 944 + 940 11 12 - 472 + 470 12 13 - 944 + 940 13 14 - 472 + 470 25 26 - 472 + 470 78 79 - 472 + 470 245 246 - 472 + 470 636 637 - 472 + 470 1713 1714 - 472 + 470 3991 3992 - 472 + 470 - 9142 - 9143 - 472 + 9112 + 9113 + 470 @@ -15187,22 +15212,22 @@ 1 2 - 2431319 + 2409002 2 3 - 1075237 + 1071608 3 4 - 508353 + 506638 4 18 - 300197 + 299184 @@ -15218,22 +15243,22 @@ 1 2 - 2431319 + 2409002 2 3 - 1075237 + 1071608 3 4 - 508353 + 506638 4 18 - 300197 + 299184 @@ -15243,27 +15268,27 @@ var_decls - 8655233 + 8611913 id - 8586319 + 8543232 variable - 7559699 + 7520077 type_id - 2453031 + 2430641 name - 674973 + 672695 location - 5383265 + 5365099 @@ -15277,7 +15302,7 @@ 1 2 - 8586319 + 8543232 @@ -15293,12 +15318,12 @@ 1 2 - 8517406 + 8474552 2 3 - 68913 + 68680 @@ -15314,7 +15339,7 @@ 1 2 - 8586319 + 8543232 @@ -15330,7 +15355,7 @@ 1 2 - 8586319 + 8543232 @@ -15346,17 +15371,17 @@ 1 2 - 6694978 + 6658274 2 3 - 709429 + 707035 3 7 - 155291 + 154767 @@ -15372,12 +15397,12 @@ 1 2 - 7386000 + 7346963 2 4 - 173699 + 173113 @@ -15393,12 +15418,12 @@ 1 2 - 7442169 + 7402943 2 3 - 117530 + 117133 @@ -15414,12 +15439,12 @@ 1 2 - 7005089 + 6967337 2 4 - 554610 + 552739 @@ -15435,27 +15460,27 @@ 1 2 - 1525061 + 1505802 2 3 - 517794 + 516046 3 4 - 99121 + 98787 4 7 - 189275 + 188636 7 780 - 121778 + 121367 @@ -15471,22 +15496,22 @@ 1 2 - 1660056 + 1640342 2 3 - 492777 + 491114 3 7 - 188803 + 188166 7 742 - 111394 + 111018 @@ -15502,17 +15527,17 @@ 1 2 - 1939485 + 1918828 2 3 - 389879 + 388563 3 128 - 123666 + 123249 @@ -15528,22 +15553,22 @@ 1 2 - 1763898 + 1743833 2 3 - 408287 + 406910 3 8 - 190691 + 190048 8 595 - 90153 + 89849 @@ -15559,37 +15584,37 @@ 1 2 - 345038 + 343874 2 3 - 87793 + 87497 3 4 - 49088 + 48923 4 6 - 52393 + 52216 6 12 - 52865 + 52686 12 33 - 50976 + 50804 34 - 3311 - 36816 + 3281 + 36692 @@ -15605,37 +15630,37 @@ 1 2 - 372887 + 371628 2 3 - 78825 + 78559 3 4 - 45784 + 45630 4 6 - 50032 + 49864 6 14 - 53809 + 53627 14 56 - 51449 + 51275 56 - 3228 - 22184 + 3198 + 22109 @@ -15651,27 +15676,27 @@ 1 2 - 462097 + 460537 2 3 - 94873 + 94553 3 5 - 47200 + 47041 5 19 - 51449 + 51275 19 - 2009 - 19352 + 1979 + 19287 @@ -15687,32 +15712,32 @@ 1 2 - 383271 + 381978 2 3 - 91569 + 91260 3 5 - 60417 + 60213 5 9 - 51921 + 51745 9 21 - 50976 + 50804 21 1020 - 36816 + 36692 @@ -15728,17 +15753,17 @@ 1 2 - 4551113 + 4535755 2 3 - 552250 + 550387 3 - 1813 - 279901 + 1783 + 278956 @@ -15754,17 +15779,17 @@ 1 2 - 4956568 + 4939842 2 17 - 415840 + 414436 17 - 1809 - 10856 + 1779 + 10819 @@ -15780,12 +15805,12 @@ 1 2 - 5033506 + 5016520 2 - 1591 - 349758 + 1561 + 348578 @@ -15801,12 +15826,12 @@ 1 2 - 5379017 + 5360865 2 24 - 4248 + 4233 @@ -15816,26 +15841,26 @@ var_def - 4097512 + 4083685 id - 4097512 + 4083685 var_decl_specifiers - 336070 + 334936 id - 336070 + 334936 name - 1416 + 1411 @@ -15849,7 +15874,7 @@ 1 2 - 336070 + 334936 @@ -15865,17 +15890,17 @@ 15 16 - 472 + 470 66 67 - 472 + 470 631 632 - 472 + 470 @@ -15885,30 +15910,30 @@ is_structured_binding - 10 + 18 id - 10 + 18 type_decls - 3292736 + 3283977 id - 3292736 + 3283977 type_id - 3241759 + 3233172 location - 3212494 + 3204006 @@ -15922,7 +15947,7 @@ 1 2 - 3292736 + 3283977 @@ -15938,7 +15963,7 @@ 1 2 - 3292736 + 3283977 @@ -15954,12 +15979,12 @@ 1 2 - 3199750 + 3191305 2 5 - 42008 + 41867 @@ -15975,12 +16000,12 @@ 1 2 - 3199750 + 3191305 2 5 - 42008 + 41867 @@ -15996,12 +16021,12 @@ 1 2 - 3171430 + 3163080 2 20 - 41064 + 40926 @@ -16017,12 +16042,12 @@ 1 2 - 3171430 + 3163080 2 20 - 41064 + 40926 @@ -16032,45 +16057,45 @@ type_def - 2666852 + 2660675 id - 2666852 + 2660675 type_decl_top - 758990 + 755959 type_decl - 758990 + 755959 namespace_decls - 307863 + 306979 id - 307863 + 306979 namespace_id - 1418 + 1414 location - 307863 + 306979 bodylocation - 307863 + 306979 @@ -16084,7 +16109,7 @@ 1 2 - 307863 + 306979 @@ -16100,7 +16125,7 @@ 1 2 - 307863 + 306979 @@ -16116,7 +16141,7 @@ 1 2 - 307863 + 306979 @@ -16132,7 +16157,7 @@ 1 2 - 296 + 295 2 @@ -16142,17 +16167,17 @@ 3 6 - 126 + 125 6 14 - 107 + 106 14 30 - 107 + 106 30 @@ -16167,17 +16192,17 @@ 80 127 - 107 + 106 129 199 - 107 + 106 201 504 - 107 + 106 512 @@ -16198,7 +16223,7 @@ 1 2 - 296 + 295 2 @@ -16208,17 +16233,17 @@ 3 6 - 126 + 125 6 14 - 107 + 106 14 30 - 107 + 106 30 @@ -16233,17 +16258,17 @@ 80 127 - 107 + 106 129 199 - 107 + 106 201 504 - 107 + 106 512 @@ -16264,7 +16289,7 @@ 1 2 - 296 + 295 2 @@ -16274,17 +16299,17 @@ 3 6 - 126 + 125 6 14 - 107 + 106 14 30 - 107 + 106 30 @@ -16299,17 +16324,17 @@ 80 127 - 107 + 106 129 199 - 107 + 106 201 504 - 107 + 106 512 @@ -16330,7 +16355,7 @@ 1 2 - 307863 + 306979 @@ -16346,7 +16371,7 @@ 1 2 - 307863 + 306979 @@ -16362,7 +16387,7 @@ 1 2 - 307863 + 306979 @@ -16378,7 +16403,7 @@ 1 2 - 307863 + 306979 @@ -16394,7 +16419,7 @@ 1 2 - 307863 + 306979 @@ -16410,7 +16435,7 @@ 1 2 - 307863 + 306979 @@ -16420,19 +16445,19 @@ usings - 375719 + 374921 id - 375719 + 374921 element_id - 319078 + 318471 location - 250164 + 249791 @@ -16446,7 +16471,7 @@ 1 2 - 375719 + 374921 @@ -16462,7 +16487,7 @@ 1 2 - 375719 + 374921 @@ -16478,17 +16503,17 @@ 1 2 - 264325 + 263903 2 3 - 53337 + 53157 3 5 - 1416 + 1411 @@ -16504,17 +16529,17 @@ 1 2 - 264325 + 263903 2 3 - 53337 + 53157 3 5 - 1416 + 1411 @@ -16530,22 +16555,22 @@ 1 2 - 203907 + 203690 2 4 - 11328 + 11289 4 5 - 31624 + 31517 5 11 - 3304 + 3292 @@ -16561,22 +16586,22 @@ 1 2 - 203907 + 203690 2 4 - 11328 + 11289 4 5 - 31624 + 31517 5 11 - 3304 + 3292 @@ -16586,15 +16611,15 @@ using_container - 479100 + 478195 parent - 11308 + 11298 child - 303777 + 303207 @@ -16608,47 +16633,47 @@ 1 2 - 3348 + 3353 2 4 - 961 + 959 4 6 - 428 + 427 6 7 - 2560 + 2555 7 17 - 926 + 925 19 143 - 787 + 786 178 179 - 1332 + 1329 179 183 - 880 + 878 201 488 - 81 + 80 @@ -16664,22 +16689,22 @@ 1 2 - 224046 + 223629 2 3 - 53091 + 52990 3 11 - 24448 + 24401 13 41 - 2189 + 2185 @@ -16689,27 +16714,27 @@ static_asserts - 130790 + 130414 id - 130790 + 130414 condition - 130790 + 130414 message - 29535 + 29450 location - 16816 + 16768 enclosing - 1948 + 1942 @@ -16723,7 +16748,7 @@ 1 2 - 130790 + 130414 @@ -16739,7 +16764,7 @@ 1 2 - 130790 + 130414 @@ -16755,7 +16780,7 @@ 1 2 - 130790 + 130414 @@ -16771,7 +16796,7 @@ 1 2 - 130790 + 130414 @@ -16787,7 +16812,7 @@ 1 2 - 130790 + 130414 @@ -16803,7 +16828,7 @@ 1 2 - 130790 + 130414 @@ -16819,7 +16844,7 @@ 1 2 - 130790 + 130414 @@ -16835,7 +16860,7 @@ 1 2 - 130790 + 130414 @@ -16851,32 +16876,32 @@ 1 2 - 22006 + 21943 2 3 - 403 + 402 3 4 - 2774 + 2766 4 11 - 1425 + 1420 12 17 - 2383 + 2376 17 513 - 542 + 540 @@ -16892,32 +16917,32 @@ 1 2 - 22006 + 21943 2 3 - 403 + 402 3 4 - 2774 + 2766 4 11 - 1425 + 1420 12 17 - 2383 + 2376 17 513 - 542 + 540 @@ -16933,12 +16958,12 @@ 1 2 - 27416 + 27337 2 33 - 2118 + 2112 @@ -16954,27 +16979,27 @@ 1 2 - 23425 + 23357 2 3 - 189 + 188 3 4 - 2572 + 2565 4 11 - 1267 + 1263 12 21 - 2080 + 2074 @@ -16990,22 +17015,22 @@ 1 2 - 3133 + 3124 2 3 - 2705 + 2697 3 4 - 1311 + 1307 5 6 - 3632 + 3621 6 @@ -17015,7 +17040,7 @@ 14 15 - 2055 + 2049 16 @@ -17025,12 +17050,12 @@ 17 18 - 3411 + 3401 19 52 - 346 + 345 @@ -17046,22 +17071,22 @@ 1 2 - 3133 + 3124 2 3 - 2705 + 2697 3 4 - 1311 + 1307 5 6 - 3632 + 3621 6 @@ -17071,7 +17096,7 @@ 14 15 - 2055 + 2049 16 @@ -17081,12 +17106,12 @@ 17 18 - 3411 + 3401 19 52 - 346 + 345 @@ -17102,17 +17127,17 @@ 1 2 - 4634 + 4621 2 3 - 5958 + 5941 3 4 - 6040 + 6023 4 @@ -17133,32 +17158,32 @@ 1 2 - 3739 + 3728 2 3 - 6129 + 6111 3 4 - 1084 + 1081 4 5 - 3600 + 3590 5 6 - 189 + 188 13 14 - 2055 + 2049 16 @@ -17179,7 +17204,7 @@ 1 2 - 1380 + 1376 2 @@ -17199,7 +17224,7 @@ 209 11052 - 126 + 125 @@ -17215,7 +17240,7 @@ 1 2 - 1380 + 1376 2 @@ -17235,7 +17260,7 @@ 209 11052 - 126 + 125 @@ -17251,17 +17276,17 @@ 1 2 - 1551 + 1546 2 6 - 151 + 150 9 210 - 170 + 169 223 @@ -17282,7 +17307,7 @@ 1 2 - 1538 + 1534 2 @@ -17307,23 +17332,23 @@ params - 6863014 + 6825742 id - 6696867 + 6660155 function - 3967709 + 3940208 index - 8024 + 7997 type_id - 2256204 + 2234478 @@ -17337,7 +17362,7 @@ 1 2 - 6696867 + 6660155 @@ -17353,7 +17378,7 @@ 1 2 - 6696867 + 6660155 @@ -17369,12 +17394,12 @@ 1 2 - 6571312 + 6535025 2 4 - 125554 + 125130 @@ -17390,22 +17415,22 @@ 1 2 - 2325117 + 2303158 2 3 - 963842 + 960590 3 4 - 434720 + 433253 4 18 - 244028 + 243205 @@ -17421,22 +17446,22 @@ 1 2 - 2325117 + 2303158 2 3 - 963842 + 960590 3 4 - 434720 + 433253 4 18 - 244028 + 243205 @@ -17452,22 +17477,22 @@ 1 2 - 2628619 + 2605636 2 3 - 834040 + 831225 3 4 - 350702 + 349519 4 12 - 154347 + 153826 @@ -17483,72 +17508,72 @@ 2 3 - 944 + 940 4 5 - 472 + 470 6 7 - 472 + 470 8 9 - 944 + 940 9 10 - 472 + 470 10 11 - 944 + 940 11 12 - 472 + 470 19 20 - 472 + 470 64 65 - 472 + 470 194 195 - 472 + 470 517 518 - 472 + 470 1438 1439 - 472 + 470 3480 3481 - 472 + 470 - 8406 - 8407 - 472 + 8376 + 8377 + 470 @@ -17564,72 +17589,72 @@ 2 3 - 944 + 940 4 5 - 472 + 470 6 7 - 472 + 470 8 9 - 944 + 940 9 10 - 472 + 470 10 11 - 944 + 940 11 12 - 472 + 470 19 20 - 472 + 470 64 65 - 472 + 470 194 195 - 472 + 470 517 518 - 472 + 470 1438 1439 - 472 + 470 3480 3481 - 472 + 470 - 8406 - 8407 - 472 + 8376 + 8377 + 470 @@ -17645,67 +17670,67 @@ 1 2 - 944 + 940 3 4 - 472 + 470 4 5 - 472 + 470 5 6 - 472 + 470 6 7 - 1416 + 1411 7 8 - 944 + 940 11 12 - 472 + 470 42 43 - 472 + 470 106 107 - 472 + 470 228 229 - 472 + 470 582 583 - 472 + 470 1275 1276 - 472 + 470 - 3696 - 3697 - 472 + 3666 + 3667 + 470 @@ -17721,22 +17746,22 @@ 1 2 - 1544886 + 1525560 2 3 - 447936 + 446425 3 8 - 172283 + 171701 8 522 - 91097 + 90790 @@ -17752,22 +17777,22 @@ 1 2 - 1769090 + 1749008 2 3 - 251580 + 250731 3 9 - 170395 + 169820 9 506 - 65137 + 64917 @@ -17783,17 +17808,17 @@ 1 2 - 1821955 + 1801694 2 3 - 354478 + 353282 3 13 - 79769 + 79500 @@ -17803,15 +17828,15 @@ overrides - 160287 + 159827 new - 125386 + 125026 old - 15139 + 15096 @@ -17825,12 +17850,12 @@ 1 2 - 90491 + 90231 2 3 - 34888 + 34788 3 @@ -17851,37 +17876,37 @@ 1 2 - 7945 + 7922 2 3 - 1910 + 1905 3 4 - 989 + 987 4 5 - 1324 + 1320 5 11 - 1216 + 1213 11 60 - 1166 + 1163 61 231 - 586 + 584 @@ -17891,19 +17916,19 @@ membervariables - 1051799 + 1051873 id - 1050009 + 1050083 type_id - 326270 + 326293 name - 449611 + 449643 @@ -17917,7 +17942,7 @@ 1 2 - 1048298 + 1048372 2 @@ -17938,7 +17963,7 @@ 1 2 - 1050009 + 1050083 @@ -17954,22 +17979,22 @@ 1 2 - 241948 + 241965 2 3 - 51667 + 51670 3 10 - 25415 + 25417 10 4152 - 7238 + 7239 @@ -17985,17 +18010,17 @@ 1 2 - 254119 + 254137 2 3 - 46257 + 46261 3 40 - 24501 + 24502 41 @@ -18016,22 +18041,22 @@ 1 2 - 294013 + 294034 2 3 - 86151 + 86157 3 5 - 41007 + 41010 5 646 - 28438 + 28440 @@ -18047,17 +18072,17 @@ 1 2 - 366204 + 366230 2 3 - 51508 + 51511 3 650 - 31899 + 31901 @@ -18238,19 +18263,19 @@ localvariables - 581746 + 581698 id - 581746 + 581698 type_id - 37913 + 37905 name - 91411 + 91404 @@ -18264,7 +18289,7 @@ 1 2 - 581746 + 581698 @@ -18280,7 +18305,7 @@ 1 2 - 581746 + 581698 @@ -18296,12 +18321,12 @@ 1 2 - 21213 + 21207 2 3 - 5413 + 5417 3 @@ -18311,12 +18336,12 @@ 4 7 - 3413 + 3408 7 18 - 2879 + 2878 18 @@ -18337,7 +18362,7 @@ 1 2 - 27001 + 26999 2 @@ -18347,7 +18372,7 @@ 3 5 - 2946 + 2942 5 @@ -18373,17 +18398,17 @@ 1 2 - 57575 + 57570 2 3 - 14421 + 14420 3 5 - 8389 + 8388 5 @@ -18393,7 +18418,7 @@ 15 5176 - 3976 + 3975 @@ -18409,7 +18434,7 @@ 1 2 - 77221 + 77215 2 @@ -18419,7 +18444,7 @@ 3 1486 - 6708 + 6707 @@ -18429,15 +18454,15 @@ autoderivation - 149996 + 149665 var - 149996 + 149665 derivation_type - 525 + 524 @@ -18451,7 +18476,7 @@ 1 2 - 149996 + 149665 @@ -18467,27 +18492,27 @@ 33 34 - 105 + 104 90 91 - 105 + 104 353 354 - 105 + 104 392 393 - 105 + 104 560 561 - 105 + 104 @@ -18497,19 +18522,19 @@ enumconstants - 240596 + 240613 id - 240596 + 240613 parent - 28399 + 28401 index - 10182 + 10183 type_id @@ -18517,11 +18542,11 @@ name - 240318 + 240334 location - 220589 + 220605 @@ -18535,7 +18560,7 @@ 1 2 - 240596 + 240613 @@ -18551,7 +18576,7 @@ 1 2 - 240596 + 240613 @@ -18567,7 +18592,7 @@ 1 2 - 240596 + 240613 @@ -18583,7 +18608,7 @@ 1 2 - 240596 + 240613 @@ -18599,7 +18624,7 @@ 1 2 - 240596 + 240613 @@ -18630,7 +18655,7 @@ 4 5 - 3897 + 3898 5 @@ -18696,7 +18721,7 @@ 4 5 - 3897 + 3898 5 @@ -18747,7 +18772,7 @@ 1 2 - 28399 + 28401 @@ -18778,7 +18803,7 @@ 4 5 - 3897 + 3898 5 @@ -19002,7 +19027,7 @@ 1 2 - 10182 + 10183 @@ -19210,7 +19235,7 @@ 1 2 - 240039 + 240056 2 @@ -19231,7 +19256,7 @@ 1 2 - 240039 + 240056 2 @@ -19252,7 +19277,7 @@ 1 2 - 240318 + 240334 @@ -19268,7 +19293,7 @@ 1 2 - 240318 + 240334 @@ -19284,7 +19309,7 @@ 1 2 - 240039 + 240056 2 @@ -19305,7 +19330,7 @@ 1 2 - 219834 + 219849 2 @@ -19326,7 +19351,7 @@ 1 2 - 220589 + 220605 @@ -19342,7 +19367,7 @@ 1 2 - 219834 + 219849 2 @@ -19363,7 +19388,7 @@ 1 2 - 220589 + 220605 @@ -19379,7 +19404,7 @@ 1 2 - 219834 + 219849 2 @@ -19394,31 +19419,31 @@ builtintypes - 22184 + 22109 id - 22184 + 22109 name - 22184 + 22109 kind - 22184 + 22109 size - 3304 + 3292 sign - 1416 + 1411 alignment - 2360 + 2352 @@ -19432,7 +19457,7 @@ 1 2 - 22184 + 22109 @@ -19448,7 +19473,7 @@ 1 2 - 22184 + 22109 @@ -19464,7 +19489,7 @@ 1 2 - 22184 + 22109 @@ -19480,7 +19505,7 @@ 1 2 - 22184 + 22109 @@ -19496,7 +19521,7 @@ 1 2 - 22184 + 22109 @@ -19512,7 +19537,7 @@ 1 2 - 22184 + 22109 @@ -19528,7 +19553,7 @@ 1 2 - 22184 + 22109 @@ -19544,7 +19569,7 @@ 1 2 - 22184 + 22109 @@ -19560,7 +19585,7 @@ 1 2 - 22184 + 22109 @@ -19576,7 +19601,7 @@ 1 2 - 22184 + 22109 @@ -19592,7 +19617,7 @@ 1 2 - 22184 + 22109 @@ -19608,7 +19633,7 @@ 1 2 - 22184 + 22109 @@ -19624,7 +19649,7 @@ 1 2 - 22184 + 22109 @@ -19640,7 +19665,7 @@ 1 2 - 22184 + 22109 @@ -19656,7 +19681,7 @@ 1 2 - 22184 + 22109 @@ -19672,37 +19697,37 @@ 1 2 - 472 + 470 2 3 - 472 + 470 4 5 - 472 + 470 7 8 - 472 + 470 9 10 - 472 + 470 11 12 - 472 + 470 13 14 - 472 + 470 @@ -19718,37 +19743,37 @@ 1 2 - 472 + 470 2 3 - 472 + 470 4 5 - 472 + 470 7 8 - 472 + 470 9 10 - 472 + 470 11 12 - 472 + 470 13 14 - 472 + 470 @@ -19764,37 +19789,37 @@ 1 2 - 472 + 470 2 3 - 472 + 470 4 5 - 472 + 470 7 8 - 472 + 470 9 10 - 472 + 470 11 12 - 472 + 470 13 14 - 472 + 470 @@ -19810,12 +19835,12 @@ 1 2 - 944 + 940 3 4 - 2360 + 2352 @@ -19831,12 +19856,12 @@ 1 2 - 2360 + 2352 2 3 - 944 + 940 @@ -19852,17 +19877,17 @@ 6 7 - 472 + 470 12 13 - 472 + 470 29 30 - 472 + 470 @@ -19878,17 +19903,17 @@ 6 7 - 472 + 470 12 13 - 472 + 470 29 30 - 472 + 470 @@ -19904,17 +19929,17 @@ 6 7 - 472 + 470 12 13 - 472 + 470 29 30 - 472 + 470 @@ -19930,12 +19955,12 @@ 5 6 - 944 + 940 7 8 - 472 + 470 @@ -19951,7 +19976,7 @@ 5 6 - 1416 + 1411 @@ -19967,27 +19992,27 @@ 4 5 - 472 + 470 8 9 - 472 + 470 10 11 - 472 + 470 12 13 - 472 + 470 13 14 - 472 + 470 @@ -20003,27 +20028,27 @@ 4 5 - 472 + 470 8 9 - 472 + 470 10 11 - 472 + 470 12 13 - 472 + 470 13 14 - 472 + 470 @@ -20039,27 +20064,27 @@ 4 5 - 472 + 470 8 9 - 472 + 470 10 11 - 472 + 470 12 13 - 472 + 470 13 14 - 472 + 470 @@ -20075,12 +20100,12 @@ 1 2 - 472 + 470 2 3 - 1888 + 1881 @@ -20096,7 +20121,7 @@ 3 4 - 2360 + 2352 @@ -20106,23 +20131,23 @@ derivedtypes - 4456239 + 4413446 id - 4456239 + 4413446 name - 2235907 + 2205312 kind - 2832 + 2822 type_id - 2752285 + 2729356 @@ -20136,7 +20161,7 @@ 1 2 - 4456239 + 4413446 @@ -20152,7 +20177,7 @@ 1 2 - 4456239 + 4413446 @@ -20168,7 +20193,7 @@ 1 2 - 4456239 + 4413446 @@ -20184,17 +20209,17 @@ 1 2 - 1961670 + 1935763 2 5 - 175587 + 171231 5 1173 - 98649 + 98317 @@ -20210,12 +20235,12 @@ 1 2 - 2234963 + 2204371 2 3 - 944 + 940 @@ -20231,17 +20256,17 @@ 1 2 - 1961670 + 1935763 2 5 - 175587 + 171231 5 1155 - 98649 + 98317 @@ -20255,34 +20280,34 @@ 12 - 198 - 199 - 472 + 199 + 200 + 470 - 1118 - 1119 - 472 + 1103 + 1104 + 470 1154 1155 - 472 + 470 1223 1224 - 472 + 470 - 2208 - 2209 - 472 + 2193 + 2194 + 470 - 3540 - 3541 - 472 + 3510 + 3511 + 470 @@ -20298,32 +20323,32 @@ 1 2 - 472 + 470 164 165 - 472 + 470 611 612 - 472 + 470 - 796 - 797 - 472 + 783 + 784 + 470 - 1161 - 1162 - 472 + 1149 + 1150 + 470 - 2006 - 2007 - 472 + 1982 + 1983 + 470 @@ -20337,34 +20362,34 @@ 12 - 83 - 84 - 472 + 84 + 85 + 470 - 1118 - 1119 - 472 + 1103 + 1104 + 470 1154 1155 - 472 + 470 1223 1224 - 472 + 470 - 2163 - 2164 - 472 + 2148 + 2149 + 470 - 3540 - 3541 - 472 + 3510 + 3511 + 470 @@ -20380,22 +20405,22 @@ 1 2 - 1698289 + 1685972 2 3 - 570659 + 568733 3 4 - 375719 + 367395 4 54 - 107618 + 107254 @@ -20411,22 +20436,22 @@ 1 2 - 1709617 + 1697262 2 3 - 563107 + 561206 3 4 - 372887 + 364572 4 54 - 106674 + 106314 @@ -20442,22 +20467,22 @@ 1 2 - 1702537 + 1690206 2 3 - 574435 + 572496 3 4 - 374775 + 366454 4 6 - 100537 + 100198 @@ -20467,19 +20492,19 @@ pointerishsize - 3320584 + 3314342 id - 3320584 + 3314342 size - 472 + 35 alignment - 472 + 35 @@ -20493,7 +20518,7 @@ 1 2 - 3320584 + 3314342 @@ -20509,7 +20534,7 @@ 1 2 - 3320584 + 3314342 @@ -20523,9 +20548,9 @@ 12 - 7035 - 7036 - 472 + 94071 + 94072 + 35 @@ -20541,7 +20566,7 @@ 1 2 - 472 + 35 @@ -20555,9 +20580,9 @@ 12 - 7035 - 7036 - 472 + 94071 + 94072 + 35 @@ -20573,7 +20598,7 @@ 1 2 - 472 + 35 @@ -20583,23 +20608,23 @@ arraysizes - 71745 + 71503 id - 71745 + 71503 num_elements - 23600 + 23520 bytesize - 26432 + 26343 alignment - 1888 + 1881 @@ -20613,7 +20638,7 @@ 1 2 - 71745 + 71503 @@ -20629,7 +20654,7 @@ 1 2 - 71745 + 71503 @@ -20645,7 +20670,7 @@ 1 2 - 71745 + 71503 @@ -20661,32 +20686,32 @@ 1 2 - 2360 + 2352 2 3 - 15104 + 15053 3 4 - 1416 + 1411 4 6 - 1888 + 1881 6 11 - 1888 + 1881 12 14 - 944 + 940 @@ -20702,22 +20727,22 @@ 1 2 - 18408 + 18346 2 3 - 2360 + 2352 3 4 - 1888 + 1881 4 7 - 944 + 940 @@ -20733,22 +20758,22 @@ 1 2 - 18408 + 18346 2 3 - 2832 + 2822 3 4 - 1416 + 1411 4 5 - 944 + 940 @@ -20764,27 +20789,27 @@ 1 2 - 2832 + 2822 2 3 - 16992 + 16934 3 4 - 3304 + 3292 4 8 - 2360 + 2352 11 16 - 944 + 940 @@ -20800,17 +20825,17 @@ 1 2 - 21712 + 21639 2 3 - 3304 + 3292 3 5 - 1416 + 1411 @@ -20826,17 +20851,17 @@ 1 2 - 22184 + 22109 2 3 - 3304 + 3292 4 5 - 944 + 940 @@ -20852,22 +20877,22 @@ 5 6 - 472 + 470 16 17 - 472 + 470 31 32 - 472 + 470 100 101 - 472 + 470 @@ -20883,17 +20908,17 @@ 4 5 - 472 + 470 7 8 - 944 + 940 50 51 - 472 + 470 @@ -20909,22 +20934,22 @@ 4 5 - 472 + 470 7 8 - 472 + 470 8 9 - 472 + 470 50 51 - 472 + 470 @@ -20934,15 +20959,15 @@ typedefbase - 1731312 + 1724183 id - 1731312 + 1724183 type_id - 809076 + 803747 @@ -20956,7 +20981,7 @@ 1 2 - 1731312 + 1724183 @@ -20972,22 +20997,22 @@ 1 2 - 628341 + 623381 2 3 - 84469 + 84307 3 6 - 64632 + 64497 6 5443 - 31632 + 31560 @@ -20997,23 +21022,23 @@ decltypes - 354722 + 355640 id - 23891 + 23953 expr - 354722 + 355640 base_type - 17137 + 17181 parentheses_would_change_meaning - 17 + 18 @@ -21027,37 +21052,37 @@ 1 2 - 5945 + 5961 2 3 - 7472 + 7492 3 4 - 3251 + 3259 4 7 - 1993 + 1999 7 18 - 1993 + 1999 18 42 - 2011 + 2017 42 1767 - 1221 + 1224 @@ -21073,7 +21098,7 @@ 1 2 - 23891 + 23953 @@ -21089,7 +21114,7 @@ 1 2 - 23891 + 23953 @@ -21105,7 +21130,7 @@ 1 2 - 354722 + 355640 @@ -21121,7 +21146,7 @@ 1 2 - 354722 + 355640 @@ -21137,7 +21162,7 @@ 1 2 - 354722 + 355640 @@ -21153,17 +21178,17 @@ 1 2 - 14442 + 14479 2 3 - 2209 + 2215 3 149 - 485 + 486 @@ -21179,37 +21204,37 @@ 1 2 - 1796 + 1800 2 3 - 7329 + 7348 3 4 - 3071 + 3079 4 5 - 1419 + 1422 5 11 - 1365 + 1368 11 43 - 1562 + 1566 43 6569 - 592 + 594 @@ -21225,7 +21250,7 @@ 1 2 - 17137 + 17181 @@ -21241,7 +21266,7 @@ 1330 1331 - 17 + 18 @@ -21257,7 +21282,7 @@ 19747 19748 - 17 + 18 @@ -21273,7 +21298,7 @@ 954 955 - 17 + 18 @@ -21283,19 +21308,19 @@ usertypes - 5362968 + 5342989 id - 5362968 + 5342989 name - 1392427 + 1383024 kind - 5192 + 5174 @@ -21309,7 +21334,7 @@ 1 2 - 5362968 + 5342989 @@ -21325,7 +21350,7 @@ 1 2 - 5362968 + 5342989 @@ -21341,27 +21366,27 @@ 1 2 - 1009627 + 1001986 2 3 - 162371 + 161352 3 7 - 108562 + 107725 7 - 81 - 104786 + 80 + 104432 - 92 + 80 885 - 7080 + 7526 @@ -21377,17 +21402,17 @@ 1 2 - 1247992 + 1240488 2 3 - 128858 + 127012 3 7 - 15576 + 15523 @@ -21403,57 +21428,57 @@ 6 7 - 472 + 470 10 11 - 472 + 470 26 27 - 472 + 470 - 121 - 122 - 472 + 124 + 125 + 470 - 138 - 139 - 472 + 139 + 140 + 470 - 690 - 691 - 472 + 700 + 701 + 470 - 862 - 863 - 472 + 861 + 862 + 470 963 964 - 472 + 470 - 1770 - 1771 - 472 + 1762 + 1763 + 470 - 1913 - 1914 - 472 + 1899 + 1900 + 470 - 4863 - 4864 - 472 + 4868 + 4869 + 470 @@ -21469,57 +21494,57 @@ 5 6 - 472 + 470 6 7 - 472 + 470 14 15 - 472 + 470 30 31 - 472 + 470 44 45 - 472 + 470 - 124 - 125 - 472 + 126 + 127 + 470 269 270 - 472 + 470 373 374 - 472 + 470 433 434 - 472 + 470 - 749 - 750 - 472 + 748 + 749 + 470 - 1250 - 1251 - 472 + 1236 + 1237 + 470 @@ -21529,19 +21554,19 @@ usertypesize - 1766258 + 1755594 id - 1766258 + 1755594 size - 13688 + 13642 alignment - 2360 + 2352 @@ -21555,7 +21580,7 @@ 1 2 - 1766258 + 1755594 @@ -21571,7 +21596,7 @@ 1 2 - 1766258 + 1755594 @@ -21587,47 +21612,47 @@ 1 2 - 3304 + 3292 2 3 - 4248 + 4233 3 4 - 472 + 470 4 5 - 944 + 940 6 8 - 944 + 940 9 15 - 944 + 940 37 84 - 944 + 940 92 - 160 - 944 + 163 + 940 748 - 2552 - 944 + 2539 + 940 @@ -21643,17 +21668,17 @@ 1 2 - 10384 + 10349 2 3 - 2832 + 2822 3 4 - 472 + 470 @@ -21669,27 +21694,27 @@ 2 3 - 472 + 470 6 7 - 472 + 470 - 181 - 182 - 472 + 184 + 185 + 470 254 255 - 472 + 470 - 3299 - 3300 - 472 + 3286 + 3287 + 470 @@ -21705,27 +21730,27 @@ 1 2 - 472 + 470 2 3 - 472 + 470 3 4 - 472 + 470 9 10 - 472 + 470 22 23 - 472 + 470 @@ -21735,26 +21760,26 @@ usertype_final - 9558 + 9537 id - 9558 + 9537 usertype_uuid - 36206 + 36102 id - 36206 + 36102 uuid - 36206 + 35737 @@ -21768,7 +21793,7 @@ 1 2 - 36206 + 36102 @@ -21784,7 +21809,12 @@ 1 2 - 36206 + 35373 + + + 2 + 3 + 364 @@ -21794,15 +21824,15 @@ mangled_name - 5283199 + 5264430 id - 5283199 + 5264430 mangled_name - 1236664 + 1235313 @@ -21816,7 +21846,7 @@ 1 2 - 5283199 + 5264430 @@ -21832,32 +21862,32 @@ 1 2 - 733502 + 731027 2 3 - 178419 + 178287 3 4 - 82601 + 84674 4 6 - 85905 + 86086 6 - 14 - 99121 + 13 + 93142 - 14 + 13 885 - 57113 + 62094 @@ -21867,59 +21897,59 @@ is_pod_class - 559630 + 554327 id - 559630 + 554327 is_standard_layout_class - 1306521 + 1295997 id - 1306521 + 1295997 is_complete - 1706313 + 1694439 id - 1706313 + 1694439 is_class_template - 406871 + 405028 id - 406871 + 405028 class_instantiation - 1132350 + 1121943 to - 1132350 + 1121943 from - 171811 + 170761 @@ -21933,7 +21963,7 @@ 1 2 - 1132350 + 1121943 @@ -21949,42 +21979,42 @@ 1 2 - 60417 + 58802 2 3 - 29736 + 30106 3 4 - 16048 + 16464 4 5 - 14160 + 14582 5 7 - 15576 + 15523 7 - 14 - 15576 + 13 + 13171 - 14 - 34 - 13216 + 13 + 29 + 13171 - 34 + 30 84 - 7080 + 8937 @@ -21994,19 +22024,19 @@ class_template_argument - 2984763 + 2978116 type_id - 1362392 + 1355715 index - 1297 + 1295 arg_type - 873917 + 863387 @@ -22020,27 +22050,27 @@ 1 2 - 553906 + 551563 2 3 - 419705 + 411593 3 4 - 242829 + 246019 4 7 - 121721 + 122356 7 113 - 24228 + 24182 @@ -22056,22 +22086,22 @@ 1 2 - 578853 + 577422 2 3 - 432393 + 424939 3 4 - 256363 + 257885 4 113 - 94781 + 95468 @@ -22092,7 +22122,7 @@ 2 3 - 822 + 821 3 @@ -22111,12 +22141,12 @@ 592 - 8760 + 8835 104 - 12939 - 114739 + 13776 + 114840 46 @@ -22138,7 +22168,7 @@ 2 3 - 822 + 821 3 @@ -22157,12 +22187,12 @@ 195 - 3458 + 4197 104 - 11165 - 39733 + 10467 + 39739 34 @@ -22179,27 +22209,27 @@ 1 2 - 536062 + 535650 2 3 - 191313 + 181071 3 4 - 53972 + 52573 4 - 11 - 67088 + 10 + 65688 - 11 - 10817 - 25479 + 10 + 11334 + 28403 @@ -22215,17 +22245,17 @@ 1 2 - 762763 + 755683 2 3 - 94156 + 85741 3 22 - 16998 + 21961 @@ -22235,19 +22265,19 @@ class_template_argument_value - 506465 + 508520 type_id - 314830 + 316590 index - 1888 + 1881 arg_value - 506465 + 508520 @@ -22261,17 +22291,17 @@ 1 2 - 259133 + 261081 2 3 - 53809 + 53627 3 4 - 1888 + 1881 @@ -22287,22 +22317,22 @@ 1 2 - 199187 + 200397 2 3 - 81185 + 81852 3 - 4 - 12272 + 5 + 29165 - 4 + 5 9 - 22184 + 5174 @@ -22318,22 +22348,22 @@ 18 19 - 472 + 470 92 93 - 472 + 470 - 299 - 300 - 472 + 309 + 310 + 470 - 380 - 381 - 472 + 376 + 377 + 470 @@ -22349,22 +22379,22 @@ 19 20 - 472 + 470 124 125 - 472 + 470 - 410 - 411 - 472 + 425 + 426 + 470 - 520 - 521 - 472 + 513 + 514 + 470 @@ -22380,7 +22410,7 @@ 1 2 - 506465 + 508520 @@ -22396,7 +22426,7 @@ 1 2 - 506465 + 508520 @@ -22406,15 +22436,15 @@ is_proxy_class_for - 65137 + 65387 id - 65137 + 65387 templ_param_id - 65137 + 65387 @@ -22428,7 +22458,7 @@ 1 2 - 65137 + 65387 @@ -22444,7 +22474,7 @@ 1 2 - 65137 + 65387 @@ -22454,19 +22484,19 @@ type_mentions - 4011226 + 4011508 id - 4011226 + 4011508 type_id - 197321 + 197335 location - 3977856 + 3978135 kind @@ -22484,7 +22514,7 @@ 1 2 - 4011226 + 4011508 @@ -22500,7 +22530,7 @@ 1 2 - 4011226 + 4011508 @@ -22516,7 +22546,7 @@ 1 2 - 4011226 + 4011508 @@ -22532,17 +22562,17 @@ 1 2 - 97169 + 97176 2 3 - 21637 + 21638 3 4 - 8193 + 8194 4 @@ -22552,22 +22582,22 @@ 5 7 - 14318 + 14319 7 12 - 15790 + 15791 12 27 - 15114 + 15115 27 8555 - 14358 + 14359 @@ -22583,17 +22613,17 @@ 1 2 - 97169 + 97176 2 3 - 21637 + 21638 3 4 - 8193 + 8194 4 @@ -22603,22 +22633,22 @@ 5 7 - 14318 + 14319 7 12 - 15790 + 15791 12 27 - 15114 + 15115 27 8555 - 14358 + 14359 @@ -22634,7 +22664,7 @@ 1 2 - 197321 + 197335 @@ -22650,12 +22680,12 @@ 1 2 - 3944485 + 3944762 2 3 - 33370 + 33373 @@ -22671,12 +22701,12 @@ 1 2 - 3944485 + 3944762 2 3 - 33370 + 33373 @@ -22692,7 +22722,7 @@ 1 2 - 3977856 + 3978135 @@ -22750,26 +22780,26 @@ is_function_template - 1418387 + 1413601 id - 1418387 + 1413601 function_instantiation - 895034 + 906422 to - 895034 + 906422 from - 144729 + 146002 @@ -22783,7 +22813,7 @@ 1 2 - 895034 + 906422 @@ -22799,27 +22829,27 @@ 1 2 - 100124 + 101152 2 3 - 14448 + 14480 3 6 - 11964 + 12014 6 21 - 11964 + 12049 22 - 864 - 6227 + 869 + 6306 @@ -22829,19 +22859,19 @@ function_template_argument - 2313992 + 2339815 function_id - 1303055 + 1318394 index - 559 + 563 arg_type - 302683 + 305041 @@ -22855,22 +22885,22 @@ 1 2 - 668792 + 679667 2 3 - 388709 + 388084 3 4 - 175375 + 179966 4 15 - 70178 + 70676 @@ -22886,22 +22916,22 @@ 1 2 - 683870 + 694852 2 3 - 393991 + 393404 3 4 - 146583 + 150970 4 9 - 78609 + 79167 @@ -22917,57 +22947,57 @@ 1 2 - 209 + 211 7 8 - 34 + 35 35 36 - 34 + 35 108 109 - 34 + 35 164 165 - 34 + 35 294 295 - 34 + 35 849 850 - 34 + 35 - 3198 - 3199 - 34 + 3293 + 3294 + 35 - 8582 - 8583 - 34 + 8487 + 8488 + 35 - 17395 - 17396 - 34 + 17489 + 17490 + 35 - 34286 - 34287 - 34 + 34459 + 34460 + 35 @@ -22983,57 +23013,57 @@ 1 2 - 209 + 211 3 4 - 34 + 35 11 12 - 34 + 35 22 23 - 34 + 35 30 31 - 34 + 35 61 62 - 34 + 35 134 135 - 34 + 35 - 452 - 453 - 34 + 453 + 454 + 35 - 1127 - 1128 - 34 + 1126 + 1127 + 35 2404 2405 - 34 + 35 - 5836 - 5837 - 34 + 5842 + 5843 + 35 @@ -23049,32 +23079,32 @@ 1 2 - 185521 + 186978 2 3 - 44534 + 44850 3 5 - 23334 + 23218 5 16 - 23369 + 23535 16 - 113 - 25118 + 107 + 23006 - 126 + 108 955 - 804 + 3452 @@ -23090,17 +23120,17 @@ 1 2 - 272771 + 274918 2 4 - 25818 + 26001 4 17 - 4093 + 4122 @@ -23110,19 +23140,19 @@ function_template_argument_value - 358342 + 362998 function_id - 179083 + 181340 index - 559 + 563 arg_value - 355719 + 360356 @@ -23136,12 +23166,12 @@ 1 2 - 169778 + 171969 2 8 - 9305 + 9371 @@ -23157,17 +23187,17 @@ 1 2 - 149417 + 151428 2 3 - 20535 + 20681 3 97 - 9130 + 9230 @@ -23183,52 +23213,52 @@ 1 2 - 209 + 211 2 3 - 69 + 70 11 12 - 34 + 35 26 27 - 34 + 35 94 95 - 34 + 35 314 315 - 34 + 35 709 710 - 34 + 35 - 964 - 965 - 34 + 992 + 993 + 35 1187 1188 - 34 + 35 2148 2149 - 34 + 35 @@ -23244,52 +23274,52 @@ 1 2 - 209 + 211 2 3 - 69 + 70 60 61 - 34 + 35 80 81 - 34 + 35 141 142 - 34 + 35 533 534 - 34 + 35 - 1550 - 1551 - 34 + 1610 + 1611 + 35 1821 1822 - 34 + 35 2202 2203 - 34 + 35 3771 3772 - 34 + 35 @@ -23305,12 +23335,12 @@ 1 2 - 353095 + 357714 2 3 - 2623 + 2642 @@ -23326,7 +23356,7 @@ 1 2 - 355719 + 360356 @@ -23336,26 +23366,26 @@ is_variable_template - 42225 + 42132 id - 42225 + 42132 variable_instantiation - 48633 + 49154 to - 48633 + 49154 from - 24894 + 25049 @@ -23369,7 +23399,7 @@ 1 2 - 48633 + 49154 @@ -23385,22 +23415,22 @@ 1 2 - 14390 + 14358 2 3 - 7667 + 7650 3 8 - 1785 + 1991 8 14 - 1050 + 1048 @@ -23410,19 +23440,19 @@ variable_template_argument - 328248 + 327628 variable_id - 26469 + 26411 index - 1785 + 1781 arg_type - 217116 + 216742 @@ -23436,22 +23466,22 @@ 1 2 - 16176 + 16140 2 3 - 5672 + 5659 3 4 - 3886 + 3877 4 17 - 735 + 733 @@ -23467,52 +23497,52 @@ 1 2 - 5987 + 5974 2 3 - 5251 + 5240 3 4 - 1995 + 1991 4 5 - 1155 + 1152 5 6 - 2415 + 2410 6 8 - 2310 + 2305 8 11 - 2205 + 2200 11 18 - 2415 + 2410 18 67 - 1995 + 1991 80 - 515 - 735 + 516 + 733 @@ -23528,42 +23558,42 @@ 1 2 - 105 + 104 2 3 - 630 + 628 3 4 - 420 + 419 5 6 - 210 + 209 27 28 - 105 + 104 42 43 - 105 + 104 79 80 - 105 + 104 248 249 - 105 + 104 @@ -23579,52 +23609,52 @@ 1 2 - 105 + 104 12 13 - 630 + 628 13 14 - 105 + 104 14 15 - 315 + 314 24 25 - 105 + 104 32 33 - 105 + 104 128 129 - 105 + 104 - 436 - 437 - 105 + 437 + 438 + 104 636 637 - 105 + 104 890 891 - 105 + 104 @@ -23640,17 +23670,17 @@ 1 2 - 181088 + 180793 2 3 - 20902 + 20856 3 37 - 15125 + 15092 @@ -23666,17 +23696,17 @@ 1 2 - 199890 + 199553 2 5 - 16806 + 16769 5 6 - 420 + 419 @@ -23686,19 +23716,19 @@ variable_template_argument_value - 15650 + 15616 variable_id - 2836 + 2829 index - 420 + 419 arg_value - 12079 + 12052 @@ -23712,12 +23742,12 @@ 1 2 - 2625 + 2620 2 3 - 210 + 209 @@ -23733,42 +23763,42 @@ 2 3 - 420 + 419 3 4 - 105 + 104 4 5 - 1365 + 1362 5 6 - 210 + 209 6 7 - 210 + 209 8 9 - 210 + 209 12 17 - 210 + 209 20 21 - 105 + 104 @@ -23784,22 +23814,22 @@ 2 3 - 105 + 104 6 7 - 105 + 104 8 9 - 105 + 104 13 14 - 105 + 104 @@ -23815,22 +23845,22 @@ 12 13 - 105 + 104 30 31 - 105 + 104 33 34 - 105 + 104 40 41 - 105 + 104 @@ -23846,12 +23876,12 @@ 1 2 - 8508 + 8489 2 3 - 3571 + 3563 @@ -23867,7 +23897,7 @@ 1 2 - 12079 + 12052 @@ -23877,15 +23907,15 @@ routinetypes - 543059 + 546982 id - 543059 + 546982 return_type - 283826 + 285945 @@ -23899,7 +23929,7 @@ 1 2 - 543059 + 546982 @@ -23915,17 +23945,17 @@ 1 2 - 247373 + 249233 2 3 - 21165 + 21315 3 3594 - 15288 + 15396 @@ -23935,19 +23965,19 @@ routinetypeargs - 996883 + 993519 routine - 430472 + 429019 index - 8024 + 7997 type_id - 230340 + 229563 @@ -23961,27 +23991,27 @@ 1 2 - 156235 + 155707 2 3 - 135938 + 135479 3 4 - 64193 + 63976 4 5 - 46256 + 46100 5 18 - 27848 + 27754 @@ -23997,27 +24027,27 @@ 1 2 - 186443 + 185814 2 3 - 135466 + 135009 3 4 - 59473 + 59272 4 5 - 33984 + 33869 5 11 - 15104 + 15053 @@ -24033,67 +24063,67 @@ 2 3 - 944 + 940 4 5 - 472 + 470 6 7 - 472 + 470 8 9 - 944 + 940 9 10 - 472 + 470 10 11 - 1416 + 1411 13 14 - 472 + 470 28 29 - 472 + 470 59 60 - 472 + 470 157 158 - 472 + 470 293 294 - 472 + 470 581 582 - 472 + 470 912 913 - 472 + 470 @@ -24109,57 +24139,57 @@ 1 2 - 944 + 940 3 4 - 944 + 940 4 5 - 1416 + 1411 5 6 - 944 + 940 6 7 - 944 + 940 10 11 - 472 + 470 14 15 - 472 + 470 47 48 - 472 + 470 90 91 - 472 + 470 176 177 - 472 + 470 349 350 - 472 + 470 @@ -24175,27 +24205,27 @@ 1 2 - 149154 + 148651 2 3 - 31152 + 31047 3 5 - 16992 + 16934 5 12 - 18408 + 18346 12 113 - 14632 + 14582 @@ -24211,22 +24241,22 @@ 1 2 - 175587 + 174994 2 3 - 31152 + 31047 3 6 - 18880 + 18816 6 14 - 4720 + 4704 @@ -24236,19 +24266,19 @@ ptrtomembers - 38232 + 38103 id - 38232 + 38103 type_id - 38232 + 38103 class_id - 15576 + 15523 @@ -24262,7 +24292,7 @@ 1 2 - 38232 + 38103 @@ -24278,7 +24308,7 @@ 1 2 - 38232 + 38103 @@ -24294,7 +24324,7 @@ 1 2 - 38232 + 38103 @@ -24310,7 +24340,7 @@ 1 2 - 38232 + 38103 @@ -24326,17 +24356,17 @@ 1 2 - 13688 + 13642 8 9 - 1416 + 1411 28 29 - 472 + 470 @@ -24352,17 +24382,17 @@ 1 2 - 13688 + 13642 8 9 - 1416 + 1411 28 29 - 472 + 470 @@ -24372,15 +24402,15 @@ specifiers - 25016 + 24932 id - 25016 + 24932 str - 25016 + 24932 @@ -24394,7 +24424,7 @@ 1 2 - 25016 + 24932 @@ -24410,7 +24440,7 @@ 1 2 - 25016 + 24932 @@ -24420,15 +24450,15 @@ typespecifiers - 1326345 + 1317166 type_id - 1307937 + 1298819 spec_id - 3776 + 3763 @@ -24442,12 +24472,12 @@ 1 2 - 1289529 + 1280473 2 3 - 18408 + 18346 @@ -24463,42 +24493,42 @@ 8 9 - 472 + 470 36 37 - 472 + 470 51 52 - 472 + 470 86 87 - 472 + 470 105 106 - 472 + 470 219 220 - 472 + 470 - 221 - 222 - 472 + 226 + 227 + 470 - 2084 - 2085 - 472 + 2069 + 2070 + 470 @@ -24508,15 +24538,15 @@ funspecifiers - 12993924 + 13049498 func_id - 3955310 + 3975160 spec_id - 699 + 704 @@ -24530,27 +24560,27 @@ 1 2 - 312758 + 314977 2 3 - 540295 + 544551 3 4 - 1132682 + 1145438 4 5 - 1734095 + 1732127 5 8 - 235478 + 238064 @@ -24566,97 +24596,97 @@ 13 14 - 69 + 70 98 99 - 34 + 35 200 201 - 34 + 35 296 297 - 34 + 35 304 305 - 34 + 35 572 573 - 34 + 35 716 717 - 34 + 35 1599 1600 - 34 + 35 1646 1647 - 34 + 35 3782 3783 - 34 + 35 - 3872 - 3873 - 34 + 3902 + 3903 + 35 5095 5096 - 34 + 35 6814 6815 - 34 + 35 - 9270 - 9271 - 34 + 9303 + 9304 + 35 - 12058 - 12059 - 34 + 12218 + 12219 + 35 - 53280 - 53281 - 34 + 52896 + 52897 + 35 - 80172 - 80173 - 34 + 79931 + 79932 + 35 - 91598 - 91599 - 34 + 91328 + 91329 + 35 - 100025 - 100026 - 34 + 99658 + 99659 + 35 @@ -24666,15 +24696,15 @@ varspecifiers - 2352966 + 2347848 var_id - 1257904 + 1255071 spec_id - 3776 + 3763 @@ -24688,22 +24718,22 @@ 1 2 - 738222 + 735731 2 3 - 202491 + 203219 3 4 - 59001 + 58802 4 5 - 258189 + 257317 @@ -24719,42 +24749,42 @@ 112 113 - 472 + 470 315 316 - 472 + 470 - 411 - 412 - 472 + 414 + 415 + 470 560 561 - 472 + 470 692 693 - 472 + 470 700 701 - 472 + 470 732 733 - 472 + 470 - 1463 - 1464 - 472 + 1466 + 1467 + 470 @@ -24764,27 +24794,27 @@ attributes - 696623 + 696970 id - 696623 + 696970 kind - 315 + 314 name - 1575 + 1676 name_space - 210 + 209 location - 484652 + 484420 @@ -24798,7 +24828,7 @@ 1 2 - 696623 + 696970 @@ -24814,7 +24844,7 @@ 1 2 - 696623 + 696970 @@ -24830,7 +24860,7 @@ 1 2 - 696623 + 696970 @@ -24846,7 +24876,7 @@ 1 2 - 696623 + 696970 @@ -24862,17 +24892,17 @@ 4 5 - 105 + 104 2168 2169 - 105 + 104 - 4460 - 4461 - 105 + 4478 + 4479 + 104 @@ -24888,248 +24918,258 @@ 1 2 - 105 - - - 5 - 6 - 105 - - - 11 - 12 - 105 - - - - - - - kind - name_space - - - 12 - - - 1 - 2 - 210 - - - 2 - 3 - 105 - - - - - - - kind - location - - - 12 - - - 2 - 3 - 105 - - - 2055 - 2056 - 105 - - - 2557 - 2558 - 105 - - - - - - - name - id - - - 12 - - - 1 - 2 - 210 - - - 2 - 3 - 105 - - - 4 - 5 - 210 - - - 5 - 6 - 105 - - - 9 - 10 - 105 - - - 14 - 15 - 105 - - - 16 - 17 - 105 - - - 24 - 25 - 105 - - - 86 - 87 - 105 - - - 115 - 116 - 105 - - - 659 - 660 - 105 - - - 1760 - 1761 - 105 - - - 3932 - 3933 - 105 - - - - - - - name - kind - - - 12 - - - 1 - 2 - 1365 - - - 2 - 3 - 210 - - - - - - - name - name_space - - - 12 - - - 1 - 2 - 1575 - - - - - - - name - location - - - 12 - - - 1 - 2 - 315 - - - 2 - 3 - 210 - - - 4 - 5 - 105 + 104 6 7 - 105 + 104 + + + 11 + 12 + 104 + + + + + + + kind + name_space + + + 12 + + + 1 + 2 + 209 + + + 2 + 3 + 104 + + + + + + + kind + location + + + 12 + + + 2 + 3 + 104 + + + 2055 + 2056 + 104 + + + 2565 + 2566 + 104 + + + + + + + name + id + + + 12 + + + 1 + 2 + 209 + + + 2 + 3 + 104 + + + 4 + 5 + 209 + + + 5 + 6 + 104 9 10 - 105 + 104 14 15 - 105 + 104 + + + 16 + 17 + 104 18 19 - 105 + 104 + + + 24 + 25 + 104 + + + 86 + 87 + 104 + + + 115 + 116 + 104 + + + 659 + 660 + 104 + + + 1760 + 1761 + 104 + + + 3932 + 3933 + 104 + + + + + + + name + kind + + + 12 + + + 1 + 2 + 1467 + + + 2 + 3 + 209 + + + + + + + name + name_space + + + 12 + + + 1 + 2 + 1676 + + + + + + + name + location + + + 12 + + + 1 + 2 + 314 + + + 2 + 3 + 209 + + + 4 + 5 + 104 + + + 6 + 7 + 104 + + + 8 + 9 + 104 + + + 9 + 10 + 104 + + + 14 + 15 + 104 + + + 18 + 19 + 104 59 60 - 105 + 104 72 73 - 105 + 104 331 332 - 105 + 104 1756 1757 - 105 + 104 2379 2380 - 105 + 104 @@ -25143,14 +25183,14 @@ 12 - 5 - 6 - 105 + 23 + 24 + 104 6627 6628 - 105 + 104 @@ -25166,12 +25206,12 @@ 1 2 - 105 + 104 3 4 - 105 + 104 @@ -25185,14 +25225,14 @@ 12 - 1 - 2 - 105 + 2 + 3 + 104 14 15 - 105 + 104 @@ -25206,14 +25246,14 @@ 12 - 1 - 2 - 105 + 9 + 10 + 104 4613 4614 - 105 + 104 @@ -25229,17 +25269,17 @@ 1 2 - 443372 + 443126 2 9 - 36868 + 36787 9 201 - 4411 + 4506 @@ -25255,7 +25295,7 @@ 1 2 - 484652 + 484420 @@ -25271,12 +25311,12 @@ 1 2 - 480346 + 480123 2 3 - 4306 + 4297 @@ -25292,7 +25332,7 @@ 1 2 - 484652 + 484420 @@ -25302,27 +25342,27 @@ attribute_args - 351174 + 352341 id - 351174 + 352341 kind - 1416 + 1411 attribute - 269045 + 270489 index - 1416 + 1411 location - 328046 + 329291 @@ -25336,7 +25376,7 @@ 1 2 - 351174 + 352341 @@ -25352,7 +25392,7 @@ 1 2 - 351174 + 352341 @@ -25368,7 +25408,7 @@ 1 2 - 351174 + 352341 @@ -25384,7 +25424,7 @@ 1 2 - 351174 + 352341 @@ -25400,17 +25440,17 @@ 1 2 - 472 + 470 - 55 - 56 - 472 + 54 + 55 + 470 - 688 - 689 - 472 + 694 + 695 + 470 @@ -25426,17 +25466,17 @@ 1 2 - 472 + 470 - 55 - 56 - 472 + 54 + 55 + 470 - 536 - 537 - 472 + 542 + 543 + 470 @@ -25452,12 +25492,12 @@ 1 2 - 944 + 940 3 4 - 472 + 470 @@ -25473,17 +25513,17 @@ 1 2 - 472 + 470 - 55 - 56 - 472 + 54 + 55 + 470 - 666 - 667 - 472 + 672 + 673 + 470 @@ -25499,17 +25539,17 @@ 1 2 - 202963 + 204631 2 3 - 50032 + 49864 3 4 - 16048 + 15994 @@ -25525,12 +25565,12 @@ 1 2 - 258661 + 260140 2 3 - 10384 + 10349 @@ -25546,17 +25586,17 @@ 1 2 - 202963 + 204631 2 3 - 50032 + 49864 3 4 - 16048 + 15994 @@ -25572,17 +25612,17 @@ 1 2 - 202963 + 204631 2 3 - 50032 + 49864 3 4 - 16048 + 15994 @@ -25598,17 +25638,17 @@ 34 35 - 472 + 470 140 141 - 472 + 470 - 570 - 571 - 472 + 575 + 576 + 470 @@ -25624,12 +25664,12 @@ 1 2 - 944 + 940 3 4 - 472 + 470 @@ -25645,17 +25685,17 @@ 34 35 - 472 + 470 140 141 - 472 + 470 - 570 - 571 - 472 + 575 + 576 + 470 @@ -25671,17 +25711,17 @@ 34 35 - 472 + 470 140 141 - 472 + 470 - 521 - 522 - 472 + 526 + 527 + 470 @@ -25697,12 +25737,12 @@ 1 2 - 313886 + 315179 2 16 - 14160 + 14112 @@ -25718,12 +25758,12 @@ 1 2 - 315302 + 316590 2 3 - 12744 + 12701 @@ -25739,12 +25779,12 @@ 1 2 - 313886 + 315179 2 16 - 14160 + 14112 @@ -25760,7 +25800,7 @@ 1 2 - 328046 + 329291 @@ -25770,15 +25810,15 @@ attribute_arg_value - 350702 + 351871 arg - 350702 + 351871 value - 32568 + 34810 @@ -25792,7 +25832,7 @@ 1 2 - 350702 + 351871 @@ -25808,22 +25848,22 @@ 1 2 - 14632 + 16934 2 3 - 12272 + 12230 3 14 - 2832 + 2822 15 247 - 2832 + 2822 @@ -25833,15 +25873,15 @@ attribute_arg_type - 1535 + 470 arg - 1535 + 470 type_id - 1354 + 470 @@ -25855,7 +25895,7 @@ 1 2 - 1535 + 470 @@ -25871,12 +25911,7 @@ 1 2 - 1264 - - - 3 - 4 - 90 + 470 @@ -25939,15 +25974,15 @@ typeattributes - 60817 + 62570 type_id - 60397 + 62150 spec_id - 60817 + 62570 @@ -25961,12 +25996,12 @@ 1 2 - 59977 + 61731 2 3 - 420 + 419 @@ -25982,7 +26017,7 @@ 1 2 - 60817 + 62570 @@ -25992,15 +26027,15 @@ funcattributes - 637684 + 635532 func_id - 448880 + 447366 spec_id - 637684 + 635532 @@ -26014,22 +26049,22 @@ 1 2 - 342678 + 341522 2 3 - 65137 + 64917 3 6 - 40120 + 39985 6 7 - 944 + 940 @@ -26045,7 +26080,7 @@ 1 2 - 637684 + 635532 @@ -26113,15 +26148,15 @@ stmtattributes - 1008 + 1006 stmt_id - 1008 + 1006 spec_id - 1008 + 1006 @@ -26135,7 +26170,7 @@ 1 2 - 1008 + 1006 @@ -26151,7 +26186,7 @@ 1 2 - 1008 + 1006 @@ -26161,15 +26196,15 @@ unspecifiedtype - 10417715 + 10352924 type_id - 10417715 + 10352924 unspecified_type_id - 6996120 + 6956047 @@ -26183,7 +26218,7 @@ 1 2 - 10417715 + 10352924 @@ -26199,17 +26234,17 @@ 1 2 - 4696963 + 4675939 2 3 - 2054184 + 2037843 3 147 - 244972 + 242264 @@ -26219,19 +26254,19 @@ member - 5120282 + 5134480 parent - 692861 + 689567 index - 8746 + 8808 child - 5057871 + 5070710 @@ -26245,42 +26280,42 @@ 1 3 - 18716 + 18884 3 4 - 396265 + 390691 4 5 - 38727 + 39072 5 7 - 52616 + 53059 7 10 - 52476 + 52848 10 16 - 57164 + 57569 16 30 - 52581 + 52954 30 251 - 24313 + 24486 @@ -26296,42 +26331,42 @@ 1 3 - 18716 + 18884 3 4 - 396230 + 390656 4 5 - 38692 + 39107 5 7 - 52791 + 53165 7 10 - 52791 + 53165 10 16 - 56919 + 57323 16 29 - 52371 + 52742 29 253 - 24348 + 24521 @@ -26347,62 +26382,62 @@ 1 2 - 1399 + 1409 2 3 - 804 + 810 3 4 - 944 + 951 5 22 - 769 + 669 22 - 43 - 664 + 42 + 669 - 43 - 61 - 699 + 42 + 56 + 669 - 62 - 113 - 664 + 56 + 100 + 669 - 114 - 185 - 664 + 104 + 164 + 669 - 186 - 331 - 664 + 181 + 299 + 669 - 367 - 1282 - 664 + 300 + 727 + 669 - 1418 - 5994 - 664 + 845 + 4002 + 669 - 7270 - 19474 - 139 + 4606 + 19241 + 281 @@ -26418,62 +26453,62 @@ 1 2 - 804 + 810 2 3 - 874 + 880 3 4 - 1154 + 1162 4 - 16 - 734 + 15 + 669 16 - 33 - 664 + 35 + 739 - 34 - 58 - 664 + 36 + 55 + 669 - 58 + 57 93 - 699 + 739 97 135 - 664 + 669 140 - 253 - 664 + 256 + 669 - 253 - 601 - 664 + 268 + 612 + 669 - 611 - 2463 - 664 + 619 + 2611 + 669 - 2610 - 19486 - 489 + 2770 + 19253 + 458 @@ -26489,7 +26524,7 @@ 1 2 - 5057871 + 5070710 @@ -26505,12 +26540,12 @@ 1 2 - 4996578 + 5008419 2 - 5 - 61292 + 8 + 62290 @@ -26520,15 +26555,15 @@ enclosingfunction - 121976 + 121743 child - 121976 + 121743 parent - 69638 + 69504 @@ -26542,7 +26577,7 @@ 1 2 - 121976 + 121743 @@ -26558,22 +26593,22 @@ 1 2 - 36765 + 36695 2 3 - 21633 + 21591 3 4 - 6117 + 6106 4 45 - 5121 + 5111 @@ -26583,27 +26618,27 @@ derivations - 397280 + 402388 derivation - 397280 + 402388 sub - 376919 + 381883 index - 209 + 211 super - 228236 + 206461 location - 37887 + 38156 @@ -26617,7 +26652,7 @@ 1 2 - 397280 + 402388 @@ -26633,7 +26668,7 @@ 1 2 - 397280 + 402388 @@ -26649,7 +26684,7 @@ 1 2 - 397280 + 402388 @@ -26665,7 +26700,7 @@ 1 2 - 397280 + 402388 @@ -26681,12 +26716,12 @@ 1 2 - 361876 + 366733 2 7 - 15043 + 15149 @@ -26702,12 +26737,12 @@ 1 2 - 361876 + 366733 2 7 - 15043 + 15149 @@ -26723,12 +26758,12 @@ 1 2 - 361876 + 366733 2 7 - 15043 + 15149 @@ -26744,12 +26779,12 @@ 1 2 - 361876 + 366733 2 7 - 15043 + 15149 @@ -26765,22 +26800,22 @@ 25 26 - 104 + 105 77 78 - 34 + 35 430 431 - 34 + 35 - 10774 - 10775 - 34 + 10839 + 10840 + 35 @@ -26796,22 +26831,22 @@ 25 26 - 104 + 105 77 78 - 34 + 35 430 431 - 34 + 35 - 10774 - 10775 - 34 + 10839 + 10840 + 35 @@ -26827,27 +26862,27 @@ 23 24 - 34 + 35 25 26 - 69 + 70 35 36 - 34 + 35 261 262 - 34 + 35 - 6169 - 6170 - 34 + 5505 + 5506 + 35 @@ -26863,22 +26898,22 @@ 1 2 - 104 + 105 9 10 - 34 + 35 66 67 - 34 + 35 1005 1006 - 34 + 35 @@ -26894,12 +26929,12 @@ 1 2 - 220960 + 199133 2 - 1076 - 7276 + 1225 + 7328 @@ -26915,12 +26950,12 @@ 1 2 - 220960 + 199133 2 - 1076 - 7276 + 1225 + 7328 @@ -26936,12 +26971,12 @@ 1 2 - 227781 + 206003 2 4 - 454 + 458 @@ -26957,12 +26992,12 @@ 1 2 - 224668 + 202867 2 108 - 3568 + 3593 @@ -26978,27 +27013,27 @@ 1 2 - 28197 + 28326 2 5 - 3043 + 3135 5 16 - 2973 + 2994 17 133 - 2973 + 2994 - 154 - 656 - 699 + 142 + 474 + 704 @@ -27014,27 +27049,27 @@ 1 2 - 28197 + 28326 2 5 - 3043 + 3135 5 16 - 2973 + 2994 17 133 - 2973 + 2994 - 154 - 656 - 699 + 142 + 474 + 704 @@ -27050,7 +27085,7 @@ 1 2 - 37887 + 38156 @@ -27066,22 +27101,22 @@ 1 2 - 30611 + 30757 2 5 - 3218 + 3417 5 55 - 2868 + 2889 60 - 656 - 1189 + 420 + 1092 @@ -27091,15 +27126,15 @@ derspecifiers - 399169 + 404291 der_id - 396895 + 402001 spec_id - 139 + 140 @@ -27113,12 +27148,12 @@ 1 2 - 394621 + 399710 2 3 - 2273 + 2290 @@ -27134,22 +27169,22 @@ 65 66 - 34 + 35 93 94 - 34 + 35 1132 1133 - 34 + 35 - 10120 - 10121 - 34 + 10185 + 10186 + 35 @@ -27159,15 +27194,15 @@ direct_base_offsets - 368208 + 373110 der_id - 368208 + 373110 offset - 349 + 352 @@ -27181,7 +27216,7 @@ 1 2 - 368208 + 373110 @@ -27197,32 +27232,32 @@ 1 2 - 34 + 35 2 3 - 104 + 105 3 4 - 69 + 70 4 5 - 69 + 70 85 86 - 34 + 35 - 10419 - 10420 - 34 + 10484 + 10485 + 35 @@ -27232,15 +27267,15 @@ virtual_base_offsets - 6674 + 6661 sub - 3684 + 3677 super - 509 + 508 offset @@ -27258,17 +27293,17 @@ 1 2 - 2896 + 2891 2 4 - 324 + 323 4 7 - 266 + 265 7 @@ -27289,7 +27324,7 @@ 1 2 - 3105 + 3099 2 @@ -27299,7 +27334,7 @@ 4 8 - 266 + 265 @@ -27315,7 +27350,7 @@ 1 2 - 81 + 80 2 @@ -27381,7 +27416,7 @@ 2 3 - 81 + 80 4 @@ -27483,7 +27518,7 @@ 1 2 - 81 + 80 2 @@ -27523,23 +27558,23 @@ frienddecls - 710038 + 715075 id - 710038 + 715075 type_id - 42085 + 42384 decl_id - 69688 + 70182 location - 6297 + 6341 @@ -27553,7 +27588,7 @@ 1 2 - 710038 + 715075 @@ -27569,7 +27604,7 @@ 1 2 - 710038 + 715075 @@ -27585,7 +27620,7 @@ 1 2 - 710038 + 715075 @@ -27601,47 +27636,47 @@ 1 2 - 6157 + 6200 2 3 - 13119 + 13212 3 6 - 2938 + 2959 6 10 - 3183 + 3206 10 17 - 3253 + 3276 17 24 - 3323 + 3347 25 36 - 3288 + 3311 37 55 - 3218 + 3241 55 103 - 3603 + 3628 @@ -27657,47 +27692,47 @@ 1 2 - 6157 + 6200 2 3 - 13119 + 13212 3 6 - 2938 + 2959 6 10 - 3183 + 3206 10 17 - 3253 + 3276 17 24 - 3323 + 3347 25 36 - 3288 + 3311 37 55 - 3218 + 3241 55 103 - 3603 + 3628 @@ -27713,12 +27748,12 @@ 1 2 - 40651 + 40939 2 13 - 1434 + 1444 @@ -27734,37 +27769,37 @@ 1 2 - 40196 + 40481 2 3 - 5842 + 5883 3 8 - 5982 + 6024 8 15 - 5387 + 5425 15 32 - 5247 + 5284 32 71 - 5247 + 5284 72 160 - 1784 + 1796 @@ -27780,37 +27815,37 @@ 1 2 - 40196 + 40481 2 3 - 5842 + 5883 3 8 - 5982 + 6024 8 15 - 5387 + 5425 15 32 - 5247 + 5284 32 71 - 5247 + 5284 72 160 - 1784 + 1796 @@ -27826,12 +27861,12 @@ 1 2 - 69023 + 69513 2 5 - 664 + 669 @@ -27847,12 +27882,12 @@ 1 2 - 5912 + 5954 2 20106 - 384 + 387 @@ -27868,12 +27903,12 @@ 1 2 - 6157 + 6200 2 1105 - 139 + 140 @@ -27889,12 +27924,12 @@ 1 2 - 5947 + 5989 2 1837 - 349 + 352 @@ -27904,19 +27939,19 @@ comments - 9024167 + 9004230 id - 9024167 + 9004230 contents - 3546138 + 3538304 location - 9024167 + 9004230 @@ -27930,7 +27965,7 @@ 1 2 - 9024167 + 9004230 @@ -27946,7 +27981,7 @@ 1 2 - 9024167 + 9004230 @@ -27962,17 +27997,17 @@ 1 2 - 3255074 + 3247882 2 10 - 268901 + 268307 10 32841 - 22163 + 22114 @@ -27988,17 +28023,17 @@ 1 2 - 3255074 + 3247882 2 10 - 268901 + 268307 10 32841 - 22163 + 22114 @@ -28014,7 +28049,7 @@ 1 2 - 9024167 + 9004230 @@ -28030,7 +28065,7 @@ 1 2 - 9024167 + 9004230 @@ -28040,15 +28075,15 @@ commentbinding - 3153021 + 3145674 id - 2495512 + 2490384 element - 3075612 + 3068526 @@ -28062,12 +28097,12 @@ 1 2 - 2412911 + 2408061 2 97 - 82601 + 82322 @@ -28083,12 +28118,12 @@ 1 2 - 2998202 + 2991378 2 3 - 77409 + 77148 @@ -28098,15 +28133,15 @@ exprconv - 7003263 + 7003750 converted - 7003263 + 7003750 conversion - 7003263 + 7003750 @@ -28120,7 +28155,7 @@ 1 2 - 7003263 + 7003750 @@ -28136,7 +28171,7 @@ 1 2 - 7003263 + 7003750 @@ -28146,30 +28181,30 @@ compgenerated - 8432513 + 8494343 id - 8432513 + 8494343 synthetic_destructor_call - 132767 + 133110 element - 103217 + 103484 i - 305 + 306 destructor_call - 117462 + 117766 @@ -28183,17 +28218,17 @@ 1 2 - 85325 + 85546 2 3 - 11801 + 11832 3 18 - 6089 + 6105 @@ -28209,17 +28244,17 @@ 1 2 - 85325 + 85546 2 3 - 11801 + 11832 3 18 - 6089 + 6105 @@ -28235,67 +28270,67 @@ 1 2 - 17 + 18 2 3 - 53 + 54 3 4 - 17 + 18 4 5 - 53 + 54 6 7 - 17 + 18 11 12 - 17 + 18 20 21 - 17 + 18 34 35 - 17 + 18 65 66 - 17 + 18 152 153 - 17 + 18 339 340 - 17 + 18 996 997 - 17 + 18 5746 5747 - 17 + 18 @@ -28311,67 +28346,67 @@ 1 2 - 17 + 18 2 3 - 53 + 54 3 4 - 17 + 18 4 5 - 53 + 54 6 7 - 17 + 18 11 12 - 17 + 18 20 21 - 17 + 18 34 35 - 17 + 18 65 66 - 17 + 18 151 152 - 17 + 18 338 339 - 17 + 18 995 996 - 17 + 18 4897 4898 - 17 + 18 @@ -28387,12 +28422,12 @@ 1 2 - 115450 + 115749 2 26 - 2011 + 2017 @@ -28408,7 +28443,7 @@ 1 2 - 117462 + 117766 @@ -28418,15 +28453,15 @@ namespaces - 12744 + 12701 id - 12744 + 12701 name - 10384 + 10349 @@ -28440,7 +28475,7 @@ 1 2 - 12744 + 12701 @@ -28456,17 +28491,17 @@ 1 2 - 8968 + 8937 2 3 - 472 + 470 3 4 - 944 + 940 @@ -28476,26 +28511,26 @@ namespace_inline - 1416 + 1411 id - 1416 + 1411 namespacembrs - 2473800 + 2463100 parentid - 10856 + 10819 memberid - 2473800 + 2463100 @@ -28509,57 +28544,57 @@ 1 2 - 1888 + 1881 2 3 - 944 + 940 3 4 - 472 + 470 4 5 - 944 + 940 5 7 - 944 + 940 7 8 - 944 + 940 8 12 - 944 + 940 17 30 - 944 + 940 43 47 - 944 + 940 52 143 - 944 + 940 - 247 - 4603 - 944 + 253 + 4592 + 940 @@ -28575,7 +28610,7 @@ 1 2 - 2473800 + 2463100 @@ -28585,19 +28620,19 @@ exprparents - 14151887 + 14152882 expr_id - 14151887 + 14152882 child_index - 14601 + 14602 parent_id - 9417337 + 9417999 @@ -28611,7 +28646,7 @@ 1 2 - 14151887 + 14152882 @@ -28627,7 +28662,7 @@ 1 2 - 14151887 + 14152882 @@ -28663,7 +28698,7 @@ 5 8 - 1209 + 1210 8 @@ -28677,7 +28712,7 @@ 56 - 389706 + 354077 369 @@ -28714,7 +28749,7 @@ 5 8 - 1209 + 1210 8 @@ -28728,7 +28763,7 @@ 56 - 389706 + 354077 369 @@ -28745,17 +28780,17 @@ 1 2 - 5388560 + 5388939 2 3 - 3692338 + 3692597 3 712 - 336438 + 336462 @@ -28771,17 +28806,17 @@ 1 2 - 5388560 + 5388939 2 3 - 3692338 + 3692597 3 712 - 336438 + 336462 @@ -28791,22 +28826,22 @@ expr_isload - 4944556 + 4981789 expr_id - 4944556 + 4981789 conversionkinds - 4220603 + 4220621 expr_id - 4220603 + 4220621 kind @@ -28824,7 +28859,7 @@ 1 2 - 4220603 + 4220621 @@ -28848,23 +28883,23 @@ 1 - 13430 - 13431 + 13442 + 13443 1 - 26288 - 26289 + 26289 + 26290 1 - 44458 - 44459 + 44470 + 44471 1 - 4131036 - 4131037 + 4131029 + 4131030 1 @@ -28875,15 +28910,15 @@ iscall - 3095893 + 3078157 caller - 3095893 + 3078157 kind - 53 + 54 @@ -28897,7 +28932,7 @@ 1 2 - 3095893 + 3078157 @@ -28911,19 +28946,19 @@ 12 - 1389 - 1390 - 17 + 1378 + 1379 + 18 2512 2513 - 17 + 18 - 168444 - 168445 - 17 + 167025 + 167026 + 18 @@ -28933,15 +28968,15 @@ numtemplatearguments - 553810 + 543303 expr_id - 553810 + 543303 num - 71 + 72 @@ -28955,7 +28990,7 @@ 1 2 - 553810 + 543303 @@ -28971,22 +29006,22 @@ 26 27 - 17 + 18 28 29 - 17 + 18 220 221 - 17 + 18 - 30556 - 30557 - 17 + 29893 + 29894 + 18 @@ -28996,15 +29031,15 @@ specialnamequalifyingelements - 472 + 470 id - 472 + 470 name - 472 + 470 @@ -29018,7 +29053,7 @@ 1 2 - 472 + 470 @@ -29034,7 +29069,7 @@ 1 2 - 472 + 470 @@ -29044,23 +29079,23 @@ namequalifiers - 1593457 + 1618961 id - 1593457 + 1618961 qualifiableelement - 1593457 + 1618961 qualifyingelement - 74044 + 79675 location - 273366 + 282719 @@ -29074,7 +29109,7 @@ 1 2 - 1593457 + 1618961 @@ -29090,7 +29125,7 @@ 1 2 - 1593457 + 1618961 @@ -29106,7 +29141,7 @@ 1 2 - 1593457 + 1618961 @@ -29122,7 +29157,7 @@ 1 2 - 1593457 + 1618961 @@ -29138,7 +29173,7 @@ 1 2 - 1593457 + 1618961 @@ -29154,7 +29189,7 @@ 1 2 - 1593457 + 1618961 @@ -29170,27 +29205,27 @@ 1 2 - 46848 + 45546 2 3 - 12322 + 17163 3 4 - 5802 + 6195 4 - 11 - 5622 + 8 + 6087 - 11 - 31104 - 3448 + 8 + 31227 + 4682 @@ -29206,27 +29241,27 @@ 1 2 - 46848 + 45546 2 3 - 12322 + 17163 3 4 - 5802 + 6195 4 - 11 - 5622 + 8 + 6087 - 11 - 31104 - 3448 + 8 + 31227 + 4682 @@ -29242,27 +29277,27 @@ 1 2 - 50477 + 49725 2 3 - 10885 + 15992 3 4 - 6089 + 6411 4 - 15 - 5604 + 9 + 6123 - 15 + 9 7095 - 987 + 1422 @@ -29278,32 +29313,32 @@ 1 2 - 85792 + 91742 2 3 - 24160 + 25646 3 4 - 41621 + 42179 4 6 - 12736 + 12895 6 7 - 89547 + 89869 7 2135 - 19508 + 20387 @@ -29319,32 +29354,32 @@ 1 2 - 85792 + 91742 2 3 - 24160 + 25646 3 4 - 41621 + 42179 4 6 - 12736 + 12895 6 7 - 89547 + 89869 7 2135 - 19508 + 20387 @@ -29360,22 +29395,22 @@ 1 2 - 118270 + 125168 2 3 - 50782 + 52354 3 4 - 95942 + 96622 4 152 - 8370 + 8572 @@ -29385,15 +29420,15 @@ varbind - 6005942 + 6006364 expr - 6005942 + 6006364 var - 765575 + 765629 @@ -29407,7 +29442,7 @@ 1 2 - 6005942 + 6006364 @@ -29423,52 +29458,52 @@ 1 2 - 125736 + 125745 2 3 - 137344 + 137353 3 4 - 105884 + 105891 4 5 - 84883 + 84889 5 6 - 61053 + 61057 6 7 - 47927 + 47931 7 9 - 59392 + 59396 9 13 - 59043 + 59047 13 28 - 58653 + 58657 28 5137 - 25655 + 25657 @@ -29478,15 +29513,15 @@ funbind - 3098283 + 3080553 expr - 3094672 + 3076933 fun - 512404 + 514037 @@ -29500,12 +29535,12 @@ 1 2 - 3091061 + 3073313 2 3 - 3610 + 3619 @@ -29521,32 +29556,32 @@ 1 2 - 298514 + 306546 2 3 - 85810 + 78793 3 4 - 36160 + 37226 4 7 - 42968 + 43475 7 - 35 - 38603 + 38 + 38703 - 35 + 38 4943 - 10346 + 9293 @@ -29556,19 +29591,19 @@ expr_allocator - 54190 + 46541 expr - 54190 + 46541 func - 104 + 105 form - 34 + 35 @@ -29582,7 +29617,7 @@ 1 2 - 54190 + 46541 @@ -29598,7 +29633,7 @@ 1 2 - 54190 + 46541 @@ -29614,17 +29649,17 @@ 1 2 - 34 + 35 585 586 - 34 + 35 - 963 - 964 - 34 + 735 + 736 + 35 @@ -29640,7 +29675,7 @@ 1 2 - 104 + 105 @@ -29654,9 +29689,9 @@ 12 - 1549 - 1550 - 34 + 1321 + 1322 + 35 @@ -29672,7 +29707,7 @@ 3 4 - 34 + 35 @@ -29682,19 +29717,19 @@ expr_deallocator - 62901 + 55314 expr - 62901 + 55314 func - 104 + 105 form - 69 + 70 @@ -29708,7 +29743,7 @@ 1 2 - 62901 + 55314 @@ -29724,7 +29759,7 @@ 1 2 - 62901 + 55314 @@ -29740,17 +29775,17 @@ 1 2 - 34 + 35 + + + 722 + 723 + 35 847 848 - 34 - - - 950 - 951 - 34 + 35 @@ -29766,7 +29801,7 @@ 1 2 - 104 + 105 @@ -29780,14 +29815,14 @@ 12 - 848 - 849 - 34 + 722 + 723 + 35 - 950 - 951 - 34 + 848 + 849 + 35 @@ -29803,12 +29838,12 @@ 1 2 - 34 + 35 2 3 - 34 + 35 @@ -29829,15 +29864,15 @@ expr_cond_guard - 654457 + 654502 cond - 654457 + 654502 guard - 654457 + 654502 @@ -29851,7 +29886,7 @@ 1 2 - 654457 + 654502 @@ -29867,7 +29902,7 @@ 1 2 - 654457 + 654502 @@ -29877,15 +29912,15 @@ expr_cond_true - 654455 + 654499 cond - 654455 + 654499 true - 654455 + 654499 @@ -29899,7 +29934,7 @@ 1 2 - 654455 + 654499 @@ -29915,7 +29950,7 @@ 1 2 - 654455 + 654499 @@ -29925,15 +29960,15 @@ expr_cond_false - 654457 + 654502 cond - 654457 + 654502 false - 654457 + 654502 @@ -29947,7 +29982,7 @@ 1 2 - 654457 + 654502 @@ -29963,7 +29998,7 @@ 1 2 - 654457 + 654502 @@ -29973,15 +30008,15 @@ values - 10645398 + 10646146 id - 10645398 + 10646146 str - 86632 + 86639 @@ -29995,7 +30030,7 @@ 1 2 - 10645398 + 10646146 @@ -30011,7 +30046,7 @@ 1 2 - 58704 + 58708 2 @@ -30021,12 +30056,12 @@ 3 6 - 6746 + 6747 6 62 - 6512 + 6513 62 @@ -30041,15 +30076,15 @@ valuetext - 4756700 + 4756729 id - 4756700 + 4756729 text - 703927 + 703924 @@ -30063,7 +30098,7 @@ 1 2 - 4756700 + 4756729 @@ -30079,7 +30114,7 @@ 1 2 - 527530 + 527529 2 @@ -30089,7 +30124,7 @@ 3 7 - 56761 + 56759 7 @@ -30104,15 +30139,15 @@ valuebind - 11082271 + 11083050 val - 10645398 + 10646146 expr - 11082271 + 11083050 @@ -30126,12 +30161,12 @@ 1 2 - 10231303 + 10232022 2 7 - 414094 + 414124 @@ -30147,7 +30182,7 @@ 1 2 - 11082271 + 11083050 @@ -30157,15 +30192,15 @@ fieldoffsets - 1050009 + 1050083 id - 1050009 + 1050083 byteoffset - 22591 + 22593 bitoffset @@ -30183,7 +30218,7 @@ 1 2 - 1050009 + 1050083 @@ -30199,7 +30234,7 @@ 1 2 - 1050009 + 1050083 @@ -30215,7 +30250,7 @@ 1 2 - 12966 + 12967 2 @@ -30261,7 +30296,7 @@ 1 2 - 21915 + 21917 2 @@ -30358,19 +30393,19 @@ bitfield - 21007 + 20961 id - 21007 + 20961 bits - 2625 + 2620 declared_bits - 2625 + 2620 @@ -30384,7 +30419,7 @@ 1 2 - 21007 + 20961 @@ -30400,7 +30435,7 @@ 1 2 - 21007 + 20961 @@ -30416,42 +30451,42 @@ 1 2 - 735 + 733 2 3 - 630 + 628 3 4 - 210 + 209 4 5 - 210 + 209 5 6 - 210 + 209 6 8 - 210 + 209 8 11 - 210 + 209 12 115 - 210 + 209 @@ -30467,7 +30502,7 @@ 1 2 - 2625 + 2620 @@ -30483,42 +30518,42 @@ 1 2 - 735 + 733 2 3 - 630 + 628 3 4 - 210 + 209 4 5 - 210 + 209 5 6 - 210 + 209 6 8 - 210 + 209 8 11 - 210 + 209 12 115 - 210 + 209 @@ -30534,7 +30569,7 @@ 1 2 - 2625 + 2620 @@ -30544,23 +30579,23 @@ initialisers - 1736804 + 1731850 init - 1736804 + 1731850 var - 719782 + 717751 expr - 1736804 + 1731850 location - 391526 + 390432 @@ -30574,7 +30609,7 @@ 1 2 - 1736804 + 1731850 @@ -30590,7 +30625,7 @@ 1 2 - 1736804 + 1731850 @@ -30606,7 +30641,7 @@ 1 2 - 1736804 + 1731850 @@ -30622,17 +30657,17 @@ 1 2 - 631170 + 629393 2 16 - 31717 + 31625 16 25 - 56851 + 56687 25 @@ -30653,17 +30688,17 @@ 1 2 - 631170 + 629393 2 16 - 31717 + 31625 16 25 - 56851 + 56687 25 @@ -30684,7 +30719,7 @@ 1 2 - 719700 + 717669 2 @@ -30705,7 +30740,7 @@ 1 2 - 1736804 + 1731850 @@ -30721,7 +30756,7 @@ 1 2 - 1736804 + 1731850 @@ -30737,7 +30772,7 @@ 1 2 - 1736804 + 1731850 @@ -30753,22 +30788,22 @@ 1 2 - 318848 + 317950 2 3 - 23904 + 23835 3 15 - 30865 + 30789 15 - 111462 - 17907 + 111459 + 17856 @@ -30784,17 +30819,17 @@ 1 2 - 341914 + 340950 2 4 - 35670 + 35580 4 - 12741 - 13941 + 12738 + 13901 @@ -30810,22 +30845,22 @@ 1 2 - 318848 + 317950 2 3 - 23904 + 23835 3 15 - 30865 + 30789 15 - 111462 - 17907 + 111459 + 17856 @@ -30835,15 +30870,15 @@ expr_ancestor - 121360 + 121674 exp - 121360 + 121674 ancestor - 84661 + 84880 @@ -30857,7 +30892,7 @@ 1 2 - 121360 + 121674 @@ -30873,22 +30908,22 @@ 1 2 - 61219 + 61377 2 3 - 16741 + 16785 3 8 - 6466 + 6483 8 18 - 233 + 234 @@ -30898,19 +30933,19 @@ exprs - 18298854 + 18300140 id - 18298854 + 18300140 kind - 8670 + 3382 location - 7747846 + 3561673 @@ -30924,7 +30959,7 @@ 1 2 - 18298854 + 18300140 @@ -30940,7 +30975,7 @@ 1 2 - 18298854 + 18300140 @@ -30955,68 +30990,68 @@ 1 - 6 - 632 + 5 + 281 - 6 - 12 - 632 + 5 + 14 + 211 - 18 - 28 - 541 + 14 + 38 + 281 - 29 - 45 - 722 + 42 + 66 + 281 - 45 - 88 - 722 + 82 + 135 + 281 - 89 - 122 - 722 + 141 + 334 + 281 - 152 - 234 - 722 + 338 + 509 + 281 - 241 - 441 - 722 + 563 + 830 + 281 - 504 - 778 - 722 + 831 + 1183 + 281 - 802 - 1049 - 722 + 1184 + 2071 + 281 - 1117 - 2286 - 722 + 2627 + 5700 + 281 - 2424 - 9743 - 722 + 6591 + 63491 + 281 - 22722 - 53144 - 361 + 78915 + 109590 + 70 @@ -31031,68 +31066,68 @@ 1 + 2 + 281 + + + 2 3 - 722 + 176 3 - 4 - 541 + 6 + 281 - 4 + 6 13 - 722 + 281 - 13 - 24 - 722 + 14 + 26 + 281 - 24 - 37 - 722 + 28 + 62 + 246 - 41 - 101 - 722 + 63 + 83 + 281 - 102 - 175 - 722 + 91 + 183 + 281 - 180 - 279 - 722 + 206 + 342 + 281 - 281 - 499 - 722 + 353 + 448 + 281 - 565 - 774 - 722 + 468 + 1018 + 281 - 813 - 1643 - 722 + 1051 + 14609 + 281 - 1728 - 13946 - 722 - - - 15037 - 33170 - 180 + 16974 + 32757 + 140 @@ -31108,22 +31143,32 @@ 1 2 - 5161708 + 1936933 2 3 - 1378731 + 816932 3 - 5 - 662723 + 4 + 247260 - 5 - 14777 - 544682 + 4 + 8 + 280872 + + + 8 + 136 + 267131 + + + 136 + 54140 + 12542 @@ -31139,17 +31184,22 @@ 1 2 - 5999730 + 2363808 2 3 - 1427591 + 873691 3 - 26 - 320523 + 6 + 307261 + + + 6 + 25 + 16911 @@ -31159,19 +31209,19 @@ expr_types - 18356354 + 18357789 id - 18298854 + 18300140 typeid - 806338 + 829282 value_category - 53 + 54 @@ -31185,12 +31235,12 @@ 1 2 - 18241425 + 18242562 2 5 - 57428 + 57577 @@ -31206,7 +31256,7 @@ 1 2 - 18298854 + 18300140 @@ -31222,42 +31272,42 @@ 1 2 - 278288 + 293470 2 3 - 160556 + 160720 3 4 - 69787 + 69824 4 5 - 57051 + 60801 5 7 - 62027 + 66996 7 12 - 67236 + 65321 12 35 - 61758 + 62638 35 - 78725 - 49632 + 78674 + 49509 @@ -31273,17 +31323,17 @@ 1 2 - 695684 + 716180 2 3 - 100271 + 102314 3 4 - 10382 + 10787 @@ -31297,19 +31347,19 @@ 12 - 11948 - 11949 - 17 + 11828 + 11829 + 18 - 253514 - 253515 - 17 + 253738 + 253739 + 18 - 753215 - 753216 - 17 + 750551 + 750552 + 18 @@ -31323,19 +31373,19 @@ 12 - 1415 - 1416 - 17 + 1446 + 1447 + 18 - 11760 - 11761 - 17 + 11978 + 11979 + 18 - 38451 - 38452 - 17 + 39501 + 39502 + 18 @@ -31345,15 +31395,15 @@ new_allocated_type - 55240 + 47598 expr - 55240 + 47598 type_id - 27952 + 28150 @@ -31367,7 +31417,7 @@ 1 2 - 55240 + 47598 @@ -31383,22 +31433,17 @@ 1 2 - 9095 + 11767 2 3 - 15987 + 14903 3 - 6 - 2134 - - - 6 - 28 - 734 + 19 + 1479 @@ -31408,15 +31453,15 @@ new_array_allocated_type - 5113 + 5099 expr - 5113 + 5099 type_id - 2200 + 2194 @@ -31430,7 +31475,7 @@ 1 2 - 5113 + 5099 @@ -31451,12 +31496,12 @@ 2 3 - 1948 + 1942 3 7 - 170 + 169 8 @@ -32018,15 +32063,15 @@ condition_decl_bind - 38495 + 38595 expr - 38495 + 38595 decl - 38495 + 38595 @@ -32040,7 +32085,7 @@ 1 2 - 38495 + 38595 @@ -32056,7 +32101,7 @@ 1 2 - 38495 + 38595 @@ -32066,15 +32111,15 @@ typeid_bind - 36173 + 36430 expr - 36173 + 36430 type_id - 16267 + 16383 @@ -32088,7 +32133,7 @@ 1 2 - 36173 + 36430 @@ -32104,12 +32149,12 @@ 1 2 - 15847 + 15960 3 328 - 419 + 422 @@ -32119,15 +32164,15 @@ uuidof_bind - 20051 + 19994 expr - 20051 + 19994 type_id - 19856 + 19799 @@ -32141,7 +32186,7 @@ 1 2 - 20051 + 19994 @@ -32157,7 +32202,7 @@ 1 2 - 19692 + 19635 2 @@ -32172,15 +32217,15 @@ sizeof_bind - 191840 + 191854 expr - 191840 + 191854 type_id - 8193 + 8194 @@ -32194,7 +32239,7 @@ 1 2 - 191840 + 191854 @@ -32303,19 +32348,19 @@ lambdas - 21712 + 21639 expr - 21712 + 21639 default_capture - 472 + 470 has_explicit_return_type - 472 + 470 @@ -32329,7 +32374,7 @@ 1 2 - 21712 + 21639 @@ -32345,7 +32390,7 @@ 1 2 - 21712 + 21639 @@ -32361,7 +32406,7 @@ 46 47 - 472 + 470 @@ -32377,7 +32422,7 @@ 1 2 - 472 + 470 @@ -32393,7 +32438,7 @@ 46 47 - 472 + 470 @@ -32409,7 +32454,7 @@ 1 2 - 472 + 470 @@ -32419,35 +32464,35 @@ lambda_capture - 28320 + 28224 id - 28320 + 28224 lambda - 20768 + 20698 index - 944 + 940 field - 28320 + 28224 captured_by_reference - 472 + 470 is_implicit - 472 + 470 location - 2832 + 2822 @@ -32461,7 +32506,7 @@ 1 2 - 28320 + 28224 @@ -32477,7 +32522,7 @@ 1 2 - 28320 + 28224 @@ -32493,7 +32538,7 @@ 1 2 - 28320 + 28224 @@ -32509,7 +32554,7 @@ 1 2 - 28320 + 28224 @@ -32525,7 +32570,7 @@ 1 2 - 28320 + 28224 @@ -32541,7 +32586,7 @@ 1 2 - 28320 + 28224 @@ -32557,12 +32602,12 @@ 1 2 - 13216 + 13171 2 3 - 7552 + 7526 @@ -32578,12 +32623,12 @@ 1 2 - 13216 + 13171 2 3 - 7552 + 7526 @@ -32599,12 +32644,12 @@ 1 2 - 13216 + 13171 2 3 - 7552 + 7526 @@ -32620,7 +32665,7 @@ 1 2 - 20768 + 20698 @@ -32636,7 +32681,7 @@ 1 2 - 20768 + 20698 @@ -32652,12 +32697,12 @@ 1 2 - 13216 + 13171 2 3 - 7552 + 7526 @@ -32673,12 +32718,12 @@ 16 17 - 472 + 470 44 45 - 472 + 470 @@ -32694,12 +32739,12 @@ 16 17 - 472 + 470 44 45 - 472 + 470 @@ -32715,12 +32760,12 @@ 16 17 - 472 + 470 44 45 - 472 + 470 @@ -32736,7 +32781,7 @@ 1 2 - 944 + 940 @@ -32752,7 +32797,7 @@ 1 2 - 944 + 940 @@ -32768,12 +32813,12 @@ 2 3 - 472 + 470 4 5 - 472 + 470 @@ -32789,7 +32834,7 @@ 1 2 - 28320 + 28224 @@ -32805,7 +32850,7 @@ 1 2 - 28320 + 28224 @@ -32821,7 +32866,7 @@ 1 2 - 28320 + 28224 @@ -32837,7 +32882,7 @@ 1 2 - 28320 + 28224 @@ -32853,7 +32898,7 @@ 1 2 - 28320 + 28224 @@ -32869,7 +32914,7 @@ 1 2 - 28320 + 28224 @@ -32885,7 +32930,7 @@ 60 61 - 472 + 470 @@ -32901,7 +32946,7 @@ 44 45 - 472 + 470 @@ -32917,7 +32962,7 @@ 2 3 - 472 + 470 @@ -32933,7 +32978,7 @@ 60 61 - 472 + 470 @@ -32949,7 +32994,7 @@ 1 2 - 472 + 470 @@ -32965,7 +33010,7 @@ 6 7 - 472 + 470 @@ -32981,7 +33026,7 @@ 60 61 - 472 + 470 @@ -32997,7 +33042,7 @@ 44 45 - 472 + 470 @@ -33013,7 +33058,7 @@ 2 3 - 472 + 470 @@ -33029,7 +33074,7 @@ 60 61 - 472 + 470 @@ -33045,7 +33090,7 @@ 1 2 - 472 + 470 @@ -33061,7 +33106,7 @@ 6 7 - 472 + 470 @@ -33077,12 +33122,12 @@ 8 9 - 1888 + 1881 14 15 - 944 + 940 @@ -33098,12 +33143,12 @@ 8 9 - 1888 + 1881 14 15 - 944 + 940 @@ -33119,7 +33164,7 @@ 1 2 - 2832 + 2822 @@ -33135,12 +33180,12 @@ 8 9 - 1888 + 1881 14 15 - 944 + 940 @@ -33156,7 +33201,7 @@ 1 2 - 2832 + 2822 @@ -33172,7 +33217,7 @@ 1 2 - 2832 + 2822 @@ -33298,19 +33343,19 @@ stmts - 4689495 + 4659955 id - 4689495 + 4659955 kind - 1995 + 1991 location - 2293751 + 2288683 @@ -33324,7 +33369,7 @@ 1 2 - 4689495 + 4659955 @@ -33340,7 +33385,7 @@ 1 2 - 4689495 + 4659955 @@ -33356,97 +33401,97 @@ 1 2 - 105 + 104 18 19 - 105 + 104 22 23 - 105 + 104 46 47 - 105 + 104 75 76 - 105 + 104 83 84 - 105 + 104 102 103 - 105 + 104 154 155 - 105 + 104 242 243 - 105 + 104 284 285 - 105 + 104 383 384 - 105 + 104 418 419 - 105 + 104 501 502 - 105 + 104 1324 1325 - 105 + 104 2629 2630 - 105 + 104 - 4606 - 4607 - 105 + 4609 + 4610 + 104 - 8935 - 8936 - 105 + 8749 + 8750 + 104 11547 11548 - 105 + 104 13275 13276 - 105 + 104 @@ -33462,97 +33507,97 @@ 1 2 - 105 + 104 8 9 - 105 + 104 18 19 - 105 + 104 45 46 - 105 + 104 50 51 - 105 + 104 56 57 - 105 + 104 74 75 - 105 + 104 88 89 - 105 + 104 101 102 - 105 + 104 128 129 - 105 + 104 209 210 - 105 + 104 252 253 - 105 + 104 368 369 - 105 + 104 641 642 - 105 + 104 1742 1743 - 105 + 104 - 2183 - 2184 - 105 + 2186 + 2187 + 104 - 4210 - 4211 - 105 + 4191 + 4192 + 104 6065 6066 - 105 + 104 6529 6530 - 105 + 104 @@ -33568,22 +33613,22 @@ 1 2 - 1897016 + 1893663 2 4 - 177201 + 176600 4 12 - 176466 + 175762 12 684 - 43066 + 42656 @@ -33599,12 +33644,12 @@ 1 2 - 2234613 + 2231353 2 8 - 59137 + 57329 @@ -33709,16 +33754,64 @@ - if_then - 723123 + if_initialization + 314 if_stmt - 723123 + 314 + + + init_id + 314 + + + + + if_stmt + init_id + + + 12 + + + 1 + 2 + 314 + + + + + + + init_id + if_stmt + + + 12 + + + 1 + 2 + 314 + + + + + + + + + if_then + 723174 + + + if_stmt + 723174 then_id - 723123 + 723174 @@ -33732,7 +33825,7 @@ 1 2 - 723123 + 723174 @@ -33748,7 +33841,7 @@ 1 2 - 723123 + 723174 @@ -33758,15 +33851,15 @@ if_else - 183959 + 183972 if_stmt - 183959 + 183972 else_id - 183959 + 183972 @@ -33780,7 +33873,7 @@ 1 2 - 183959 + 183972 @@ -33796,7 +33889,55 @@ 1 2 - 183959 + 183972 + + + + + + + + + constexpr_if_initialization + 1 + + + constexpr_if_stmt + 1 + + + init_id + 1 + + + + + constexpr_if_stmt + init_id + + + 12 + + + 1 + 2 + 1 + + + + + + + init_id + constexpr_if_stmt + + + 12 + + + 1 + 2 + 1 @@ -33806,15 +33947,15 @@ constexpr_if_then - 52624 + 52508 constexpr_if_stmt - 52624 + 52508 then_id - 52624 + 52508 @@ -33828,7 +33969,7 @@ 1 2 - 52624 + 52508 @@ -33844,7 +33985,7 @@ 1 2 - 52624 + 52508 @@ -33854,15 +33995,15 @@ constexpr_if_else - 30986 + 30918 constexpr_if_stmt - 30986 + 30918 else_id - 30986 + 30918 @@ -33876,7 +34017,7 @@ 1 2 - 30986 + 30918 @@ -33892,7 +34033,7 @@ 1 2 - 30986 + 30918 @@ -33902,15 +34043,15 @@ while_body - 30265 + 30207 while_stmt - 30265 + 30207 body_id - 30265 + 30207 @@ -33924,7 +34065,7 @@ 1 2 - 30265 + 30207 @@ -33940,7 +34081,7 @@ 1 2 - 30265 + 30207 @@ -33950,15 +34091,15 @@ do_body - 148593 + 148604 do_stmt - 148593 + 148604 body_id - 148593 + 148604 @@ -33972,7 +34113,7 @@ 1 2 - 148593 + 148604 @@ -33988,7 +34129,55 @@ 1 2 - 148593 + 148604 + + + + + + + + + switch_initialization + 4 + + + switch_stmt + 4 + + + init_id + 4 + + + + + switch_stmt + init_id + + + 12 + + + 1 + 2 + 4 + + + + + + + init_id + switch_stmt + + + 12 + + + 1 + 2 + 4 @@ -33998,19 +34187,19 @@ switch_case - 190914 + 191408 switch_stmt - 10275 + 10301 index - 4418 + 4430 case_id - 190914 + 191408 @@ -34024,57 +34213,57 @@ 2 3 - 53 + 54 3 4 - 2263 + 2269 4 5 - 1652 + 1656 5 6 - 1005 + 1008 6 7 - 754 + 756 7 9 - 718 + 720 9 10 - 970 + 972 10 11 - 323 + 324 11 14 - 862 + 864 14 31 - 826 + 828 36 247 - 844 + 846 @@ -34090,57 +34279,57 @@ 2 3 - 53 + 54 3 4 - 2263 + 2269 4 5 - 1652 + 1656 5 6 - 1005 + 1008 6 7 - 754 + 756 7 9 - 718 + 720 9 10 - 970 + 972 10 11 - 323 + 324 11 14 - 862 + 864 14 31 - 826 + 828 36 247 - 844 + 846 @@ -34156,32 +34345,32 @@ 14 15 - 1167 + 1170 18 19 - 538 + 540 32 33 - 1904 + 1909 33 62 - 377 + 378 66 296 - 341 + 342 351 573 - 89 + 90 @@ -34197,32 +34386,32 @@ 14 15 - 1167 + 1170 18 19 - 538 + 540 32 33 - 1904 + 1909 33 62 - 377 + 378 66 296 - 341 + 342 351 573 - 89 + 90 @@ -34238,7 +34427,7 @@ 1 2 - 190914 + 191408 @@ -34254,7 +34443,7 @@ 1 2 - 190914 + 191408 @@ -34264,15 +34453,15 @@ switch_body - 20900 + 20901 switch_stmt - 20900 + 20901 body_id - 20900 + 20901 @@ -34286,7 +34475,7 @@ 1 2 - 20900 + 20901 @@ -34302,7 +34491,7 @@ 1 2 - 20900 + 20901 @@ -34312,15 +34501,15 @@ for_initialization - 53198 + 53202 for_stmt - 53198 + 53202 init_id - 53198 + 53202 @@ -34334,7 +34523,7 @@ 1 2 - 53198 + 53202 @@ -34350,7 +34539,7 @@ 1 2 - 53198 + 53202 @@ -34360,15 +34549,15 @@ for_condition - 55454 + 55458 for_stmt - 55454 + 55458 condition_id - 55454 + 55458 @@ -34382,7 +34571,7 @@ 1 2 - 55454 + 55458 @@ -34398,7 +34587,7 @@ 1 2 - 55454 + 55458 @@ -34408,15 +34597,15 @@ for_update - 53301 + 53304 for_stmt - 53301 + 53304 update_id - 53301 + 53304 @@ -34430,7 +34619,7 @@ 1 2 - 53301 + 53304 @@ -34446,7 +34635,7 @@ 1 2 - 53301 + 53304 @@ -34456,15 +34645,15 @@ for_body - 61319 + 61324 for_stmt - 61319 + 61324 body_id - 61319 + 61324 @@ -34478,7 +34667,7 @@ 1 2 - 61319 + 61324 @@ -34494,7 +34683,7 @@ 1 2 - 61319 + 61324 @@ -34504,19 +34693,19 @@ stmtparents - 4064694 + 4052307 id - 4064694 + 4052307 index - 12245 + 12210 parent - 1724432 + 1719451 @@ -34530,7 +34719,7 @@ 1 2 - 4064694 + 4052307 @@ -34546,7 +34735,7 @@ 1 2 - 4064694 + 4052307 @@ -34562,12 +34751,12 @@ 1 2 - 4022 + 4011 2 3 - 1002 + 999 3 @@ -34577,37 +34766,37 @@ 4 5 - 1557 + 1553 7 8 - 1021 + 1018 8 12 - 794 + 792 12 29 - 1078 + 1075 29 38 - 920 + 917 41 77 - 926 + 924 77 - 196938 - 699 + 196934 + 697 @@ -34623,12 +34812,12 @@ 1 2 - 4022 + 4011 2 3 - 1002 + 999 3 @@ -34638,37 +34827,37 @@ 4 5 - 1557 + 1553 7 8 - 1021 + 1018 8 12 - 794 + 792 12 29 - 1078 + 1075 29 38 - 920 + 917 41 77 - 926 + 924 77 - 196938 - 699 + 196934 + 697 @@ -34684,32 +34873,32 @@ 1 2 - 989567 + 987314 2 3 - 374640 + 372959 3 4 - 106047 + 105742 4 6 - 111564 + 111231 6 17 - 130216 + 129842 17 1943 - 12396 + 12361 @@ -34725,32 +34914,32 @@ 1 2 - 989567 + 987314 2 3 - 374640 + 372959 3 4 - 106047 + 105742 4 6 - 111564 + 111231 6 17 - 130216 + 129842 17 1943 - 12396 + 12361 @@ -34760,22 +34949,22 @@ ishandler - 59279 + 59432 block - 59279 + 59432 stmt_decl_bind - 585681 + 585632 stmt - 545527 + 545482 num @@ -34783,7 +34972,7 @@ decl - 585576 + 585527 @@ -34797,12 +34986,12 @@ 1 2 - 524646 + 524602 2 19 - 20881 + 20879 @@ -34818,12 +35007,12 @@ 1 2 - 524646 + 524602 2 19 - 20881 + 20879 @@ -35021,7 +35210,7 @@ 1 2 - 585538 + 585489 2 @@ -35042,7 +35231,7 @@ 1 2 - 585576 + 585527 @@ -35052,11 +35241,11 @@ stmt_decl_entry_bind - 528084 + 528040 stmt - 488233 + 488193 num @@ -35064,7 +35253,7 @@ decl_entry - 528025 + 527981 @@ -35078,12 +35267,12 @@ 1 2 - 467616 + 467578 2 19 - 20616 + 20615 @@ -35099,12 +35288,12 @@ 1 2 - 467616 + 467578 2 19 - 20616 + 20615 @@ -35302,7 +35491,7 @@ 1 2 - 528004 + 527960 3 @@ -35323,7 +35512,7 @@ 1 2 - 528025 + 527981 @@ -35333,15 +35522,15 @@ blockscope - 1442932 + 1438063 block - 1442932 + 1438063 enclosing - 1326345 + 1321870 @@ -35355,7 +35544,7 @@ 1 2 - 1442932 + 1438063 @@ -35371,12 +35560,12 @@ 1 2 - 1260264 + 1256011 2 13 - 66081 + 65858 @@ -35386,19 +35575,19 @@ jumpinfo - 253977 + 253995 id - 253977 + 253995 str - 21151 + 21152 target - 53042 + 53046 @@ -35412,7 +35601,7 @@ 1 2 - 253977 + 253995 @@ -35428,7 +35617,7 @@ 1 2 - 253977 + 253995 @@ -35444,7 +35633,7 @@ 2 3 - 9874 + 9875 3 @@ -35490,7 +35679,7 @@ 1 2 - 16716 + 16717 2 @@ -35526,12 +35715,12 @@ 2 3 - 26426 + 26428 3 4 - 12896 + 12897 4 @@ -35541,7 +35730,7 @@ 5 8 - 4690 + 4691 8 @@ -35562,7 +35751,7 @@ 1 2 - 53042 + 53046 @@ -35572,19 +35761,19 @@ preprocdirects - 4447274 + 4437448 id - 4447274 + 4437448 kind - 1050 + 1048 location - 4444753 + 4434933 @@ -35598,7 +35787,7 @@ 1 2 - 4447274 + 4437448 @@ -35614,7 +35803,7 @@ 1 2 - 4447274 + 4437448 @@ -35630,52 +35819,52 @@ 121 122 - 105 + 104 693 694 - 105 + 104 794 795 - 105 + 104 917 918 - 105 + 104 1697 1698 - 105 + 104 1785 1786 - 105 + 104 2983 2984 - 105 + 104 3799 3800 - 105 + 104 6290 6291 - 105 + 104 23260 23261 - 105 + 104 @@ -35691,52 +35880,52 @@ 121 122 - 105 + 104 693 694 - 105 + 104 794 795 - 105 + 104 917 918 - 105 + 104 1697 1698 - 105 + 104 1785 1786 - 105 + 104 2983 2984 - 105 + 104 3799 3800 - 105 + 104 6290 6291 - 105 + 104 23236 23237 - 105 + 104 @@ -35752,12 +35941,12 @@ 1 2 - 4444648 + 4434828 25 26 - 105 + 104 @@ -35773,7 +35962,7 @@ 1 2 - 4444753 + 4434933 @@ -35783,15 +35972,15 @@ preprocpair - 1443876 + 1442296 begin - 1206927 + 1206147 elseelifend - 1443876 + 1442296 @@ -35805,17 +35994,17 @@ 1 2 - 986027 + 985992 2 3 - 210516 + 209805 3 11 - 10384 + 10349 @@ -35831,7 +36020,7 @@ 1 2 - 1443876 + 1442296 @@ -35841,41 +36030,41 @@ preproctrue - 784479 + 782302 branch - 784479 + 782302 preprocfalse - 325686 + 327409 branch - 325686 + 327409 preproctext - 3585423 + 3577502 id - 3585423 + 3577502 head - 2599941 + 2594197 body - 1520449 + 1517194 @@ -35889,7 +36078,7 @@ 1 2 - 3585423 + 3577502 @@ -35905,7 +36094,7 @@ 1 2 - 3585423 + 3577502 @@ -35921,12 +36110,12 @@ 1 2 - 2452360 + 2446942 2 740 - 147580 + 147254 @@ -35942,12 +36131,12 @@ 1 2 - 2537548 + 2531941 2 5 - 62393 + 62255 @@ -35963,17 +36152,17 @@ 1 2 - 1376334 + 1373398 2 6 - 114073 + 113821 6 - 11582 - 30041 + 11581 + 29974 @@ -35989,17 +36178,17 @@ 1 2 - 1379380 + 1376438 2 7 - 114388 + 114135 7 - 2959 - 26680 + 2958 + 26621 @@ -36009,15 +36198,15 @@ includes - 316718 + 315649 id - 316718 + 315649 included - 118474 + 118074 @@ -36031,7 +36220,7 @@ 1 2 - 316718 + 315649 @@ -36047,32 +36236,32 @@ 1 2 - 61833 + 61624 2 3 - 22184 + 22109 3 4 - 12744 + 12701 4 6 - 10384 + 10349 6 14 - 8968 + 8937 14 47 - 2360 + 2352 @@ -36130,15 +36319,15 @@ link_parent - 40018704 + 40143068 element - 5094359 + 5115983 link_target - 349 + 352 @@ -36152,17 +36341,17 @@ 1 2 - 694015 + 701934 2 9 - 43135 + 44146 9 10 - 4357208 + 4369903 @@ -36178,52 +36367,52 @@ 3 4 - 34 + 35 - 124724 - 124725 - 34 + 124207 + 124208 + 35 - 124828 - 124829 - 34 + 124311 + 124312 + 35 - 124926 - 124927 - 34 + 124409 + 124410 + 35 - 124964 - 124965 - 34 + 124447 + 124448 + 35 - 124978 - 124979 - 34 + 124454 + 124455 + 35 - 124980 - 124981 - 34 + 124463 + 124464 + 35 - 126863 - 126864 - 34 + 126339 + 126340 + 35 - 132946 - 132947 - 34 + 132460 + 132461 + 35 - 134697 - 134698 - 34 + 134288 + 134289 + 35 diff --git a/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/exprparents.ql b/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/exprparents.ql new file mode 100644 index 00000000000..ca800c8e311 --- /dev/null +++ b/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/exprparents.ql @@ -0,0 +1,21 @@ +class Element extends @element { + string toString() { none() } +} + +class Expr extends @expr { + string toString() { none() } +} + +class Stmt extends @stmt { + string toString() { none() } +} + +predicate isStmtWithInitializer(Stmt stmt) { + exists(int kind | stmts(stmt, kind, _) | kind = 2 or kind = 11 or kind = 35) +} + +from Expr child, int index, int index_new, Element parent +where + exprparents(child, index, parent) and + if isStmtWithInitializer(parent) then index_new = index + 1 else index_new = index +select child, index_new, parent diff --git a/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/old.dbscheme b/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/old.dbscheme new file mode 100644 index 00000000000..e9a518baf14 --- /dev/null +++ b/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/old.dbscheme @@ -0,0 +1,2096 @@ + +/** + * 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 +); + +/** + * 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, 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 +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * 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( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * 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_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * 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_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: 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_default 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 +); + +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 @macroinvocations.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 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 + 1 = normal + | 2 = constructor + | 3 = destructor + | 4 = conversion + | 5 = operator + | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk + ; +*/ +functions( + unique int id: @function, + string name: string ref, + int kind: int 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, + int handle: @variable ref, + int promise: @variable 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); + +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 +); + +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_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable 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 +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default 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: @functionorblock 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 +); + +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 = error + | 2 = unknown + | 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 = __int8 // Microsoft-specific + | 21 = __int16 // Microsoft-specific + | 22 = __int32 // Microsoft-specific + | 23 = __int64 // Microsoft-specific + | 24 = float + | 25 = double + | 26 = long_double + | 27 = _Complex_float // C99-specific + | 28 = _Complex_double // C99-specific + | 29 = _Complex_long double // C99-specific + | 30 = _Imaginary_float // C99-specific + | 31 = _Imaginary_double // C99-specific + | 32 = _Imaginary_long_double // C99-specific + | 33 = wchar_t // Microsoft-specific + | 34 = decltype_nullptr // C++11 + | 35 = __int128 + | 36 = unsigned___int128 + | 37 = signed___int128 + | 38 = __float128 + | 39 = _Complex___float128 + | 40 = _Decimal32 + | 41 = _Decimal64 + | 42 = _Decimal128 + | 43 = char16_t + | 44 = char32_t + | 45 = _Float32 + | 46 = _Float32x + | 47 = _Float64 + | 48 = _Float64x + | 49 = _Float128 + | 50 = _Float128x + | 51 = char8_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 + ; +*/ +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 +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this 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. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* + case @usertype.kind of + 1 = struct + | 2 = class + | 3 = union + | 4 = enum + | 5 = typedef // classic C: typedef typedef type name + | 6 = template + | 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 // a using name = type style typedef + ; +*/ +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 +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +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 +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the EDG frontend. See symbol_ref.h there. + 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 +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int 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 +); + +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 +; + +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_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 +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +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; + +@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 + ; + +/* +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 + | @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr + +@assign_expr = @assignexpr | @assign_op_expr + +/* + 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 +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * 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_expr 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_expr 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 // EDG 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 +; + +@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 + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + ; + +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. + */ +#keyset[aggregate, field] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. + */ +#keyset[aggregate, element_index] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int 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 +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_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 +); + +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_stmt 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 +; + +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 +); + +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_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 +); + +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 +); + +#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 +); + +for_initialization( + unique int for_stmt: @stmt_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 +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@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 +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +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( + unique 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/e9a518baf14f4322ac243578a8e1391386ff030f/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..cf72c8898d1 --- /dev/null +++ b/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/semmlecode.cpp.dbscheme @@ -0,0 +1,2111 @@ + +/** + * 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 +); + +/** + * 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, 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 +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * 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( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * 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_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * 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_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: 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_default 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 +); + +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 @macroinvocations.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 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 + 1 = normal + | 2 = constructor + | 3 = destructor + | 4 = conversion + | 5 = operator + | 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk + ; +*/ +functions( + unique int id: @function, + string name: string ref, + int kind: int 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, + int handle: @variable ref, + int promise: @variable 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); + +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 +); + +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_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable 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 +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default 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: @functionorblock 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 +); + +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 = error + | 2 = unknown + | 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 = __int8 // Microsoft-specific + | 21 = __int16 // Microsoft-specific + | 22 = __int32 // Microsoft-specific + | 23 = __int64 // Microsoft-specific + | 24 = float + | 25 = double + | 26 = long_double + | 27 = _Complex_float // C99-specific + | 28 = _Complex_double // C99-specific + | 29 = _Complex_long double // C99-specific + | 30 = _Imaginary_float // C99-specific + | 31 = _Imaginary_double // C99-specific + | 32 = _Imaginary_long_double // C99-specific + | 33 = wchar_t // Microsoft-specific + | 34 = decltype_nullptr // C++11 + | 35 = __int128 + | 36 = unsigned___int128 + | 37 = signed___int128 + | 38 = __float128 + | 39 = _Complex___float128 + | 40 = _Decimal32 + | 41 = _Decimal64 + | 42 = _Decimal128 + | 43 = char16_t + | 44 = char32_t + | 45 = _Float32 + | 46 = _Float32x + | 47 = _Float64 + | 48 = _Float64x + | 49 = _Float128 + | 50 = _Float128x + | 51 = char8_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 + ; +*/ +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 +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this 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. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* + case @usertype.kind of + 1 = struct + | 2 = class + | 3 = union + | 4 = enum + | 5 = typedef // classic C: typedef typedef type name + | 6 = template + | 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 // a using name = type style typedef + ; +*/ +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 +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +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 +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the EDG frontend. See symbol_ref.h there. + 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 +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int 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 +); + +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 +; + +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_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 +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +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; + +@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 + ; + +/* +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 + | @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr + +@assign_expr = @assignexpr | @assign_op_expr + +/* + 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 +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * 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_expr 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_expr 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 // EDG 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 +; + +@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 + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + ; + +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. + */ +#keyset[aggregate, field] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. + */ +#keyset[aggregate, element_index] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int 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 +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_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 +); + +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_stmt 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 +; + +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 +); + +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 +); + +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 +); + +for_initialization( + unique int for_stmt: @stmt_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 +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@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 +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +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( + unique 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/e9a518baf14f4322ac243578a8e1391386ff030f/stmtparents.ql b/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/stmtparents.ql new file mode 100644 index 00000000000..e4865284f9c --- /dev/null +++ b/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/stmtparents.ql @@ -0,0 +1,17 @@ +class Element extends @element { + string toString() { none() } +} + +class Stmt extends @stmt { + string toString() { none() } +} + +predicate isStmtWithInitializer(Stmt stmt) { + exists(int kind | stmts(stmt, kind, _) | kind = 2 or kind = 11 or kind = 35) +} + +from Stmt child, int index, int index_new, Element parent +where + stmtparents(child, index, parent) and + if isStmtWithInitializer(parent) then index_new = index + 1 else index_new = index +select child, index_new, parent diff --git a/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/upgrade.properties b/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/upgrade.properties new file mode 100644 index 00000000000..46b0525f473 --- /dev/null +++ b/cpp/ql/lib/upgrades/e9a518baf14f4322ac243578a8e1391386ff030f/upgrade.properties @@ -0,0 +1,4 @@ +description: Support C++17 if and switch initializers +compatibility: partial +exprparents.rel: run exprparents.qlo +stmtparents.rel: run stmtparents.qlo diff --git a/cpp/ql/src/Best Practices/Unused Entities/UnusedLocals.ql b/cpp/ql/src/Best Practices/Unused Entities/UnusedLocals.ql index 851d59f680f..cbb143dcebc 100644 --- a/cpp/ql/src/Best Practices/Unused Entities/UnusedLocals.ql +++ b/cpp/ql/src/Best Practices/Unused Entities/UnusedLocals.ql @@ -57,6 +57,5 @@ where not declarationHasSideEffects(v) and not exists(AsmStmt s | f = s.getEnclosingFunction()) and not v.getAnAttribute().getName() = "unused" and - not any(ErrorExpr e).getEnclosingFunction() = f and // unextracted expr may use `v` - not any(ConditionDeclExpr cde).getEnclosingFunction() = f // this case can be removed when the `if (a = b; a)` and `switch (a = b; a)` test cases don't depend on this exclusion + not any(ErrorExpr e).getEnclosingFunction() = f // unextracted expr may use `v` select v, "Variable " + v.getName() + " is not used" diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index b2124d444b1..50408aea104 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,24 @@ +## 0.1.2 + +### Minor Analysis Improvements + +* The "XML external entity expansion" (`cpp/external-entity-expansion`) query has been extended to support a broader selection of XML libraries and interfaces. + +## 0.1.1 + +### New Queries + +* An new query `cpp/external-entity-expansion` has been added. The query detects XML objects that are vulnerable to external entity expansion (XXE) attacks. + +## 0.1.0 + +### Minor Analysis Improvements + +* The `cpp/cleartext-transmission` query now recognizes additional sources, for sensitive private data such as e-mail addresses and credit card numbers. +* The `cpp/unused-local-variable` no longer ignores functions that include lambda expressions capturing trivially copyable objects. +* The `cpp/command-line-injection` query now takes into account calling contexts across string concatenations. This removes false positives due to mismatched calling contexts before and after string concatenations. +* A new query, "Potential exposure of sensitive system data to an unauthorized control sphere" (`cpp/potential-system-data-exposure`) has been added. This query is focused on exposure of information that is highly likely to be sensitive, whereas the similar query "Exposure of system data to an unauthorized control sphere" (`cpp/system-data-exposure`) is focused on exposure of information on a channel that is more likely to be intercepted by an attacker. + ## 0.0.13 ## 0.0.12 diff --git a/cpp/ql/src/Diagnostics/ExtractionProblems.qll b/cpp/ql/src/Diagnostics/ExtractionProblems.qll index c96e2e926e8..b6dd835261d 100644 --- a/cpp/ql/src/Diagnostics/ExtractionProblems.qll +++ b/cpp/ql/src/Diagnostics/ExtractionProblems.qll @@ -57,10 +57,10 @@ class ExtractionProblem extends TExtractionProblem { /** Gets the problem message for this problem. */ string getProblemMessage() { none() } - /** Gets the file this problem occured in. */ + /** Gets the file this problem occurred in. */ File getFile() { none() } - /** Gets the location this problem occured in. */ + /** Gets the location this problem occurred in. */ Location getLocation() { none() } /** Gets the SARIF severity of this problem. */ diff --git a/cpp/ql/src/Diagnostics/Internal/ExtractionErrors.qll b/cpp/ql/src/Diagnostics/Internal/ExtractionErrors.qll index 4cf6f8145f8..1ac69186a93 100644 --- a/cpp/ql/src/Diagnostics/Internal/ExtractionErrors.qll +++ b/cpp/ql/src/Diagnostics/Internal/ExtractionErrors.qll @@ -57,10 +57,10 @@ class ExtractionError extends TExtractionError { /** Gets the error message for this error. */ string getErrorMessage() { none() } - /** Gets the file this error occured in. */ + /** Gets the file this error occurred in. */ File getFile() { none() } - /** Gets the location this error occured in. */ + /** Gets the location this error occurred in. */ Location getLocation() { none() } /** Gets the SARIF severity of this error. */ diff --git a/cpp/ql/src/Likely Bugs/Conversion/LossyFunctionResultCast.ql b/cpp/ql/src/Likely Bugs/Conversion/LossyFunctionResultCast.ql index 2a8aba6a961..dee723e2686 100644 --- a/cpp/ql/src/Likely Bugs/Conversion/LossyFunctionResultCast.ql +++ b/cpp/ql/src/Likely Bugs/Conversion/LossyFunctionResultCast.ql @@ -19,7 +19,7 @@ predicate whitelist(Function f) { "nearbyintl", "rint", "rintf", "rintl", "round", "roundf", "roundl", "trunc", "truncf", "truncl" ] or - f.getName().matches("__builtin_%") + f.getName().matches("\\_\\_builtin\\_%") } predicate whitelistPow(FunctionCall fc) { diff --git a/cpp/ql/src/Likely Bugs/Leap Year/Adding365DaysPerYear.ql b/cpp/ql/src/Likely Bugs/Leap Year/Adding365DaysPerYear.ql index 7171185a11c..31a8b660964 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/Adding365DaysPerYear.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/Adding365DaysPerYear.ql @@ -13,7 +13,6 @@ import cpp import LeapYear -import semmle.code.cpp.dataflow.DataFlow from Expr source, Expr sink, PossibleYearArithmeticOperationCheckConfiguration config where config.hasFlow(DataFlow::exprNode(source), DataFlow::exprNode(sink)) diff --git a/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.ql b/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.ql index d6d0a55d148..0d8aa227d22 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.ql @@ -10,7 +10,6 @@ import cpp import NtohlArrayNoBound -import semmle.code.cpp.dataflow.DataFlow from NetworkToBufferSizeConfiguration bufConfig, DataFlow::Node source, DataFlow::Node sink where bufConfig.hasFlow(source, sink) diff --git a/cpp/ql/src/Likely Bugs/Memory Management/PotentialBufferOverflow.ql b/cpp/ql/src/Likely Bugs/Memory Management/PotentialBufferOverflow.ql index 23cf7e8364b..40ed53609e8 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/PotentialBufferOverflow.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/PotentialBufferOverflow.ql @@ -13,7 +13,7 @@ * @deprecated This query is deprecated, use * Potentially overrunning write (`cpp/overrunning-write`) and * Potentially overrunning write with float to string conversion - * (`cpp/overrunning-write-with-float) instead. + * (`cpp/overrunning-write-with-float`) instead. */ import cpp diff --git a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql index dc5a0848296..c72e25f61df 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql @@ -14,9 +14,6 @@ */ import cpp -// We don't actually use the global value numbering library in this query, but without it we end up -// recomputing the IR. -private import semmle.code.cpp.valuenumbering.GlobalValueNumbering import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.dataflow.MustFlow import PathGraph diff --git a/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql b/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql index 8e41b414794..cb495f939fb 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql @@ -2,7 +2,7 @@ * @name Suspicious call to memset * @description Use of memset where the size argument is computed as the size of * some non-struct type. When initializing a buffer, you should specify - * its size as * to ensure + * its size as ` * ` to ensure * portability. * @kind problem * @id cpp/suspicious-call-to-memset diff --git a/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql b/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql index 32a97a4c8d3..7f1a007ac0c 100644 --- a/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql +++ b/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql @@ -15,9 +15,6 @@ */ import cpp -// We don't actually use the global value numbering library in this query, but without it we end up -// recomputing the IR. -import semmle.code.cpp.valuenumbering.GlobalValueNumbering import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.dataflow.MustFlow import PathGraph diff --git a/cpp/ql/src/Security/CWE/CWE-120/OverrunWrite.ql b/cpp/ql/src/Security/CWE/CWE-120/OverrunWrite.ql index e60f8d8b452..438e87a501a 100644 --- a/cpp/ql/src/Security/CWE/CWE-120/OverrunWrite.ql +++ b/cpp/ql/src/Security/CWE/CWE-120/OverrunWrite.ql @@ -15,7 +15,6 @@ */ import semmle.code.cpp.security.BufferWrite -import semmle.code.cpp.commons.Alloc /* * See CWE-120/UnboundedWrite.ql for a summary of CWE-120 alert cases. diff --git a/cpp/ql/src/Security/CWE/CWE-120/VeryLikelyOverrunWrite.ql b/cpp/ql/src/Security/CWE/CWE-120/VeryLikelyOverrunWrite.ql index 352314f7f13..bf2cf765b59 100644 --- a/cpp/ql/src/Security/CWE/CWE-120/VeryLikelyOverrunWrite.ql +++ b/cpp/ql/src/Security/CWE/CWE-120/VeryLikelyOverrunWrite.ql @@ -15,7 +15,6 @@ */ import semmle.code.cpp.security.BufferWrite -import semmle.code.cpp.commons.Alloc /* * See CWE-120/UnboundedWrite.ql for a summary of CWE-120 alert cases. diff --git a/cpp/ql/src/Security/CWE/CWE-611/Libxml2.qll b/cpp/ql/src/Security/CWE/CWE-611/Libxml2.qll new file mode 100644 index 00000000000..c20849fcd9e --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-611/Libxml2.qll @@ -0,0 +1,78 @@ +/** + * Models the libxml2 XML library. + */ + +import cpp +import XML +import semmle.code.cpp.valuenumbering.GlobalValueNumbering + +/** + * A call to a `libxml2` function that parses XML. + */ +class Libxml2ParseCall extends FunctionCall { + int optionsArg; + + Libxml2ParseCall() { + exists(string fname | this.getTarget().getName() = fname | + fname = "xmlCtxtUseOptions" and optionsArg = 1 + or + fname = "xmlReadFile" and optionsArg = 2 + or + fname = ["xmlCtxtReadFile", "xmlParseInNodeContext", "xmlReadDoc", "xmlReadFd"] and + optionsArg = 3 + or + fname = ["xmlCtxtReadDoc", "xmlCtxtReadFd", "xmlReadMemory"] and optionsArg = 4 + or + fname = ["xmlCtxtReadMemory", "xmlReadIO"] and optionsArg = 5 + or + fname = "xmlCtxtReadIO" and optionsArg = 6 + ) + } + + /** + * Gets the argument that specifies `xmlParserOption`s. + */ + Expr getOptions() { result = this.getArgument(optionsArg) } +} + +/** + * An `xmlParserOption` for `libxml2` that is considered unsafe. + */ +class Libxml2BadOption extends EnumConstant { + Libxml2BadOption() { this.getName() = ["XML_PARSE_NOENT", "XML_PARSE_DTDLOAD"] } +} + +/** + * The libxml2 XML library. + */ +class LibXml2Library extends XmlLibrary { + LibXml2Library() { this = "LibXml2Library" } + + override predicate configurationSource(DataFlow::Node node, string flowstate) { + // source is an `options` argument on a libxml2 parse call that specifies + // at least one unsafe option. + // + // note: we don't need to track an XML object for libxml2, so we don't + // really need data flow. Nevertheless we jam it into this configuration, + // with matching sources and sinks. This allows results to be presented by + // the same query, in a consistent way as other results with flow paths. + exists(Libxml2ParseCall call, Expr options | + options = call.getOptions() and + node.asExpr() = options and + flowstate = "libxml2" and + exists(Libxml2BadOption opt | + globalValueNumber(options).getAnExpr().getValue().toInt().bitAnd(opt.getValue().toInt()) != + 0 + ) + ) + } + + override predicate configurationSink(DataFlow::Node node, string flowstate) { + // sink is the `options` argument on a `libxml2` parse call. + exists(Libxml2ParseCall call, Expr options | + options = call.getOptions() and + node.asExpr() = options and + flowstate = "libxml2" + ) + } +} diff --git a/cpp/ql/src/Security/CWE/CWE-611/XML.qll b/cpp/ql/src/Security/CWE/CWE-611/XML.qll new file mode 100644 index 00000000000..5d071ed7654 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-611/XML.qll @@ -0,0 +1,55 @@ +/** + * Provides a abstract classes for modeling XML libraries. This design is + * currently specialized for the purposes of the XXE query. + */ + +import cpp +import semmle.code.cpp.ir.dataflow.DataFlow +import Xerces +import Libxml2 + +/** + * A flow state representing a possible configuration of an XML object. + */ +abstract class XxeFlowState extends DataFlow::FlowState { + bindingset[this] + XxeFlowState() { any() } // required characteristic predicate +} + +/** + * An XML library or interface. + */ +abstract class XmlLibrary extends string { + bindingset[this] + XmlLibrary() { any() } // required characteristic predicate + + /** + * Holds if `node` is the source node for a potentially unsafe configuration + * object for this XML library, along with `flowstate` representing its + * initial state. + */ + abstract predicate configurationSource(DataFlow::Node node, string flowstate); + + /** + * Holds if `node` is the sink node where an unsafe configuration object is + * used to interpret XML. + */ + abstract predicate configurationSink(DataFlow::Node node, string flowstate); +} + +/** + * An `Expr` that changes the configuration of an XML object, transforming the + * `XxeFlowState` that flows through it. + */ +abstract class XxeFlowStateTransformer extends Expr { + /** + * Gets the flow state that `flowstate` is transformed into. + * + * Due to limitations of the implementation the transformation defined by this + * predicate must be idempotent, that is, for any input `x` it must be that: + * ``` + * transform(transform(x)) = transform(x) + * ``` + */ + abstract XxeFlowState transform(XxeFlowState flowstate); +} diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXE.qhelp b/cpp/ql/src/Security/CWE/CWE-611/XXE.qhelp new file mode 100644 index 00000000000..513f444ed0d --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-611/XXE.qhelp @@ -0,0 +1,57 @@ + + + + +

+Parsing untrusted XML files with a weakly configured XML parser may lead to an +XML external entity (XXE) attack. This type of attack uses external entity references +to access arbitrary files on a system, carry out denial-of-service (DoS) attacks, or server-side +request forgery. Even when the result of parsing is not returned to the user, DoS attacks are still possible +and out-of-band data retrieval techniques may allow attackers to steal sensitive data. +

+
+ + +

+The easiest way to prevent XXE attacks is to disable external entity handling when +parsing untrusted data. How this is done depends on the library being used. Note that some +libraries, such as recent versions of libxml, disable entity expansion by default, +so unless you have explicitly enabled entity expansion, no further action needs to be taken. +

+
+ + +

+The following example uses the Xerces-C++ XML parser to parse a string data. +If that string is from an untrusted source, this code may be vulnerable to an XXE attack, since +the parser is constructed in its default state with setDisableDefaultEntityResolution +set to false: +

+ + +

+To guard against XXE attacks, the setDisableDefaultEntityResolution option should be +set to true. +

+ +
+ + +
  • +OWASP: +XML External Entity (XXE) Processing. +
  • +
  • +OWASP: +XML External Entity Prevention Cheat Sheet. +
  • +
  • +Timothy Morgen: +XML Schema, DTD, and Entity Attacks. +
  • +
  • +Timur Yunusov, Alexey Osipov: +XML Out-Of-Band Data Retrieval. +
  • +
    +
    diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql new file mode 100644 index 00000000000..da17913dec5 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql @@ -0,0 +1,51 @@ +/** + * @name XML external entity expansion + * @description Parsing user-controlled XML documents and allowing expansion of + * external entity references may lead to disclosure of + * confidential data or denial of service. + * @kind path-problem + * @id cpp/external-entity-expansion + * @problem.severity warning + * @security-severity 9.1 + * @precision high + * @tags security + * external/cwe/cwe-611 + */ + +import cpp +import XML +import DataFlow::PathGraph + +/** + * A configuration for tracking XML objects and their states. + */ +class XXEConfiguration extends DataFlow::Configuration { + XXEConfiguration() { this = "XXEConfiguration" } + + override predicate isSource(DataFlow::Node node, string flowstate) { + any(XmlLibrary l).configurationSource(node, flowstate) + } + + override predicate isSink(DataFlow::Node node, string flowstate) { + any(XmlLibrary l).configurationSink(node, flowstate) + } + + override predicate isAdditionalFlowStep( + DataFlow::Node node1, string state1, DataFlow::Node node2, string state2 + ) { + // create additional flow steps for `XxeFlowStateTransformer`s + state2 = node2.asConvertedExpr().(XxeFlowStateTransformer).transform(state1) and + DataFlow::simpleLocalFlowStep(node1, node2) + } + + override predicate isBarrier(DataFlow::Node node, string flowstate) { + // when the flowstate is transformed at a call node, block the original + // flowstate value. + node.asConvertedExpr().(XxeFlowStateTransformer).transform(flowstate) != flowstate + } +} + +from XXEConfiguration conf, DataFlow::PathNode source, DataFlow::PathNode sink +where conf.hasFlowPath(source, sink) +select sink, source, sink, + "This $@ is not configured to prevent an XML external entity (XXE) attack.", source, "XML parser" diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXEBad.cpp b/cpp/ql/src/Security/CWE/CWE-611/XXEBad.cpp new file mode 100644 index 00000000000..9cfbbc49f05 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-611/XXEBad.cpp @@ -0,0 +1,4 @@ + +XercesDOMParser *parser = new XercesDOMParser(); + +parser->parse(data); // BAD (parser is not correctly configured, may expand external entity references) diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXEGood.cpp b/cpp/ql/src/Security/CWE/CWE-611/XXEGood.cpp new file mode 100644 index 00000000000..731d818aba9 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-611/XXEGood.cpp @@ -0,0 +1,5 @@ + +XercesDOMParser *parser = new XercesDOMParser(); + +parser->setDisableDefaultEntityResolution(true); +parser->parse(data); diff --git a/cpp/ql/src/Security/CWE/CWE-611/Xerces.qll b/cpp/ql/src/Security/CWE/CWE-611/Xerces.qll new file mode 100644 index 00000000000..7b971f00293 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-611/Xerces.qll @@ -0,0 +1,376 @@ +/** + * Models the Xerces XML library. + */ + +import cpp +import XML +import semmle.code.cpp.valuenumbering.GlobalValueNumbering +import semmle.code.cpp.ir.IR + +/** + * Gets a valid flow state for `AbstractDOMParser` or `SAXParser` flow. + * + * These flow states take the form `Xerces-A-B`, where: + * - A is 1 if `setDisableDefaultEntityResolution` is `true`, 0 otherwise. + * - B is 1 if `setCreateEntityReferenceNodes` is `true`, 0 otherwise. + */ +predicate encodeXercesFlowState( + string flowstate, int disabledDefaultEntityResolution, int createEntityReferenceNodes +) { + flowstate = "Xerces-0-0" and + disabledDefaultEntityResolution = 0 and + createEntityReferenceNodes = 0 + or + flowstate = "Xerces-0-1" and + disabledDefaultEntityResolution = 0 and + createEntityReferenceNodes = 1 + or + flowstate = "Xerces-1-0" and + disabledDefaultEntityResolution = 1 and + createEntityReferenceNodes = 0 + or + flowstate = "Xerces-1-1" and + disabledDefaultEntityResolution = 1 and + createEntityReferenceNodes = 1 +} + +/** + * A flow state representing the configuration of an `AbstractDOMParser` or + * `SAXParser` object. + */ +class XercesFlowState extends XxeFlowState { + XercesFlowState() { encodeXercesFlowState(this, _, _) } +} + +/** + * The `AbstractDOMParser` class. + */ +class AbstractDomParserClass extends Class { + AbstractDomParserClass() { this.hasName("AbstractDOMParser") } +} + +/** + * The `XercesDOMParser` class. + */ +class XercesDomParserClass extends Class { + XercesDomParserClass() { this.hasName("XercesDOMParser") } +} + +/** + * The `XercesDOMParser` interface for the Xerces XML library. + */ +class XercesDomParserLibrary extends XmlLibrary { + XercesDomParserLibrary() { this = "XercesDomParserLibrary" } + + override predicate configurationSource(DataFlow::Node node, string flowstate) { + // source is the write on `this` of a call to the `XercesDOMParser` + // constructor. + exists(CallInstruction call | + call.getStaticCallTarget() = any(XercesDomParserClass c).getAConstructor() and + node.asInstruction().(WriteSideEffectInstruction).getDestinationAddress() = + call.getThisArgument() and + encodeXercesFlowState(flowstate, 0, 1) // default configuration + ) + } + + override predicate configurationSink(DataFlow::Node node, string flowstate) { + // sink is the read of the qualifier of a call to `AbstractDOMParser.parse`. + exists(Call call | + call.getTarget().getClassAndName("parse") instanceof AbstractDomParserClass and + call.getQualifier() = node.asConvertedExpr() + ) and + flowstate instanceof XercesFlowState and + not encodeXercesFlowState(flowstate, 1, 1) // safe configuration + } +} + +/** + * The `DOMLSParser` class. + */ +class DomLSParserClass extends Class { + DomLSParserClass() { this.hasName("DOMLSParser") } +} + +/** + * The `createLSParser` function that returns a newly created `DOMLSParser` + * object. + */ +class CreateLSParser extends Function { + CreateLSParser() { + this.hasName("createLSParser") and + this.getUnspecifiedType().(PointerType).getBaseType() instanceof DomLSParserClass // returns a `DOMLSParser *`. + } +} + +/** + * The createLSParser interface for the Xerces XML library. + */ +class CreateLSParserLibrary extends XmlLibrary { + CreateLSParserLibrary() { this = "CreateLSParserLibrary" } + + override predicate configurationSource(DataFlow::Node node, string flowstate) { + // source is the result of a call to `createLSParser`. + exists(Call call | + call.getTarget() instanceof CreateLSParser and + call = node.asExpr() and + encodeXercesFlowState(flowstate, 0, 1) // default configuration + ) + } + + override predicate configurationSink(DataFlow::Node node, string flowstate) { + // sink is the read of the qualifier of a call to `DOMLSParserClass.parse`. + exists(Call call | + call.getTarget().getClassAndName("parse") instanceof DomLSParserClass and + call.getQualifier() = node.asConvertedExpr() + ) and + flowstate instanceof XercesFlowState and + not encodeXercesFlowState(flowstate, 1, 1) // safe configuration + } +} + +/** + * The `SAXParser` class. + */ +class SaxParserClass extends Class { + SaxParserClass() { this.hasName("SAXParser") } +} + +/** + * The `SAX2XMLReader` class. + */ +class Sax2XmlReader extends Class { + Sax2XmlReader() { this.hasName("SAX2XMLReader") } +} + +/** + * The SAXParser interface for the Xerces XML library. + */ +class SaxParserLibrary extends XmlLibrary { + SaxParserLibrary() { this = "SaxParserLibrary" } + + override predicate configurationSource(DataFlow::Node node, string flowstate) { + // source is the write on `this` of a call to the `SAXParser` + // constructor. + exists(CallInstruction call | + call.getStaticCallTarget() = any(SaxParserClass c).getAConstructor() and + node.asInstruction().(WriteSideEffectInstruction).getDestinationAddress() = + call.getThisArgument() and + encodeXercesFlowState(flowstate, 0, 1) // default configuration + ) + } + + override predicate configurationSink(DataFlow::Node node, string flowstate) { + // sink is the read of the qualifier of a call to `SAXParser.parse`. + exists(Call call | + call.getTarget().getClassAndName("parse") instanceof SaxParserClass and + call.getQualifier() = node.asConvertedExpr() + ) and + flowstate instanceof XercesFlowState and + not encodeXercesFlowState(flowstate, 1, 1) // safe configuration + } +} + +/** + * The `createXMLReader` function that returns a newly created `SAX2XMLReader` + * object. + */ +class CreateXmlReader extends Function { + CreateXmlReader() { + this.hasName("createXMLReader") and + this.getUnspecifiedType().(PointerType).getBaseType() instanceof Sax2XmlReader // returns a `SAX2XMLReader *`. + } +} + +/** + * The SAX2XMLReader interface for the Xerces XML library. + */ +class Sax2XmlReaderLibrary extends XmlLibrary { + Sax2XmlReaderLibrary() { this = "Sax2XmlReaderLibrary" } + + override predicate configurationSource(DataFlow::Node node, string flowstate) { + // source is the result of a call to `createXMLReader`. + exists(Call call | + call.getTarget() instanceof CreateXmlReader and + call = node.asExpr() and + encodeXercesFlowState(flowstate, 0, 1) // default configuration + ) + } + + override predicate configurationSink(DataFlow::Node node, string flowstate) { + // sink is the read of the qualifier of a call to `SAX2XMLReader.parse`. + exists(Call call | + call.getTarget().getClassAndName("parse") instanceof Sax2XmlReader and + call.getQualifier() = node.asConvertedExpr() + ) and + flowstate instanceof XercesFlowState and + not encodeXercesFlowState(flowstate, 1, 1) // safe configuration + } +} + +/** + * A flow state transformer for a call to + * `AbstractDOMParser.setDisableDefaultEntityResolution` or + * `SAXParser.setDisableDefaultEntityResolution`. Transforms the flow + * state through the qualifier according to the setting in the parameter. + */ +class DisableDefaultEntityResolutionTransformer extends XxeFlowStateTransformer { + Expr newValue; + + DisableDefaultEntityResolutionTransformer() { + exists(Call call, Function f | + call.getTarget() = f and + ( + f.getDeclaringType() instanceof AbstractDomParserClass or + f.getDeclaringType() instanceof SaxParserClass + ) and + f.hasName("setDisableDefaultEntityResolution") and + this = call.getQualifier() and + newValue = call.getArgument(0) + ) + } + + final override XxeFlowState transform(XxeFlowState flowstate) { + exists(int createEntityReferenceNodes | + encodeXercesFlowState(flowstate, _, createEntityReferenceNodes) and + ( + globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // true + encodeXercesFlowState(result, 1, createEntityReferenceNodes) + or + not globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // false or unknown + encodeXercesFlowState(result, 0, createEntityReferenceNodes) + ) + ) + } +} + +/** + * A flow state transformer for a call to + * `AbstractDOMParser.setCreateEntityReferenceNodes`. Transforms the flow + * state through the qualifier according to the setting in the parameter. + */ +class CreateEntityReferenceNodesTransformer extends XxeFlowStateTransformer { + Expr newValue; + + CreateEntityReferenceNodesTransformer() { + exists(Call call, Function f | + call.getTarget() = f and + f.getClassAndName("setCreateEntityReferenceNodes") instanceof AbstractDomParserClass and + this = call.getQualifier() and + newValue = call.getArgument(0) + ) + } + + final override XxeFlowState transform(XxeFlowState flowstate) { + exists(int disabledDefaultEntityResolution | + encodeXercesFlowState(flowstate, disabledDefaultEntityResolution, _) and + ( + globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // true + encodeXercesFlowState(result, disabledDefaultEntityResolution, 1) + or + not globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // false or unknown + encodeXercesFlowState(result, disabledDefaultEntityResolution, 0) + ) + ) + } +} + +/** + * The `XMLUni.fgXercesDisableDefaultEntityResolution` constant. + */ +class FeatureDisableDefaultEntityResolution extends Variable { + FeatureDisableDefaultEntityResolution() { + this.getName() = "fgXercesDisableDefaultEntityResolution" and + this.getDeclaringType().getName() = "XMLUni" + } +} + +/** + * A flow state transformer for a call to `SAX2XMLReader.setFeature` + * specifying the feature `XMLUni::fgXercesDisableDefaultEntityResolution`. + * Transforms the flow state through the qualifier according to this setting. + */ +class SetFeatureTransformer extends XxeFlowStateTransformer { + Expr newValue; + + SetFeatureTransformer() { + exists(Call call, Function f | + call.getTarget() = f and + f.getClassAndName("setFeature") instanceof Sax2XmlReader and + this = call.getQualifier() and + globalValueNumber(call.getArgument(0)).getAnExpr().(VariableAccess).getTarget() instanceof + FeatureDisableDefaultEntityResolution and + newValue = call.getArgument(1) + ) + } + + final override XxeFlowState transform(XxeFlowState flowstate) { + exists(int createEntityReferenceNodes | + encodeXercesFlowState(flowstate, _, createEntityReferenceNodes) and + ( + globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // true + encodeXercesFlowState(result, 1, createEntityReferenceNodes) + or + not globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // false or unknown + encodeXercesFlowState(result, 0, createEntityReferenceNodes) + ) + ) + } +} + +/** + * The `DOMLSParser.getDomConfig` function. + */ +class GetDomConfig extends Function { + GetDomConfig() { this.getClassAndName("getDomConfig") instanceof DomLSParserClass } +} + +/** + * The `DOMConfiguration.setParameter` function. + */ +class DomConfigurationSetParameter extends Function { + DomConfigurationSetParameter() { + this.getClassAndName("setParameter").getName() = "DOMConfiguration" + } +} + +/** + * A flow state transformer for a call to `DOMConfiguration.setParameter` + * specifying the feature `XMLUni::fgXercesDisableDefaultEntityResolution`. + * This is a slightly more complex transformer because the qualifier is a + * `DOMConfiguration` pointer returned by `DOMLSParser.getDomConfig` - and it + * is *that* qualifier we want to transform the flow state of. + */ +class DomConfigurationSetParameterTransformer extends XxeFlowStateTransformer { + Expr newValue; + + DomConfigurationSetParameterTransformer() { + exists(FunctionCall getDomConfigCall, FunctionCall setParameterCall | + // this is the qualifier of a call to `DOMLSParser.getDomConfig`. + getDomConfigCall.getTarget() instanceof GetDomConfig and + this = getDomConfigCall.getQualifier() and + // `setParameterCall` is a call to `setParameter` on the return value of + // the same call to `DOMLSParser.getDomConfig`. + setParameterCall.getTarget() instanceof DomConfigurationSetParameter and + globalValueNumber(setParameterCall.getQualifier()).getAnExpr() = getDomConfigCall and + // the parameter being set is + // `XMLUni::fgXercesDisableDefaultEntityResolution`. + globalValueNumber(setParameterCall.getArgument(0)).getAnExpr().(VariableAccess).getTarget() + instanceof FeatureDisableDefaultEntityResolution and + // the value being set is `newValue`. + newValue = setParameterCall.getArgument(1) + ) + } + + final override XxeFlowState transform(XxeFlowState flowstate) { + exists(int createEntityReferenceNodes | + encodeXercesFlowState(flowstate, _, createEntityReferenceNodes) and + ( + globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // true + encodeXercesFlowState(result, 1, createEntityReferenceNodes) + or + not globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // false or unknown + encodeXercesFlowState(result, 0, createEntityReferenceNodes) + ) + ) + } +} diff --git a/cpp/ql/src/change-notes/2022-03-03-potential-system-data-exposure.md b/cpp/ql/src/change-notes/2022-03-03-potential-system-data-exposure.md deleted file mode 100644 index 475260afead..00000000000 --- a/cpp/ql/src/change-notes/2022-03-03-potential-system-data-exposure.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* A new query, "Potential exposure of sensitive system data to an unauthorized control sphere" (`cpp/potential-system-data-exposure`) has been added. This query is focused on exposure of information that is highly likely to be sensitive, whereas the similar query "Exposure of system data to an unauthorized control sphere" (`cpp/system-data-exposure`) is focused on exposure of information on a channel that is more likely to be intercepted by an attacker. diff --git a/cpp/ql/src/change-notes/2022-03-21-command-line-injection-with-flow-states.md b/cpp/ql/src/change-notes/2022-03-21-command-line-injection-with-flow-states.md deleted file mode 100644 index 452c01dcbb2..00000000000 --- a/cpp/ql/src/change-notes/2022-03-21-command-line-injection-with-flow-states.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `cpp/command-line-injection` query now takes into account calling contexts across string concatenations. This removes false positives due to mismatched calling contexts before and after string concatenations. diff --git a/cpp/ql/src/change-notes/2022-03-28-cleartext-transmission.md b/cpp/ql/src/change-notes/2022-03-28-cleartext-transmission.md deleted file mode 100644 index 4f75b43f295..00000000000 --- a/cpp/ql/src/change-notes/2022-03-28-cleartext-transmission.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `cpp/cleartext-transmission` query now recognizes additional sources, for sensitive private data such as e-mail addresses and credit card numbers. diff --git a/cpp/ql/src/change-notes/2022-03-25-unused-lambda-capture.md b/cpp/ql/src/change-notes/2022-04-12-unused-local-variable.md similarity index 57% rename from cpp/ql/src/change-notes/2022-03-25-unused-lambda-capture.md rename to cpp/ql/src/change-notes/2022-04-12-unused-local-variable.md index 056cba89670..d4120401e1a 100644 --- a/cpp/ql/src/change-notes/2022-03-25-unused-lambda-capture.md +++ b/cpp/ql/src/change-notes/2022-04-12-unused-local-variable.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* The `cpp/unused-local-variable` no longer ignores functions that include lambda expressions capturing trivially copyable objects. +* The `cpp/unused-local-variable` no longer ignores functions that include `if` and `switch` statements with C++17-style initializers. diff --git a/cpp/ql/src/change-notes/2022-05-12-external-entity-expansion.md b/cpp/ql/src/change-notes/2022-05-12-external-entity-expansion.md new file mode 100644 index 00000000000..7d2f38c5040 --- /dev/null +++ b/cpp/ql/src/change-notes/2022-05-12-external-entity-expansion.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The "XML external entity expansion" (`cpp/external-entity-expansion`) query precision has been increased to `high`. diff --git a/cpp/ql/src/change-notes/released/0.1.0.md b/cpp/ql/src/change-notes/released/0.1.0.md new file mode 100644 index 00000000000..0a2431741da --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.1.0.md @@ -0,0 +1,8 @@ +## 0.1.0 + +### Minor Analysis Improvements + +* The `cpp/cleartext-transmission` query now recognizes additional sources, for sensitive private data such as e-mail addresses and credit card numbers. +* The `cpp/unused-local-variable` no longer ignores functions that include lambda expressions capturing trivially copyable objects. +* The `cpp/command-line-injection` query now takes into account calling contexts across string concatenations. This removes false positives due to mismatched calling contexts before and after string concatenations. +* A new query, "Potential exposure of sensitive system data to an unauthorized control sphere" (`cpp/potential-system-data-exposure`) has been added. This query is focused on exposure of information that is highly likely to be sensitive, whereas the similar query "Exposure of system data to an unauthorized control sphere" (`cpp/system-data-exposure`) is focused on exposure of information on a channel that is more likely to be intercepted by an attacker. diff --git a/cpp/ql/src/change-notes/released/0.1.1.md b/cpp/ql/src/change-notes/released/0.1.1.md new file mode 100644 index 00000000000..56f7297cf67 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.1.1.md @@ -0,0 +1,5 @@ +## 0.1.1 + +### New Queries + +* An new query `cpp/external-entity-expansion` has been added. The query detects XML objects that are vulnerable to external entity expansion (XXE) attacks. diff --git a/cpp/ql/src/change-notes/released/0.1.2.md b/cpp/ql/src/change-notes/released/0.1.2.md new file mode 100644 index 00000000000..ca3236f5950 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.1.2.md @@ -0,0 +1,5 @@ +## 0.1.2 + +### Minor Analysis Improvements + +* The "XML external entity expansion" (`cpp/external-entity-expansion`) query has been extended to support a broader selection of XML libraries and interfaces. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 044e54e4f7e..6abd14b1ef8 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.13 +lastReleaseVersion: 0.1.2 diff --git a/cpp/ql/src/experimental/Best Practices/WrongUintAccess.cpp b/cpp/ql/src/experimental/Best Practices/WrongUintAccess.cpp new file mode 100644 index 00000000000..f0704299ffc --- /dev/null +++ b/cpp/ql/src/experimental/Best Practices/WrongUintAccess.cpp @@ -0,0 +1,7 @@ +void test() +{ + uint16_t j = 256; + char testSubject[122]; + + testSubject[j] = 12; // You can use a uint8 here +} diff --git a/cpp/ql/src/experimental/Best Practices/WrongUintAccess.qhelp b/cpp/ql/src/experimental/Best Practices/WrongUintAccess.qhelp new file mode 100644 index 00000000000..d298db04ed7 --- /dev/null +++ b/cpp/ql/src/experimental/Best Practices/WrongUintAccess.qhelp @@ -0,0 +1,18 @@ + + + + +

    Find access to an array with a Uint16 when the array has a size lower than 256.

    +
    + + +

    Use a int with a lower bit size instead. For instance in this example use a 8 bit int.

    +
    + + + + + +
    diff --git a/cpp/ql/src/experimental/Best Practices/WrongUintAccess.ql b/cpp/ql/src/experimental/Best Practices/WrongUintAccess.ql new file mode 100644 index 00000000000..ee1cca9b6e9 --- /dev/null +++ b/cpp/ql/src/experimental/Best Practices/WrongUintAccess.ql @@ -0,0 +1,25 @@ +/** + * @id cpp/wrong-uint-access + * @name Wrong Uint + * @descripion Acess an array of size lower than 256 with a uint16. + * @kind problem + * @problem.severity recommendation + * @tags efficiency + */ + +import cpp + +from Variable var, ArrayExpr useExpr, ArrayType defLine, VariableAccess use +where + var.getUnspecifiedType() = defLine and + use = useExpr.getArrayBase() and + var = use.getTarget() and + ( + useExpr.getArrayOffset().getType() instanceof UInt16_t or + useExpr.getArrayOffset().getType() instanceof UInt32_t or + useExpr.getArrayOffset().getType() instanceof UInt64_t + ) and + defLine.getArraySize() <= 256 +select useExpr, + "Using a " + useExpr.getArrayOffset().getType() + " to acess the array $@ of size " + + defLine.getArraySize() + ".", var, var.getName() diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-266/IncorrectPrivilegeAssignment.ql b/cpp/ql/src/experimental/Security/CWE/CWE-266/IncorrectPrivilegeAssignment.ql index 22e42d39147..5bdd5a21fe5 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-266/IncorrectPrivilegeAssignment.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-266/IncorrectPrivilegeAssignment.ql @@ -16,7 +16,6 @@ */ import cpp -import semmle.code.cpp.exprs.BitwiseOperation import semmle.code.cpp.valuenumbering.GlobalValueNumbering /** @@ -59,7 +58,7 @@ where // unfortunately cannot use numeric value here because // O_CREAT is defined differently on different OSes: // https://github.com/red/red/blob/92feb0c0d5f91e087ab35fface6906afbf99b603/runtime/definitions.reds#L477-L491 // this may introduce false negatives - fctmp.getArgument(1).(BitwiseOrExpr).getAChild*().getValueText().matches("O_CREAT") or + fctmp.getArgument(1).(BitwiseOrExpr).getAChild*().getValueText() = "O_CREAT" or fctmp.getArgument(1).getValueText().matches("%O_CREAT%") ) and fctmp.getNumberOfArguments() = 2 and diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorization.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorization.qhelp new file mode 100644 index 00000000000..debf30dfa65 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorization.qhelp @@ -0,0 +1,49 @@ + + + +

    + Using only a call to + pam_authenticate + to check the validity of a login can lead to authorization bypass vulnerabilities. +

    +

    + A + pam_authenticate + only verifies the credentials of a user. It does not check if a user has an appropriate authorization to actually login. This means a user with a expired login or a password can still access the system. +

    + +
    + + +

    + A call to + pam_authenticate + should be followed by a call to + pam_acct_mgmt + to check if a user is allowed to login. +

    +
    + + +

    + In the following example, the code only checks the credentials of a user. Hence, in this case, a user expired with expired creds can still login. This can be verified by creating a new user account, expiring it with + chage -E0 `username` + and then trying to log in. +

    + + +

    + This can be avoided by calling + pam_acct_mgmt + call to verify access as has been done in the snippet shown below. +

    + +
    + + +
  • + Man-Page: + pam_acct_mgmt +
  • +
    +
    \ No newline at end of file diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorization.ql b/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorization.ql new file mode 100644 index 00000000000..5292a705d93 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorization.ql @@ -0,0 +1,34 @@ +/** + * @name PAM Authorization bypass + * @description Only using `pam_authenticate` call to authenticate users can lead to authorization vulnerabilities. + * @kind problem + * @problem.severity error + * @id cpp/pam-auth-bypass + * @tags security + * external/cwe/cwe-285 + */ + +import cpp +import semmle.code.cpp.dataflow.DataFlow +import semmle.code.cpp.valuenumbering.GlobalValueNumbering + +private class PamAuthCall extends FunctionCall { + PamAuthCall() { + exists(Function f | f.hasName("pam_authenticate") | f.getACallToThisFunction() = this) + } +} + +private class PamActMgmtCall extends FunctionCall { + PamActMgmtCall() { + exists(Function f | f.hasName("pam_acct_mgmt") | f.getACallToThisFunction() = this) + } +} + +from PamAuthCall pa, Expr handle +where + pa.getArgument(0) = handle and + not exists(PamActMgmtCall pac | + globalValueNumber(handle) = globalValueNumber(pac.getArgument(0)) or + DataFlow::localExprFlow(handle, pac.getArgument(0)) + ) +select pa, "This PAM authentication call may be lead to an authorization bypass." diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorizationBad.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorizationBad.cpp new file mode 100644 index 00000000000..cde024cde34 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorizationBad.cpp @@ -0,0 +1,20 @@ +bool PamAuthGood(const std::string &username_in, + const std::string &password_in, + std::string &authenticated_username) +{ + + struct pam_handle *pamh = nullptr; /* pam session handle */ + + const char *username = username_in.c_str(); + int err = pam_start("test", username, + 0, &pamh); + if (err != PAM_SUCCESS) + { + return false; + } + + err = pam_authenticate(pamh, 0); // BAD + if (err != PAM_SUCCESS) + return err; + return true; +} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorizationGood.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorizationGood.cpp new file mode 100644 index 00000000000..e4a2ce008c5 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorizationGood.cpp @@ -0,0 +1,24 @@ +bool PamAuthGood(const std::string &username_in, + const std::string &password_in, + std::string &authenticated_username) +{ + + struct pam_handle *pamh = nullptr; /* pam session handle */ + + const char *username = username_in.c_str(); + int err = pam_start("test", username, + 0, &pamh); + if (err != PAM_SUCCESS) + { + return false; + } + + err = pam_authenticate(pamh, 0); + if (err != PAM_SUCCESS) + return err; + + err = pam_acct_mgmt(pamh, 0); // GOOD + if (err != PAM_SUCCESS) + return err; + return true; +} diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp new file mode 100644 index 00000000000..ea4686fdb8c --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp @@ -0,0 +1,48 @@ +... +try { + if (checkValue) throw exception(); + bufMyData = new myData*[sizeInt]; + + } + catch (...) + { + for (size_t i = 0; i < sizeInt; i++) + { + delete[] bufMyData[i]->buffer; // BAD + delete bufMyData[i]; + } +... +try { + if (checkValue) throw exception(); + bufMyData = new myData*[sizeInt]; + + } + catch (...) + { + for (size_t i = 0; i < sizeInt; i++) + { + if(bufMyData[i]) + { + delete[] bufMyData[i]->buffer; // GOOD + delete bufMyData[i]; + } + } + +... + catch (const exception &) { + delete valData; + throw; + } + catch (...) + { + delete valData; // BAD +... + catch (const exception &) { + delete valData; + valData = NULL; + throw; + } + catch (...) + { + delete valData; // GOOD +... diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.qhelp new file mode 100644 index 00000000000..b9a2e3db331 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.qhelp @@ -0,0 +1,23 @@ + + + +

    When releasing memory in a catch block, be sure that the memory was allocated and has not already been released.

    + +
    + + +

    The following example shows erroneous and fixed ways to use exception handling.

    + + +
    + + +
  • + CERT C Coding Standard: + EXP34-C. Do not dereference null pointers. +
  • + +
    +
    diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql new file mode 100644 index 00000000000..2feca267902 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql @@ -0,0 +1,199 @@ +/** + * @name Dangerous use of exception blocks. + * @description When clearing the data in the catch block, you must be sure that the memory was allocated before the exception. + * @kind problem + * @id cpp/dangerous-use-of-exception-blocks + * @problem.severity warning + * @precision medium + * @tags correctness + * security + * external/cwe/cwe-476 + * external/cwe/cwe-415 + */ + +import cpp + +/** Holds if `vr` may be released in the `try` block associated with `cb`, or in a `catch` block prior to `cb`. */ +pragma[inline] +predicate doubleCallDelete(BlockStmt b, CatchAnyBlock cb, Variable vr) { + // Search for exceptions after freeing memory. + exists(Expr e1 | + // `e1` is a delete of `vr` + ( + e1 = vr.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(DeleteArrayExpr) or + e1 = vr.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(DeleteExpr) + ) and + e1.getEnclosingFunction() = cb.getEnclosingFunction() and + // there is no assignment `vr = 0` in the `try` block after `e1` + not exists(AssignExpr ae | + ae.getLValue().(VariableAccess).getTarget() = vr and + ae.getRValue().getValue() = "0" and + e1.getASuccessor+() = ae and + ae.getEnclosingStmt().getParentStmt*() = b + ) and + // `e2` is a `throw` (or a function call that may throw) that occurs in the `try` or `catch` block after `e1` + exists(Expr e2, ThrowExpr th | + ( + e2 = th or + e2 = th.getEnclosingFunction().getACallToThisFunction() + ) and + e2.getEnclosingStmt().getParentStmt*() = b and + e1.getASuccessor+() = e2 + ) and + e1.getEnclosingStmt().getParentStmt*() = b and + ( + // Search for a situation where there is a release in the block of `try`. + b = cb.getTryStmt().getStmt() + or + // Search for a situation when there is a higher catch block that also frees memory. + exists(b.(CatchBlock).getParameter()) + ) and + // Exclude the presence of a check in catch block. + not exists(IfStmt ifst | ifst.getEnclosingStmt().getParentStmt*() = cb.getAStmt()) + ) +} + +/** Holds if an exception can be thrown before the memory is allocated, and when the exception is handled, an attempt is made to access unallocated memory in the catch block. */ +pragma[inline] +predicate pointerDereference(CatchAnyBlock cb, Variable vr, Variable vro) { + // Search exceptions before allocating memory. + exists(Expr e0, Expr e1 | + ( + // `e0` is a `new` expression (or equivalent function call) assigned to `vro` + exists(AssignExpr ase | + ase = vro.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr() and + ( + e0 = ase.getRValue().(NewOrNewArrayExpr) or + e0 = ase.getRValue().(NewOrNewArrayExpr).getEnclosingFunction().getACallToThisFunction() + ) and + vro = ase.getLValue().(VariableAccess).getTarget() + ) + or + // `e0` is a `new` expression (or equivalent function call) assigned to the array element `vro` + exists(AssignExpr ase | + ase = vro.getAnAccess().(Qualifier).getEnclosingStmt().(ExprStmt).getExpr() and + ( + e0 = ase.getRValue().(NewOrNewArrayExpr) or + e0 = ase.getRValue().(NewOrNewArrayExpr).getEnclosingFunction().getACallToThisFunction() + ) and + not ase.getLValue() instanceof VariableAccess and + vro = ase.getLValue().getAPredecessor().(VariableAccess).getTarget() + ) + ) and + // `e1` is a `new` expression (or equivalent function call) assigned to `vr` + exists(AssignExpr ase | + ase = vr.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr() and + ( + e1 = ase.getRValue().(NewOrNewArrayExpr) or + e1 = ase.getRValue().(NewOrNewArrayExpr).getEnclosingFunction().getACallToThisFunction() + ) and + vr = ase.getLValue().(VariableAccess).getTarget() + ) and + e0.getASuccessor*() = e1 and + e0.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + e1.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + // `e2` is a `throw` (or a function call that may throw) that occurs in the `try` block before `e0` + exists(Expr e2, ThrowExpr th | + ( + e2 = th or + e2 = th.getEnclosingFunction().getACallToThisFunction() + ) and + e2.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + e2.getASuccessor+() = e0 + ) + ) and + // We exclude checking the value of a variable or its parent in the catch block. + not exists(IfStmt ifst | + ifst.getEnclosingStmt().getParentStmt*() = cb.getAStmt() and + ( + ifst.getCondition().getAChild*().(VariableAccess).getTarget() = vr or + ifst.getCondition().getAChild*().(VariableAccess).getTarget() = vro + ) + ) +} + +/** Holds if `vro` may be released in the `catch`. */ +pragma[inline] +predicate newThrowDelete(CatchAnyBlock cb, Variable vro) { + exists(Expr e0, AssignExpr ase, NewOrNewArrayExpr nae | + ase = vro.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr() and + nae = ase.getRValue() and + not nae.getAChild*().toString() = "nothrow" and + ( + e0 = nae or + e0 = nae.getEnclosingFunction().getACallToThisFunction() + ) and + vro = ase.getLValue().(VariableAccess).getTarget() and + e0.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + not exists(AssignExpr ase1 | + vro = ase1.getLValue().(VariableAccess).getTarget() and + ase1.getRValue().getValue() = "0" and + ase1.getASuccessor*() = e0 + ) + ) and + not exists(Initializer it | + vro.getInitializer() = it and + it.getExpr().getValue() = "0" + ) and + not exists(ConstructorFieldInit ci | vro = ci.getTarget()) +} + +from CatchAnyBlock cb, string msg +where + exists(Variable vr, Variable vro, Expr exp | + exp.getEnclosingStmt().getParentStmt*() = cb and + exists(VariableAccess va | + ( + ( + va = exp.(DeleteArrayExpr).getExpr().getAPredecessor+().(Qualifier) or + va = exp.(DeleteArrayExpr).getExpr().getAPredecessor+() + ) and + vr = exp.(DeleteArrayExpr).getExpr().(VariableAccess).getTarget() + or + ( + va = exp.(DeleteExpr).getExpr().getAPredecessor+().(Qualifier) or + va = exp.(DeleteExpr).getExpr().getAPredecessor+() + ) and + vr = exp.(DeleteExpr).getExpr().(VariableAccess).getTarget() + ) and + va.getEnclosingStmt() = exp.getEnclosingStmt() and + vro = va.getTarget() and + vr != vro + ) and + pointerDereference(cb, vr, vro) and + msg = + "it is possible to dereference a pointer when accessing a " + vr.getName() + + ", since it is possible to throw an exception before the memory for the " + vro.getName() + + " is allocated" + ) + or + exists(Expr exp, Variable vr | + ( + exp.(DeleteExpr).getEnclosingStmt().getParentStmt*() = cb and + vr = exp.(DeleteExpr).getExpr().(VariableAccess).getTarget() + or + exp.(DeleteArrayExpr).getEnclosingStmt().getParentStmt*() = cb and + vr = exp.(DeleteArrayExpr).getExpr().(VariableAccess).getTarget() + ) and + doubleCallDelete(_, cb, vr) and + msg = + "This allocation may have been released in the try block or a previous catch block." + + vr.getName() + ) + or + exists(Variable vro, Expr exp | + exp.getEnclosingStmt().getParentStmt*() = cb and + exists(VariableAccess va | + ( + va = exp.(DeleteArrayExpr).getExpr() or + va = exp.(DeleteExpr).getExpr() + ) and + va.getEnclosingStmt() = exp.getEnclosingStmt() and + vro = va.getTarget() + ) and + newThrowDelete(cb, vro) and + msg = + "If the allocation in the try block fails, then an unallocated pointer " + vro.getName() + + " will be freed in the catch block." + ) +select cb, msg diff --git a/cpp/ql/src/jsf/4.05 Libraries/AV Rule 23.ql b/cpp/ql/src/jsf/4.05 Libraries/AV Rule 23.ql index 9bb63cb6b29..ff4b1baec76 100644 --- a/cpp/ql/src/jsf/4.05 Libraries/AV Rule 23.ql +++ b/cpp/ql/src/jsf/4.05 Libraries/AV Rule 23.ql @@ -13,7 +13,7 @@ import cpp from Function f where - f.getName().regexpMatch("atof|atoi|atol") and + f.getName() = ["atof", "atoi", "atol"] and f.getFile().getAbsolutePath().matches("%stdlib.h") select f.getACallToThisFunction(), "AV Rule 23: The library functions atof, atoi and atol from library shall not be used." diff --git a/cpp/ql/src/jsf/4.05 Libraries/AV Rule 24.ql b/cpp/ql/src/jsf/4.05 Libraries/AV Rule 24.ql index 9e0fd1d5de8..3bf27d8121c 100644 --- a/cpp/ql/src/jsf/4.05 Libraries/AV Rule 24.ql +++ b/cpp/ql/src/jsf/4.05 Libraries/AV Rule 24.ql @@ -13,7 +13,7 @@ import cpp from Function f where - f.getName().regexpMatch("abort|exit|getenv|system") and + f.getName() = ["abort", "exit", "getenv", "system"] and f.getFile().getAbsolutePath().matches("%stdlib.h") select f.getACallToThisFunction(), "The library functions abort, exit, getenv and system from library should not be used." diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index b5beb704cf2..b31a20cb12a 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.1.0-dev +version: 0.1.3-dev groups: - cpp - queries diff --git a/cpp/ql/test/TestUtilities/InlineExpectationsTest.qll b/cpp/ql/test/TestUtilities/InlineExpectationsTest.qll index a4d264b2703..3891fcf13a1 100644 --- a/cpp/ql/test/TestUtilities/InlineExpectationsTest.qll +++ b/cpp/ql/test/TestUtilities/InlineExpectationsTest.qll @@ -181,7 +181,7 @@ private string expectationCommentPattern() { result = "\\s*\\$((?:[^/]|/[^/])*)( /** * The possible columns in an expectation comment. The `TDefaultColumn` branch represents the first * column in a comment. This column is not precedeeded by a name. `TNamedColumn(name)` represents a - * column containing expected results preceeded by the string `name:`. + * column containing expected results preceded by the string `name:`. */ private newtype TColumn = TDefaultColumn() or diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.expected new file mode 100644 index 00000000000..ffb7941f1cd --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.expected @@ -0,0 +1 @@ +| test.cpp:14:16:14:16 | p | unsafe_put_user write user-mode pointer $@ without check. | test.cpp:14:16:14:16 | p | p | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.qlref b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.qlref new file mode 100644 index 00000000000..a4543b332dd --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser.ql diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/test.cpp new file mode 100644 index 00000000000..755a73864c7 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/test.cpp @@ -0,0 +1,82 @@ + +typedef unsigned long size_t; + +void SYSC_SOMESYSTEMCALL(void *param); + +bool user_access_begin_impl(const void *where, size_t sz); +void user_access_end_impl(); +#define user_access_begin(where, sz) user_access_begin_impl(where, sz) +#define user_access_end() user_access_end_impl() + +void unsafe_put_user_impl(int what, const void *where, size_t sz); +#define unsafe_put_user(what, where) unsafe_put_user_impl( (what), (where), sizeof(*(where)) ) + +void test1(int p) +{ + SYSC_SOMESYSTEMCALL(&p); + + unsafe_put_user(123, &p); // BAD +} + +void test2(int p) +{ + SYSC_SOMESYSTEMCALL(&p); + + if (user_access_begin(&p, sizeof(p))) + { + unsafe_put_user(123, &p); // GOOD + + user_access_end(); + } +} + +void test3() +{ + int v; + + SYSC_SOMESYSTEMCALL(&v); + + unsafe_put_user(123, &v); // BAD [NOT DETECTED] +} + +void test4() +{ + int v; + + SYSC_SOMESYSTEMCALL(&v); + + if (user_access_begin(&v, sizeof(v))) + { + unsafe_put_user(123, &v); // GOOD + + user_access_end(); + } +} + +struct data +{ + int x; +}; + +void test5() +{ + data myData; + + SYSC_SOMESYSTEMCALL(&myData); + + unsafe_put_user(123, &(myData.x)); // BAD [NOT DETECTED] +} + +void test6() +{ + data myData; + + SYSC_SOMESYSTEMCALL(&myData); + + if (user_access_begin(&myData, sizeof(myData))) + { + unsafe_put_user(123, &(myData.x)); // GOOD + + user_access_end(); + } +} diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-285/PamAuthorization.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-285/PamAuthorization.expected new file mode 100644 index 00000000000..af34f888df2 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-285/PamAuthorization.expected @@ -0,0 +1 @@ +| test.cpp:29:11:29:26 | call to pam_authenticate | This PAM authentication call may be lead to an authorization bypass. | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-285/PamAuthorization.qlref b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-285/PamAuthorization.qlref new file mode 100644 index 00000000000..f1135f7d536 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-285/PamAuthorization.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-285/PamAuthorization.ql diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-285/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-285/test.cpp new file mode 100644 index 00000000000..e2753f10775 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-285/test.cpp @@ -0,0 +1,59 @@ +#include "../../../../../library-tests/dataflow/taint-tests/stl.h" + +using namespace std; + +#define PAM_SUCCESS 1 + +typedef struct pam_handle +{ +}; +int pam_start(std::string servicename, std::string username, int a, struct pam_handle **); +int pam_authenticate(struct pam_handle *, int e); +int pam_acct_mgmt(struct pam_handle *, int e); + +bool PamAuthBad(const std::string &username_in, + const std::string &password_in, + std::string &authenticated_username) +{ + + struct pam_handle *pamh = nullptr; /* pam session handle */ + + const char *username = username_in.c_str(); + int err = pam_start("test", username, + 0, &pamh); + if (err != PAM_SUCCESS) + { + return false; + } + + err = pam_authenticate(pamh, 0); + if (err != PAM_SUCCESS) + return err; + + return true; +} + +bool PamAuthGood(const std::string &username_in, + const std::string &password_in, + std::string &authenticated_username) +{ + + struct pam_handle *pamh = nullptr; /* pam session handle */ + + const char *username = username_in.c_str(); + int err = pam_start("test", username, + 0, &pamh); + if (err != PAM_SUCCESS) + { + return false; + } + + err = pam_authenticate(pamh, 0); + if (err != PAM_SUCCESS) + return err; + + err = pam_acct_mgmt(pamh, 0); + if (err != PAM_SUCCESS) + return err; + return true; +} diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected new file mode 100644 index 00000000000..728a9e8b3d5 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected @@ -0,0 +1,8 @@ +| test.cpp:63:3:71:3 | { ... } | If the allocation in the try block fails, then an unallocated pointer bufMyData will be freed in the catch block. | +| test.cpp:63:3:71:3 | { ... } | If the allocation in the try block fails, then an unallocated pointer buffer will be freed in the catch block. | +| test.cpp:63:3:71:3 | { ... } | it is possible to dereference a pointer when accessing a buffer, since it is possible to throw an exception before the memory for the bufMyData is allocated | +| test.cpp:91:3:100:3 | { ... } | If the allocation in the try block fails, then an unallocated pointer buffer will be freed in the catch block. | +| test.cpp:120:3:128:3 | { ... } | If the allocation in the try block fails, then an unallocated pointer buffer will be freed in the catch block. | +| test.cpp:143:3:151:3 | { ... } | If the allocation in the try block fails, then an unallocated pointer buffer will be freed in the catch block. | +| test.cpp:181:3:183:3 | { ... } | This allocation may have been released in the try block or a previous catch block.valData | +| test.cpp:219:3:221:3 | { ... } | This allocation may have been released in the try block or a previous catch block.valData | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.qlref b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.qlref new file mode 100644 index 00000000000..c67adb8774b --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp new file mode 100644 index 00000000000..de0be1efff2 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp @@ -0,0 +1,255 @@ +#define NULL ((void*)0) +typedef unsigned long size_t; +namespace std { + enum class align_val_t : size_t {}; +} + +class exception {}; + +void cleanFunction(); + +void* operator new(size_t, float); +void* operator new[](size_t, float); +void* operator new(size_t, std::align_val_t, float); +void* operator new[](size_t, std::align_val_t, float); +void operator delete(void*, float); +void operator delete[](void*, float); +void operator delete(void*, std::align_val_t, float); +void operator delete[](void*, std::align_val_t, float); + +struct myData +{ + int sizeInt; + char* buffer; +}; + +struct myGlobalData +{ + int sizeInt; + myData** bufMyData; +}; + +void allocData(myData ** bufMyData) { + for (size_t i = 0; i < 10; i++) + { + bufMyData[i] = new myData; + bufMyData[i]->sizeInt = 10; + bufMyData[i]->buffer = new char[10]; + } +} + + +void throwFunction(int a) { + if (a == 5) throw "my exception!"; +} +void throwFunction2(int a) { + if (a == 5) throw exception(); +} +void funcWork1b() { + int a; + myData **bufMyData; + + try { + cleanFunction(); + throwFunction(a); + + bufMyData = new myData*[10]; + cleanFunction(); + allocData(bufMyData); + cleanFunction(); + + } + catch (...) + { + for (size_t i = 0; i < 10; i++) + { + delete[] bufMyData[i]->buffer; // BAD + delete bufMyData[i]; + } + delete [] bufMyData; + + } +} + +void funcWork1() { + int a; + int i; + myData **bufMyData; + + bufMyData = new myData*[10]; + for (i = 0; i < 10; i++) + bufMyData[i] = 0; + try { + cleanFunction(); + throwFunction(a); + cleanFunction(); + allocData(bufMyData); + cleanFunction(); + + } + catch (...) + { + for (size_t i = 0; i < 10; i++) + { + if (bufMyData[i]) + delete[] bufMyData[i]->buffer; // BAD + delete bufMyData[i]; + } + delete [] bufMyData; + + } +} + +void funcWork2() { + int a; + myData **bufMyData; + + bufMyData = new myData*[10]; + try { + do { + cleanFunction(); + allocData(bufMyData); + cleanFunction(); + throwFunction(a); + + } + while(0); + + } + catch (...) + { + for (size_t i = 0; i < 10; i++) + { + delete[] bufMyData[i]->buffer; // BAD + delete bufMyData[i]; + } + delete [] bufMyData; + + } +} +void funcWork3() { + int a; + myData **bufMyData; + + bufMyData = new myData*[10]; + try { + cleanFunction(); + allocData(bufMyData); + cleanFunction(); + throwFunction(a); + + } + catch (...) + { + for (size_t i = 0; i < 10; i++) + { + delete[] bufMyData[i]->buffer; // BAD + delete bufMyData[i]; + } + delete [] bufMyData; + + } +} + + +void funcWork4() { + int a; + myGlobalData *valData = 0; + try { + valData = new myGlobalData; + cleanFunction(); + delete valData; + valData = 0; + throwFunction(a); + } + catch (...) + { + delete valData; // GOOD + } +} + +void funcWork4b() { + int a; + myGlobalData *valData = 0; + try { + valData = new myGlobalData; + cleanFunction(); + delete valData; + throwFunction(a); + } + catch (...) + { + delete valData; // BAD + } +} +void funcWork5() { + int a; + myGlobalData *valData = 0; + try { + valData = new myGlobalData; + cleanFunction(); + delete valData; + valData = 0; + throwFunction2(a); + } + catch (const exception &) { + delete valData; + valData = 0; + throw; + } + catch (...) + { + delete valData; // GOOD + } +} + +void funcWork5b() { + int a; + myGlobalData *valData = 0; + try { + valData = new myGlobalData; + cleanFunction(); + throwFunction2(a); + } + catch (const exception &) { + delete valData; + throw; + } + catch (...) + { + delete valData; // BAD + } +} +void funcWork6() { + int a; + int flagB = 0; + myGlobalData *valData = 0; + try { + valData = new myGlobalData; + cleanFunction(); + throwFunction2(a); + } + catch (const exception &) { + delete valData; + flagB = 1; + throw; + } + catch (...) + { + if(flagB == 0) + delete valData; // GOOD + } +} + +void runnerFunc() +{ + funcWork1(); + funcWork1b(); + funcWork2(); + funcWork3(); + funcWork4(); + funcWork4b(); + funcWork5(); + funcWork5b(); + funcWork6(); +} diff --git a/cpp/ql/test/library-tests/controlflow/dominance/bbIDominates.expected b/cpp/ql/test/library-tests/controlflow/dominance/bbIDominates.expected index c860887c1b8..5ed3df039e2 100644 --- a/cpp/ql/test/library-tests/controlflow/dominance/bbIDominates.expected +++ b/cpp/ql/test/library-tests/controlflow/dominance/bbIDominates.expected @@ -31,4 +31,4 @@ | test2 | 83 | if (...) ... | 74 | test2 | | test2 | 83 | if (...) ... | 84 | break; | | test2 | 83 | if (...) ... | 85 | if (...) ... | -| test2 | 85 | if (...) ... | 0 | { ... } | +| test2 | 85 | if (...) ... | 86 | { ... } | diff --git a/cpp/ql/test/library-tests/controlflow/dominance/dominator.expected b/cpp/ql/test/library-tests/controlflow/dominance/dominator.expected index ca0b894b1bd..9b4ebf651f6 100644 --- a/cpp/ql/test/library-tests/controlflow/dominance/dominator.expected +++ b/cpp/ql/test/library-tests/controlflow/dominance/dominator.expected @@ -118,7 +118,7 @@ | test | 44 | ... = ... | 42 | j | | test | 44 | ExprStmt | 44 | 10 | | test | 44 | w | 44 | ... = ... | -| test | 47 | ... += ... | 50 | for(...;...;...) ... | +| test | 47 | ... += ... | 50 | { ... } | | test | 47 | ExprStmt | 47 | z | | test | 47 | w | 47 | ... += ... | | test | 47 | z | 47 | w | @@ -133,6 +133,7 @@ | test | 50 | j | 50 | ... ++ | | test | 50 | j | 50 | ... = ... | | test | 50 | label ...: | 50 | j | +| test | 50 | { ... } | 50 | for(...;...;...) ... | | test | 50 | { ... } | 51 | ExprStmt | | test | 51 | 30 | 51 | y | | test | 51 | ... = ... | 52 | if (...) ... | @@ -181,10 +182,10 @@ | test | 70 | ExprStmt | 70 | 40 | | test | 70 | w | 70 | ... = ... | | test | 71 | return ... | 71 | w | -| test2 | 0 | { ... } | 86 | ExprStmt | | test2 | 74 | { ... } | 76 | declaration | -| test2 | 76 | declaration | 77 | for(...;...;...) ... | +| test2 | 76 | declaration | 77 | { ... } | | test2 | 77 | for(...;...;...) ... | 77 | { ... } | +| test2 | 77 | { ... } | 77 | for(...;...;...) ... | | test2 | 77 | { ... } | 78 | ExprStmt | | test2 | 78 | 10 | 78 | b | | test2 | 78 | ... = ... | 79 | if (...) ... | @@ -211,11 +212,12 @@ | test2 | 83 | if (...) ... | 83 | a | | test2 | 84 | break; | 87 | label ...: | | test2 | 85 | 20 | 85 | ... == ... | -| test2 | 85 | ... == ... | 0 | { ... } | +| test2 | 85 | ... == ... | 86 | { ... } | | test2 | 85 | a | 85 | 20 | | test2 | 85 | if (...) ... | 85 | a | | test2 | 86 | ExprStmt | 86 | c | | test2 | 86 | c | 86 | return ... | +| test2 | 86 | { ... } | 86 | ExprStmt | | test2 | 87 | label ...: | 88 | ExprStmt | | test2 | 88 | ExprStmt | 88 | b | | test2 | 88 | b | 88 | return ... | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected index 6b3e01b0e77..f04db828a25 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected @@ -218,10 +218,10 @@ postWithInFlow | lambdas.cpp:20:11:20:11 | FieldAddress [post update] | PostUpdateNode should not be the target of local flow. | | lambdas.cpp:20:11:20:11 | FieldAddress [post update] | PostUpdateNode should not be the target of local flow. | | lambdas.cpp:20:11:20:11 | FieldAddress [post update] | PostUpdateNode should not be the target of local flow. | -| lambdas.cpp:23:3:23:3 | (reference dereference) [post update] | PostUpdateNode should not be the target of local flow. | | lambdas.cpp:23:3:23:14 | FieldAddress [post update] | PostUpdateNode should not be the target of local flow. | | lambdas.cpp:23:3:23:14 | VariableAddress [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. | +| lambdas.cpp:23:15:23:15 | (reference dereference) [post update] | PostUpdateNode should not be the target of local flow. | | lambdas.cpp:28:7:28:7 | VariableAddress [post update] | PostUpdateNode should not be the target of local flow. | | lambdas.cpp:28:10:31:2 | FieldAddress [post update] | PostUpdateNode should not be the target of local flow. | | lambdas.cpp:28:10:31:2 | FieldAddress [post update] | PostUpdateNode should not be the target of local flow. | diff --git a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.ql b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.ql index 5f39dd19737..b918417cd66 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.ql +++ b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.ql @@ -4,7 +4,6 @@ import semmle.code.cpp.ir.dataflow.DataFlow import IRConfiguration -import cpp import DataFlow::PathGraph from DataFlow::PathNode src, DataFlow::PathNode sink, IRConf conf diff --git a/cpp/ql/test/library-tests/dataflow/fields/path-flow.ql b/cpp/ql/test/library-tests/dataflow/fields/path-flow.ql index b1aeadfbb60..7456e114712 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/path-flow.ql +++ b/cpp/ql/test/library-tests/dataflow/fields/path-flow.ql @@ -4,7 +4,6 @@ import semmle.code.cpp.dataflow.DataFlow import ASTConfiguration -import cpp import DataFlow::PathGraph from DataFlow::PathNode src, DataFlow::PathNode sink, AstConf conf diff --git a/cpp/ql/test/library-tests/depends_initializers/InitializerAccesses.expected b/cpp/ql/test/library-tests/depends_initializers/InitializerAccesses.expected index 71e0949fa52..d1ff0d6b52f 100644 --- a/cpp/ql/test/library-tests/depends_initializers/InitializerAccesses.expected +++ b/cpp/ql/test/library-tests/depends_initializers/InitializerAccesses.expected @@ -1,7 +1,7 @@ | initializers.cpp:18:8:18:15 | initializer for y | initializers.cpp:18:9:18:9 | x | | initializers.cpp:19:8:19:21 | initializer for z | initializers.cpp:19:9:19:9 | x | | initializers.cpp:23:8:23:9 | initializer for j | initializers.cpp:23:9:23:9 | i | -| initializers.cpp:27:8:27:10 | initializer for aax | initializers.cpp:27:9:27:10 | ax | +| initializers.cpp:27:9:27:10 | initializer for aax | initializers.cpp:27:9:27:10 | ax | | initializers.cpp:30:20:30:35 | initializer for myIntArray | initializers.cpp:30:22:30:22 | i | | template_static.cpp:9:24:9:24 | initializer for static_c | template_static.cpp:9:24:9:24 | c | | template_static.cpp:10:22:10:24 | initializer for static_v | template_static.cpp:10:24:10:24 | v | diff --git a/cpp/ql/test/library-tests/depends_initializers/InitializerCFG.expected b/cpp/ql/test/library-tests/depends_initializers/InitializerCFG.expected index 862cd295942..cc470e2eab4 100644 --- a/cpp/ql/test/library-tests/depends_initializers/InitializerCFG.expected +++ b/cpp/ql/test/library-tests/depends_initializers/InitializerCFG.expected @@ -8,7 +8,7 @@ | initializers.cpp:23:8:23:9 | initializer for j | | | initializers.cpp:25:3:25:3 | initializer for a | | | initializers.cpp:26:7:26:10 | initializer for ax | | -| initializers.cpp:27:8:27:10 | initializer for aax | | +| initializers.cpp:27:9:27:10 | initializer for aax | | | initializers.cpp:30:20:30:35 | initializer for myIntArray | | | initializers.cpp:31:3:31:15 | initializer for myObjectArray | | | template_static.cpp:2:15:2:15 | initializer for c | | diff --git a/cpp/ql/test/library-tests/floats/float128/errors.expected b/cpp/ql/test/library-tests/floats/float128/errors.expected index 2f163e66cb0..d7891f3e9b6 100644 --- a/cpp/ql/test/library-tests/floats/float128/errors.expected +++ b/cpp/ql/test/library-tests/floats/float128/errors.expected @@ -1,3 +1,4 @@ | file://:0:0:0:0 | There was an error during this compilation | | float128.cpp:1:39:1:39 | 128-bit floating-point types are not supported in this configuration | -| float128.cpp:2:30:2:30 | 128-bit floating-point types are not supported in this configuration | +| float128.cpp:2:30:2:30 | an attribute specifies a mode incompatible with '' | +| float128.cpp:2:41:2:41 | invalid combination of type specifiers | diff --git a/cpp/ql/test/library-tests/floats/float128/usertypes.expected b/cpp/ql/test/library-tests/floats/float128/usertypes.expected index 42b6612aff9..84a38d93967 100644 --- a/cpp/ql/test/library-tests/floats/float128/usertypes.expected +++ b/cpp/ql/test/library-tests/floats/float128/usertypes.expected @@ -1,5 +1,4 @@ | float128.cpp:1:50:1:60 | _Complex128 | file://:0:0:0:0 | | -| float128.cpp:2:41:2:49 | _Float128 | file://:0:0:0:0 | | | float128.cpp:13:29:13:54 | __is_floating_point_helper | float128.cpp:10:8:10:17 | false_type | | float128.cpp:14:19:14:51 | __is_floating_point_helper | float128.cpp:11:8:11:16 | true_type | | float128.cpp:15:19:15:52 | __is_floating_point_helper | float128.cpp:11:8:11:16 | true_type | diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index af029bf3748..9aedef96249 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -13559,6 +13559,422 @@ ir.cpp: # 1754| Type = [SpecifiedType] const CopyConstructorTestVirtualClass # 1754| ValueCategory = lvalue # 1755| getStmt(2): [ReturnStmt] return ... +# 1757| [TopLevelFunction] void if_initialization(int) +# 1757| : +# 1757| getParameter(0): [Parameter] x +# 1757| Type = [IntType] int +# 1757| getEntryPoint(): [BlockStmt] { ... } +# 1758| getStmt(0): [IfStmt] if (...) ... +# 1758| getInitialization(): [DeclStmt] declaration +# 1758| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1758| Type = [IntType] int +# 1758| getVariable().getInitializer(): [Initializer] initializer for y +# 1758| getExpr(): [VariableAccess] x +# 1758| Type = [IntType] int +# 1758| ValueCategory = prvalue(load) +# 1758| getCondition(): [AddExpr] ... + ... +# 1758| Type = [IntType] int +# 1758| ValueCategory = prvalue +# 1758| getLeftOperand(): [VariableAccess] x +# 1758| Type = [IntType] int +# 1758| ValueCategory = prvalue(load) +# 1758| getRightOperand(): [Literal] 1 +# 1758| Type = [IntType] int +# 1758| Value = [Literal] 1 +# 1758| ValueCategory = prvalue +# 1758| getThen(): [BlockStmt] { ... } +# 1759| getStmt(0): [ExprStmt] ExprStmt +# 1759| getExpr(): [AssignExpr] ... = ... +# 1759| Type = [IntType] int +# 1759| ValueCategory = lvalue +# 1759| getLValue(): [VariableAccess] x +# 1759| Type = [IntType] int +# 1759| ValueCategory = lvalue +# 1759| getRValue(): [AddExpr] ... + ... +# 1759| Type = [IntType] int +# 1759| ValueCategory = prvalue +# 1759| getLeftOperand(): [VariableAccess] x +# 1759| Type = [IntType] int +# 1759| ValueCategory = prvalue(load) +# 1759| getRightOperand(): [VariableAccess] y +# 1759| Type = [IntType] int +# 1759| ValueCategory = prvalue(load) +# 1758| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1758| Conversion = [BoolConversion] conversion to bool +# 1758| Type = [BoolType] bool +# 1758| ValueCategory = prvalue +# 1762| getStmt(1): [DeclStmt] declaration +# 1762| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1762| Type = [IntType] int +# 1763| getStmt(2): [IfStmt] if (...) ... +# 1763| getInitialization(): [ExprStmt] ExprStmt +# 1763| getExpr(): [AssignExpr] ... = ... +# 1763| Type = [IntType] int +# 1763| ValueCategory = lvalue +# 1763| getLValue(): [VariableAccess] w +# 1763| Type = [IntType] int +# 1763| ValueCategory = lvalue +# 1763| getRValue(): [VariableAccess] x +# 1763| Type = [IntType] int +# 1763| ValueCategory = prvalue(load) +# 1763| getCondition(): [AddExpr] ... + ... +# 1763| Type = [IntType] int +# 1763| ValueCategory = prvalue +# 1763| getLeftOperand(): [VariableAccess] x +# 1763| Type = [IntType] int +# 1763| ValueCategory = prvalue(load) +# 1763| getRightOperand(): [Literal] 1 +# 1763| Type = [IntType] int +# 1763| Value = [Literal] 1 +# 1763| ValueCategory = prvalue +# 1763| getThen(): [BlockStmt] { ... } +# 1764| getStmt(0): [ExprStmt] ExprStmt +# 1764| getExpr(): [AssignExpr] ... = ... +# 1764| Type = [IntType] int +# 1764| ValueCategory = lvalue +# 1764| getLValue(): [VariableAccess] x +# 1764| Type = [IntType] int +# 1764| ValueCategory = lvalue +# 1764| getRValue(): [AddExpr] ... + ... +# 1764| Type = [IntType] int +# 1764| ValueCategory = prvalue +# 1764| getLeftOperand(): [VariableAccess] x +# 1764| Type = [IntType] int +# 1764| ValueCategory = prvalue(load) +# 1764| getRightOperand(): [VariableAccess] w +# 1764| Type = [IntType] int +# 1764| ValueCategory = prvalue(load) +# 1763| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1763| Conversion = [BoolConversion] conversion to bool +# 1763| Type = [BoolType] bool +# 1763| ValueCategory = prvalue +# 1767| getStmt(3): [IfStmt] if (...) ... +# 1767| getInitialization(): [ExprStmt] ExprStmt +# 1767| getExpr(): [AssignExpr] ... = ... +# 1767| Type = [IntType] int +# 1767| ValueCategory = lvalue +# 1767| getLValue(): [VariableAccess] w +# 1767| Type = [IntType] int +# 1767| ValueCategory = lvalue +# 1767| getRValue(): [VariableAccess] x +# 1767| Type = [IntType] int +# 1767| ValueCategory = prvalue(load) +# 1767| getCondition(): [ConditionDeclExpr] (condition decl) +# 1767| Type = [BoolType] bool +# 1767| ValueCategory = prvalue +# 1767| getVariableAccess(): [VariableAccess] w2 +# 1767| Type = [IntType] int +# 1767| ValueCategory = prvalue(load) +# 1767| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 1767| Conversion = [BoolConversion] conversion to bool +# 1767| Type = [BoolType] bool +# 1767| ValueCategory = prvalue +# 1767| getThen(): [BlockStmt] { ... } +# 1768| getStmt(0): [ExprStmt] ExprStmt +# 1768| getExpr(): [AssignExpr] ... = ... +# 1768| Type = [IntType] int +# 1768| ValueCategory = lvalue +# 1768| getLValue(): [VariableAccess] x +# 1768| Type = [IntType] int +# 1768| ValueCategory = lvalue +# 1768| getRValue(): [AddExpr] ... + ... +# 1768| Type = [IntType] int +# 1768| ValueCategory = prvalue +# 1768| getLeftOperand(): [VariableAccess] x +# 1768| Type = [IntType] int +# 1768| ValueCategory = prvalue(load) +# 1768| getRightOperand(): [VariableAccess] w +# 1768| Type = [IntType] int +# 1768| ValueCategory = prvalue(load) +# 1771| getStmt(4): [IfStmt] if (...) ... +# 1771| getInitialization(): [DeclStmt] declaration +# 1771| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1771| Type = [IntType] int +# 1771| getVariable().getInitializer(): [Initializer] initializer for v +# 1771| getExpr(): [VariableAccess] x +# 1771| Type = [IntType] int +# 1771| ValueCategory = prvalue(load) +# 1771| getCondition(): [ConditionDeclExpr] (condition decl) +# 1771| Type = [BoolType] bool +# 1771| ValueCategory = prvalue +# 1771| getVariableAccess(): [VariableAccess] v2 +# 1771| Type = [IntType] int +# 1771| ValueCategory = prvalue(load) +# 1771| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 1771| Conversion = [BoolConversion] conversion to bool +# 1771| Type = [BoolType] bool +# 1771| ValueCategory = prvalue +# 1771| getThen(): [BlockStmt] { ... } +# 1772| getStmt(0): [ExprStmt] ExprStmt +# 1772| getExpr(): [AssignExpr] ... = ... +# 1772| Type = [IntType] int +# 1772| ValueCategory = lvalue +# 1772| getLValue(): [VariableAccess] x +# 1772| Type = [IntType] int +# 1772| ValueCategory = lvalue +# 1772| getRValue(): [AddExpr] ... + ... +# 1772| Type = [IntType] int +# 1772| ValueCategory = prvalue +# 1772| getLeftOperand(): [VariableAccess] x +# 1772| Type = [IntType] int +# 1772| ValueCategory = prvalue(load) +# 1772| getRightOperand(): [VariableAccess] v +# 1772| Type = [IntType] int +# 1772| ValueCategory = prvalue(load) +# 1775| getStmt(5): [DeclStmt] declaration +# 1775| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1775| Type = [IntType] int +# 1775| getVariable().getInitializer(): [Initializer] initializer for z +# 1775| getExpr(): [VariableAccess] x +# 1775| Type = [IntType] int +# 1775| ValueCategory = prvalue(load) +# 1776| getStmt(6): [IfStmt] if (...) ... +# 1776| getCondition(): [VariableAccess] z +# 1776| Type = [IntType] int +# 1776| ValueCategory = prvalue(load) +# 1776| getThen(): [BlockStmt] { ... } +# 1777| getStmt(0): [ExprStmt] ExprStmt +# 1777| getExpr(): [AssignExpr] ... = ... +# 1777| Type = [IntType] int +# 1777| ValueCategory = lvalue +# 1777| getLValue(): [VariableAccess] x +# 1777| Type = [IntType] int +# 1777| ValueCategory = lvalue +# 1777| getRValue(): [AddExpr] ... + ... +# 1777| Type = [IntType] int +# 1777| ValueCategory = prvalue +# 1777| getLeftOperand(): [VariableAccess] x +# 1777| Type = [IntType] int +# 1777| ValueCategory = prvalue(load) +# 1777| getRightOperand(): [VariableAccess] z +# 1777| Type = [IntType] int +# 1777| ValueCategory = prvalue(load) +# 1776| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1776| Conversion = [BoolConversion] conversion to bool +# 1776| Type = [BoolType] bool +# 1776| ValueCategory = prvalue +# 1780| getStmt(7): [IfStmt] if (...) ... +# 1780| getCondition(): [ConditionDeclExpr] (condition decl) +# 1780| Type = [BoolType] bool +# 1780| ValueCategory = prvalue +# 1780| getVariableAccess(): [VariableAccess] z2 +# 1780| Type = [IntType] int +# 1780| ValueCategory = prvalue(load) +# 1780| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 1780| Conversion = [BoolConversion] conversion to bool +# 1780| Type = [BoolType] bool +# 1780| ValueCategory = prvalue +# 1780| getThen(): [BlockStmt] { ... } +# 1781| getStmt(0): [ExprStmt] ExprStmt +# 1781| getExpr(): [AssignAddExpr] ... += ... +# 1781| Type = [IntType] int +# 1781| ValueCategory = lvalue +# 1781| getLValue(): [VariableAccess] x +# 1781| Type = [IntType] int +# 1781| ValueCategory = lvalue +# 1781| getRValue(): [VariableAccess] z2 +# 1781| Type = [IntType] int +# 1781| ValueCategory = prvalue(load) +# 1783| getStmt(8): [ReturnStmt] return ... +# 1785| [TopLevelFunction] void switch_initialization(int) +# 1785| : +# 1785| getParameter(0): [Parameter] x +# 1785| Type = [IntType] int +# 1785| getEntryPoint(): [BlockStmt] { ... } +# 1786| getStmt(0): [SwitchStmt] switch (...) ... +# 1786| getInitialization(): [DeclStmt] declaration +# 1786| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1786| Type = [IntType] int +# 1786| getVariable().getInitializer(): [Initializer] initializer for y +# 1786| getExpr(): [VariableAccess] x +# 1786| Type = [IntType] int +# 1786| ValueCategory = prvalue(load) +# 1786| getExpr(): [AddExpr] ... + ... +# 1786| Type = [IntType] int +# 1786| ValueCategory = prvalue +# 1786| getLeftOperand(): [VariableAccess] x +# 1786| Type = [IntType] int +# 1786| ValueCategory = prvalue(load) +# 1786| getRightOperand(): [Literal] 1 +# 1786| Type = [IntType] int +# 1786| Value = [Literal] 1 +# 1786| ValueCategory = prvalue +# 1786| getStmt(): [BlockStmt] { ... } +# 1787| getStmt(0): [SwitchCase] default: +# 1788| getStmt(1): [ExprStmt] ExprStmt +# 1788| getExpr(): [AssignExpr] ... = ... +# 1788| Type = [IntType] int +# 1788| ValueCategory = lvalue +# 1788| getLValue(): [VariableAccess] x +# 1788| Type = [IntType] int +# 1788| ValueCategory = lvalue +# 1788| getRValue(): [AddExpr] ... + ... +# 1788| Type = [IntType] int +# 1788| ValueCategory = prvalue +# 1788| getLeftOperand(): [VariableAccess] x +# 1788| Type = [IntType] int +# 1788| ValueCategory = prvalue(load) +# 1788| getRightOperand(): [VariableAccess] y +# 1788| Type = [IntType] int +# 1788| ValueCategory = prvalue(load) +# 1791| getStmt(1): [DeclStmt] declaration +# 1791| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1791| Type = [IntType] int +# 1792| getStmt(2): [SwitchStmt] switch (...) ... +# 1792| getInitialization(): [ExprStmt] ExprStmt +# 1792| getExpr(): [AssignExpr] ... = ... +# 1792| Type = [IntType] int +# 1792| ValueCategory = lvalue +# 1792| getLValue(): [VariableAccess] w +# 1792| Type = [IntType] int +# 1792| ValueCategory = lvalue +# 1792| getRValue(): [VariableAccess] x +# 1792| Type = [IntType] int +# 1792| ValueCategory = prvalue(load) +# 1792| getExpr(): [AddExpr] ... + ... +# 1792| Type = [IntType] int +# 1792| ValueCategory = prvalue +# 1792| getLeftOperand(): [VariableAccess] x +# 1792| Type = [IntType] int +# 1792| ValueCategory = prvalue(load) +# 1792| getRightOperand(): [Literal] 1 +# 1792| Type = [IntType] int +# 1792| Value = [Literal] 1 +# 1792| ValueCategory = prvalue +# 1792| getStmt(): [BlockStmt] { ... } +# 1793| getStmt(0): [SwitchCase] default: +# 1794| getStmt(1): [ExprStmt] ExprStmt +# 1794| getExpr(): [AssignExpr] ... = ... +# 1794| Type = [IntType] int +# 1794| ValueCategory = lvalue +# 1794| getLValue(): [VariableAccess] x +# 1794| Type = [IntType] int +# 1794| ValueCategory = lvalue +# 1794| getRValue(): [AddExpr] ... + ... +# 1794| Type = [IntType] int +# 1794| ValueCategory = prvalue +# 1794| getLeftOperand(): [VariableAccess] x +# 1794| Type = [IntType] int +# 1794| ValueCategory = prvalue(load) +# 1794| getRightOperand(): [VariableAccess] w +# 1794| Type = [IntType] int +# 1794| ValueCategory = prvalue(load) +# 1797| getStmt(3): [SwitchStmt] switch (...) ... +# 1797| getInitialization(): [ExprStmt] ExprStmt +# 1797| getExpr(): [AssignExpr] ... = ... +# 1797| Type = [IntType] int +# 1797| ValueCategory = lvalue +# 1797| getLValue(): [VariableAccess] w +# 1797| Type = [IntType] int +# 1797| ValueCategory = lvalue +# 1797| getRValue(): [VariableAccess] x +# 1797| Type = [IntType] int +# 1797| ValueCategory = prvalue(load) +# 1797| getExpr(): [ConditionDeclExpr] (condition decl) +# 1797| Type = [IntType] int +# 1797| ValueCategory = prvalue +# 1797| getVariableAccess(): [VariableAccess] w2 +# 1797| Type = [IntType] int +# 1797| ValueCategory = prvalue(load) +# 1797| getStmt(): [BlockStmt] { ... } +# 1798| getStmt(0): [SwitchCase] default: +# 1799| getStmt(1): [ExprStmt] ExprStmt +# 1799| getExpr(): [AssignExpr] ... = ... +# 1799| Type = [IntType] int +# 1799| ValueCategory = lvalue +# 1799| getLValue(): [VariableAccess] x +# 1799| Type = [IntType] int +# 1799| ValueCategory = lvalue +# 1799| getRValue(): [AddExpr] ... + ... +# 1799| Type = [IntType] int +# 1799| ValueCategory = prvalue +# 1799| getLeftOperand(): [VariableAccess] x +# 1799| Type = [IntType] int +# 1799| ValueCategory = prvalue(load) +# 1799| getRightOperand(): [VariableAccess] w +# 1799| Type = [IntType] int +# 1799| ValueCategory = prvalue(load) +# 1802| getStmt(4): [SwitchStmt] switch (...) ... +# 1802| getInitialization(): [DeclStmt] declaration +# 1802| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1802| Type = [IntType] int +# 1802| getVariable().getInitializer(): [Initializer] initializer for v +# 1802| getExpr(): [VariableAccess] x +# 1802| Type = [IntType] int +# 1802| ValueCategory = prvalue(load) +# 1802| getExpr(): [ConditionDeclExpr] (condition decl) +# 1802| Type = [IntType] int +# 1802| ValueCategory = prvalue +# 1802| getVariableAccess(): [VariableAccess] v2 +# 1802| Type = [IntType] int +# 1802| ValueCategory = prvalue(load) +# 1802| getStmt(): [BlockStmt] { ... } +# 1803| getStmt(0): [SwitchCase] default: +# 1804| getStmt(1): [ExprStmt] ExprStmt +# 1804| getExpr(): [AssignExpr] ... = ... +# 1804| Type = [IntType] int +# 1804| ValueCategory = lvalue +# 1804| getLValue(): [VariableAccess] x +# 1804| Type = [IntType] int +# 1804| ValueCategory = lvalue +# 1804| getRValue(): [AddExpr] ... + ... +# 1804| Type = [IntType] int +# 1804| ValueCategory = prvalue +# 1804| getLeftOperand(): [VariableAccess] x +# 1804| Type = [IntType] int +# 1804| ValueCategory = prvalue(load) +# 1804| getRightOperand(): [VariableAccess] v +# 1804| Type = [IntType] int +# 1804| ValueCategory = prvalue(load) +# 1807| getStmt(5): [DeclStmt] declaration +# 1807| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1807| Type = [IntType] int +# 1807| getVariable().getInitializer(): [Initializer] initializer for z +# 1807| getExpr(): [VariableAccess] x +# 1807| Type = [IntType] int +# 1807| ValueCategory = prvalue(load) +# 1808| getStmt(6): [SwitchStmt] switch (...) ... +# 1808| getExpr(): [VariableAccess] z +# 1808| Type = [IntType] int +# 1808| ValueCategory = prvalue(load) +# 1808| getStmt(): [BlockStmt] { ... } +# 1809| getStmt(0): [SwitchCase] default: +# 1810| getStmt(1): [ExprStmt] ExprStmt +# 1810| getExpr(): [AssignExpr] ... = ... +# 1810| Type = [IntType] int +# 1810| ValueCategory = lvalue +# 1810| getLValue(): [VariableAccess] x +# 1810| Type = [IntType] int +# 1810| ValueCategory = lvalue +# 1810| getRValue(): [AddExpr] ... + ... +# 1810| Type = [IntType] int +# 1810| ValueCategory = prvalue +# 1810| getLeftOperand(): [VariableAccess] x +# 1810| Type = [IntType] int +# 1810| ValueCategory = prvalue(load) +# 1810| getRightOperand(): [VariableAccess] z +# 1810| Type = [IntType] int +# 1810| ValueCategory = prvalue(load) +# 1813| getStmt(7): [SwitchStmt] switch (...) ... +# 1813| getExpr(): [ConditionDeclExpr] (condition decl) +# 1813| Type = [IntType] int +# 1813| ValueCategory = prvalue +# 1813| getVariableAccess(): [VariableAccess] z2 +# 1813| Type = [IntType] int +# 1813| ValueCategory = prvalue(load) +# 1813| getStmt(): [BlockStmt] { ... } +# 1814| getStmt(0): [SwitchCase] default: +# 1815| getStmt(1): [ExprStmt] ExprStmt +# 1815| getExpr(): [AssignAddExpr] ... += ... +# 1815| Type = [IntType] int +# 1815| ValueCategory = lvalue +# 1815| getLValue(): [VariableAccess] x +# 1815| Type = [IntType] int +# 1815| ValueCategory = lvalue +# 1815| getRValue(): [VariableAccess] z2 +# 1815| Type = [IntType] int +# 1815| ValueCategory = prvalue(load) +# 1817| getStmt(8): [ReturnStmt] return ... perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 4e3006c8901..e85c5f1b505 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -1754,4 +1754,66 @@ int implicit_copy_constructor_test( CopyConstructorTestVirtualClass cy = y; } +void if_initialization(int x) { + if (int y = x; x + 1) { + x = x + y; + } + + int w; + if (w = x; x + 1) { + x = x + w; + } + + if (w = x; int w2 = w) { + x = x + w; + } + + if (int v = x; int v2 = v) { + x = x + v; + } + + int z = x; + if (z) { + x = x + z; + } + + if (int z2 = z) { + x += z2; + } +} + +void switch_initialization(int x) { + switch (int y = x; x + 1) { + default: + x = x + y; + } + + int w; + switch (w = x; x + 1) { + default: + x = x + w; + } + + switch (w = x; int w2 = w) { + default: + x = x + w; + } + + switch (int v = x; int v2 = v) { + default: + x = x + v; + } + + int z = x; + switch (z) { + default: + x = x + z; + } + + switch (int z2 = z) { + default: + x += z2; + } +} + // semmle-extractor-options: -std=c++17 --clang diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index e893134031f..1581085efc6 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -4833,9 +4833,6 @@ | ir.cpp:1043:24:1043:24 | SideEffect | ~m1043_20 | | ir.cpp:1043:31:1043:31 | Address | &:r1043_9 | | ir.cpp:1043:36:1043:55 | Address | &:r1043_11 | -| ir.cpp:1043:43:1043:43 | Address | &:r1043_16 | -| ir.cpp:1043:43:1043:43 | Arg(this) | this:r1043_16 | -| ir.cpp:1043:43:1043:43 | SideEffect | ~m1043_20 | | ir.cpp:1043:43:1043:54 | Address | &:r1043_22 | | ir.cpp:1043:43:1043:54 | Address | &:r1043_24 | | ir.cpp:1043:43:1043:54 | Address | &:r1043_25 | @@ -4856,8 +4853,11 @@ | ir.cpp:1043:45:1043:49 | SideEffect | ~m1043_4 | | ir.cpp:1043:45:1043:49 | Unary | r1043_13 | | ir.cpp:1043:45:1043:49 | Unary | r1043_15 | -| ir.cpp:1043:53:1043:53 | Load | ~m1043_20 | -| ir.cpp:1043:53:1043:53 | Right | r1043_26 | +| ir.cpp:1043:52:1043:52 | Address | &:r1043_16 | +| ir.cpp:1043:52:1043:52 | Arg(this) | this:r1043_16 | +| ir.cpp:1043:52:1043:52 | SideEffect | ~m1043_20 | +| ir.cpp:1043:54:1043:54 | Load | ~m1043_20 | +| ir.cpp:1043:54:1043:54 | Right | r1043_26 | | ir.cpp:1043:58:1043:58 | ChiPartial | partial:m1043_9 | | ir.cpp:1043:58:1043:58 | ChiTotal | total:m1043_3 | | ir.cpp:1043:58:1043:58 | StoreValue | r1043_8 | @@ -4972,9 +4972,6 @@ | ir.cpp:1047:34:1047:34 | SideEffect | ~m1047_20 | | ir.cpp:1047:41:1047:41 | Address | &:r1047_9 | | ir.cpp:1047:46:1047:65 | Address | &:r1047_11 | -| ir.cpp:1047:53:1047:53 | Address | &:r1047_16 | -| ir.cpp:1047:53:1047:53 | Arg(this) | this:r1047_16 | -| ir.cpp:1047:53:1047:53 | SideEffect | ~m1047_20 | | ir.cpp:1047:53:1047:64 | Address | &:r1047_23 | | ir.cpp:1047:53:1047:64 | Load | ~m1047_20 | | ir.cpp:1047:53:1047:64 | StoreValue | r1047_24 | @@ -4989,6 +4986,9 @@ | ir.cpp:1047:55:1047:59 | SideEffect | ~m1047_4 | | ir.cpp:1047:55:1047:59 | Unary | r1047_13 | | ir.cpp:1047:55:1047:59 | Unary | r1047_15 | +| ir.cpp:1047:62:1047:62 | Address | &:r1047_16 | +| ir.cpp:1047:62:1047:62 | Arg(this) | this:r1047_16 | +| ir.cpp:1047:62:1047:62 | SideEffect | ~m1047_20 | | ir.cpp:1047:63:1047:63 | Right | r1047_22 | | ir.cpp:1047:68:1047:68 | StoreValue | r1047_8 | | ir.cpp:1047:68:1047:68 | Unary | r1047_7 | @@ -5097,9 +5097,6 @@ | ir.cpp:1051:39:1051:39 | SideEffect | ~m1051_20 | | ir.cpp:1051:46:1051:46 | Address | &:r1051_9 | | ir.cpp:1051:51:1051:70 | Address | &:r1051_11 | -| ir.cpp:1051:58:1051:58 | Address | &:r1051_16 | -| ir.cpp:1051:58:1051:58 | Arg(this) | this:r1051_16 | -| ir.cpp:1051:58:1051:58 | SideEffect | ~m1051_20 | | ir.cpp:1051:58:1051:69 | Address | &:r1051_22 | | ir.cpp:1051:58:1051:69 | Address | &:r1051_24 | | ir.cpp:1051:58:1051:69 | Address | &:r1051_26 | @@ -5120,6 +5117,9 @@ | ir.cpp:1051:60:1051:64 | SideEffect | ~m1051_4 | | ir.cpp:1051:60:1051:64 | Unary | r1051_13 | | ir.cpp:1051:60:1051:64 | Unary | r1051_15 | +| ir.cpp:1051:67:1051:67 | Address | &:r1051_16 | +| ir.cpp:1051:67:1051:67 | Arg(this) | this:r1051_16 | +| ir.cpp:1051:67:1051:67 | SideEffect | ~m1051_20 | | ir.cpp:1051:73:1051:73 | ChiPartial | partial:m1051_9 | | ir.cpp:1051:73:1051:73 | ChiTotal | total:m1051_3 | | ir.cpp:1051:73:1051:73 | StoreValue | r1051_8 | @@ -5184,9 +5184,6 @@ | ir.cpp:1054:49:1054:49 | SideEffect | ~m1054_20 | | ir.cpp:1054:56:1054:56 | Address | &:r1054_9 | | ir.cpp:1054:61:1054:88 | Address | &:r1054_11 | -| ir.cpp:1054:68:1054:68 | Address | &:r1054_16 | -| ir.cpp:1054:68:1054:68 | Arg(this) | this:r1054_16 | -| ir.cpp:1054:68:1054:68 | SideEffect | ~m1054_20 | | ir.cpp:1054:68:1054:87 | Address | &:r1054_37 | | ir.cpp:1054:68:1054:87 | Load | ~m1054_20 | | ir.cpp:1054:68:1054:87 | StoreValue | r1054_38 | @@ -5201,6 +5198,9 @@ | ir.cpp:1054:70:1054:74 | SideEffect | ~m1054_4 | | ir.cpp:1054:70:1054:74 | Unary | r1054_13 | | ir.cpp:1054:70:1054:74 | Unary | r1054_15 | +| ir.cpp:1054:77:1054:77 | Address | &:r1054_16 | +| ir.cpp:1054:77:1054:77 | Arg(this) | this:r1054_16 | +| ir.cpp:1054:77:1054:77 | SideEffect | ~m1054_20 | | ir.cpp:1054:78:1054:82 | Address | &:r1054_22 | | ir.cpp:1054:78:1054:82 | Address | &:r1054_24 | | ir.cpp:1054:78:1054:82 | Left | r1054_25 | @@ -8215,6 +8215,248 @@ | ir.cpp:1754:42:1754:42 | SideEffect | ~m1752_4 | | ir.cpp:1754:42:1754:42 | Unary | r1754_5 | | ir.cpp:1754:42:1754:42 | Unary | r1754_6 | +| ir.cpp:1757:6:1757:22 | ChiPartial | partial:m1757_3 | +| ir.cpp:1757:6:1757:22 | ChiTotal | total:m1757_2 | +| ir.cpp:1757:6:1757:22 | SideEffect | m1757_3 | +| ir.cpp:1757:28:1757:28 | Address | &:r1757_5 | +| ir.cpp:1758:13:1758:13 | Address | &:r1758_1 | +| ir.cpp:1758:17:1758:17 | Address | &:r1758_2 | +| ir.cpp:1758:17:1758:17 | Load | m1757_6 | +| ir.cpp:1758:17:1758:17 | StoreValue | r1758_3 | +| ir.cpp:1758:20:1758:20 | Address | &:r1758_5 | +| ir.cpp:1758:20:1758:20 | Left | r1758_6 | +| ir.cpp:1758:20:1758:20 | Load | m1757_6 | +| ir.cpp:1758:20:1758:24 | Condition | r1758_10 | +| ir.cpp:1758:20:1758:24 | Left | r1758_8 | +| ir.cpp:1758:20:1758:24 | Right | r1758_9 | +| ir.cpp:1758:24:1758:24 | Right | r1758_7 | +| ir.cpp:1759:9:1759:9 | Address | &:r1759_6 | +| ir.cpp:1759:13:1759:13 | Address | &:r1759_1 | +| ir.cpp:1759:13:1759:13 | Left | r1759_2 | +| ir.cpp:1759:13:1759:13 | Load | m1757_6 | +| ir.cpp:1759:13:1759:17 | StoreValue | r1759_5 | +| ir.cpp:1759:17:1759:17 | Address | &:r1759_3 | +| ir.cpp:1759:17:1759:17 | Load | m1758_4 | +| ir.cpp:1759:17:1759:17 | Right | r1759_4 | +| ir.cpp:1762:9:1762:9 | Address | &:r1762_2 | +| ir.cpp:1762:9:1762:9 | Phi | from 0:m1757_6 | +| ir.cpp:1762:9:1762:9 | Phi | from 1:m1759_7 | +| ir.cpp:1763:9:1763:9 | Address | &:r1763_3 | +| ir.cpp:1763:13:1763:13 | Address | &:r1763_1 | +| ir.cpp:1763:13:1763:13 | Load | m1762_1 | +| ir.cpp:1763:13:1763:13 | StoreValue | r1763_2 | +| ir.cpp:1763:16:1763:16 | Address | &:r1763_5 | +| ir.cpp:1763:16:1763:16 | Left | r1763_6 | +| ir.cpp:1763:16:1763:16 | Load | m1762_1 | +| ir.cpp:1763:16:1763:20 | Condition | r1763_10 | +| ir.cpp:1763:16:1763:20 | Left | r1763_8 | +| ir.cpp:1763:16:1763:20 | Right | r1763_9 | +| ir.cpp:1763:20:1763:20 | Right | r1763_7 | +| ir.cpp:1764:9:1764:9 | Address | &:r1764_6 | +| ir.cpp:1764:13:1764:13 | Address | &:r1764_1 | +| ir.cpp:1764:13:1764:13 | Left | r1764_2 | +| ir.cpp:1764:13:1764:13 | Load | m1762_1 | +| ir.cpp:1764:13:1764:17 | StoreValue | r1764_5 | +| ir.cpp:1764:17:1764:17 | Address | &:r1764_3 | +| ir.cpp:1764:17:1764:17 | Load | m1763_4 | +| ir.cpp:1764:17:1764:17 | Right | r1764_4 | +| ir.cpp:1767:9:1767:9 | Address | &:r1767_4 | +| ir.cpp:1767:13:1767:13 | Address | &:r1767_2 | +| ir.cpp:1767:13:1767:13 | Load | m1767_1 | +| ir.cpp:1767:13:1767:13 | Phi | from 2:m1762_1 | +| ir.cpp:1767:13:1767:13 | Phi | from 3:m1764_7 | +| ir.cpp:1767:13:1767:13 | StoreValue | r1767_3 | +| ir.cpp:1767:14:1767:25 | Address | &:r1767_6 | +| ir.cpp:1767:14:1767:25 | Condition | r1767_14 | +| ir.cpp:1767:20:1767:21 | Address | &:r1767_10 | +| ir.cpp:1767:20:1767:21 | Left | r1767_11 | +| ir.cpp:1767:20:1767:21 | Load | m1767_9 | +| ir.cpp:1767:20:1767:21 | Right | r1767_12 | +| ir.cpp:1767:20:1767:21 | Unary | r1767_13 | +| ir.cpp:1767:25:1767:25 | Address | &:r1767_7 | +| ir.cpp:1767:25:1767:25 | Load | m1767_5 | +| ir.cpp:1767:25:1767:25 | StoreValue | r1767_8 | +| ir.cpp:1768:9:1768:9 | Address | &:r1768_6 | +| ir.cpp:1768:13:1768:13 | Address | &:r1768_1 | +| ir.cpp:1768:13:1768:13 | Left | r1768_2 | +| ir.cpp:1768:13:1768:13 | Load | m1767_1 | +| ir.cpp:1768:13:1768:17 | StoreValue | r1768_5 | +| ir.cpp:1768:17:1768:17 | Address | &:r1768_3 | +| ir.cpp:1768:17:1768:17 | Load | m1767_5 | +| ir.cpp:1768:17:1768:17 | Right | r1768_4 | +| ir.cpp:1771:9:1771:29 | Address | &:r1771_6 | +| ir.cpp:1771:9:1771:29 | Condition | r1771_14 | +| ir.cpp:1771:13:1771:13 | Address | &:r1771_2 | +| ir.cpp:1771:13:1771:13 | Phi | from 4:m1767_1 | +| ir.cpp:1771:13:1771:13 | Phi | from 5:m1768_7 | +| ir.cpp:1771:17:1771:17 | Address | &:r1771_3 | +| ir.cpp:1771:17:1771:17 | Load | m1771_1 | +| ir.cpp:1771:17:1771:17 | StoreValue | r1771_4 | +| ir.cpp:1771:24:1771:25 | Address | &:r1771_10 | +| ir.cpp:1771:24:1771:25 | Left | r1771_11 | +| ir.cpp:1771:24:1771:25 | Load | m1771_9 | +| ir.cpp:1771:24:1771:25 | Right | r1771_12 | +| ir.cpp:1771:24:1771:25 | Unary | r1771_13 | +| ir.cpp:1771:29:1771:29 | Address | &:r1771_7 | +| ir.cpp:1771:29:1771:29 | Load | m1771_5 | +| ir.cpp:1771:29:1771:29 | StoreValue | r1771_8 | +| ir.cpp:1772:9:1772:9 | Address | &:r1772_6 | +| ir.cpp:1772:13:1772:13 | Address | &:r1772_1 | +| ir.cpp:1772:13:1772:13 | Left | r1772_2 | +| ir.cpp:1772:13:1772:13 | Load | m1771_1 | +| ir.cpp:1772:13:1772:17 | StoreValue | r1772_5 | +| ir.cpp:1772:17:1772:17 | Address | &:r1772_3 | +| ir.cpp:1772:17:1772:17 | Load | m1771_5 | +| ir.cpp:1772:17:1772:17 | Right | r1772_4 | +| ir.cpp:1775:9:1775:9 | Address | &:r1775_2 | +| ir.cpp:1775:9:1775:9 | Phi | from 6:m1771_1 | +| ir.cpp:1775:9:1775:9 | Phi | from 7:m1772_7 | +| ir.cpp:1775:13:1775:13 | Address | &:r1775_3 | +| ir.cpp:1775:13:1775:13 | Load | m1775_1 | +| ir.cpp:1775:13:1775:13 | StoreValue | r1775_4 | +| ir.cpp:1776:9:1776:9 | Address | &:r1776_1 | +| ir.cpp:1776:9:1776:9 | Condition | r1776_4 | +| ir.cpp:1776:9:1776:9 | Left | r1776_2 | +| ir.cpp:1776:9:1776:9 | Load | m1775_5 | +| ir.cpp:1776:9:1776:9 | Right | r1776_3 | +| ir.cpp:1777:9:1777:9 | Address | &:r1777_6 | +| ir.cpp:1777:13:1777:13 | Address | &:r1777_1 | +| ir.cpp:1777:13:1777:13 | Left | r1777_2 | +| ir.cpp:1777:13:1777:13 | Load | m1775_1 | +| ir.cpp:1777:13:1777:17 | StoreValue | r1777_5 | +| ir.cpp:1777:17:1777:17 | Address | &:r1777_3 | +| ir.cpp:1777:17:1777:17 | Load | m1775_5 | +| ir.cpp:1777:17:1777:17 | Right | r1777_4 | +| ir.cpp:1780:9:1780:18 | Address | &:r1780_2 | +| ir.cpp:1780:9:1780:18 | Condition | r1780_10 | +| ir.cpp:1780:9:1780:18 | Phi | from 8:m1775_1 | +| ir.cpp:1780:9:1780:18 | Phi | from 9:m1777_7 | +| ir.cpp:1780:13:1780:14 | Address | &:r1780_6 | +| ir.cpp:1780:13:1780:14 | Left | r1780_7 | +| ir.cpp:1780:13:1780:14 | Load | m1780_5 | +| ir.cpp:1780:13:1780:14 | Right | r1780_8 | +| ir.cpp:1780:13:1780:14 | Unary | r1780_9 | +| ir.cpp:1780:18:1780:18 | Address | &:r1780_3 | +| ir.cpp:1780:18:1780:18 | Load | m1775_5 | +| ir.cpp:1780:18:1780:18 | StoreValue | r1780_4 | +| ir.cpp:1781:9:1781:9 | Address | &:r1781_3 | +| ir.cpp:1781:9:1781:9 | Address | &:r1781_3 | +| ir.cpp:1781:9:1781:9 | Left | r1781_4 | +| ir.cpp:1781:9:1781:9 | Load | m1780_1 | +| ir.cpp:1781:9:1781:15 | StoreValue | r1781_5 | +| ir.cpp:1781:14:1781:15 | Address | &:r1781_1 | +| ir.cpp:1781:14:1781:15 | Load | m1780_5 | +| ir.cpp:1781:14:1781:15 | Right | r1781_2 | +| ir.cpp:1785:6:1785:26 | ChiPartial | partial:m1785_3 | +| ir.cpp:1785:6:1785:26 | ChiTotal | total:m1785_2 | +| ir.cpp:1785:6:1785:26 | SideEffect | m1785_3 | +| ir.cpp:1785:32:1785:32 | Address | &:r1785_5 | +| ir.cpp:1786:17:1786:17 | Address | &:r1786_1 | +| ir.cpp:1786:21:1786:21 | Address | &:r1786_2 | +| ir.cpp:1786:21:1786:21 | Load | m1785_6 | +| ir.cpp:1786:21:1786:21 | StoreValue | r1786_3 | +| ir.cpp:1786:24:1786:24 | Address | &:r1786_5 | +| ir.cpp:1786:24:1786:24 | Left | r1786_6 | +| ir.cpp:1786:24:1786:24 | Load | m1785_6 | +| ir.cpp:1786:24:1786:28 | Condition | r1786_8 | +| ir.cpp:1786:28:1786:28 | Right | r1786_7 | +| ir.cpp:1788:9:1788:9 | Address | &:r1788_6 | +| ir.cpp:1788:13:1788:13 | Address | &:r1788_1 | +| ir.cpp:1788:13:1788:13 | Left | r1788_2 | +| ir.cpp:1788:13:1788:13 | Load | m1785_6 | +| ir.cpp:1788:13:1788:17 | StoreValue | r1788_5 | +| ir.cpp:1788:17:1788:17 | Address | &:r1788_3 | +| ir.cpp:1788:17:1788:17 | Load | m1786_4 | +| ir.cpp:1788:17:1788:17 | Right | r1788_4 | +| ir.cpp:1791:9:1791:9 | Address | &:r1791_1 | +| ir.cpp:1792:13:1792:13 | Address | &:r1792_3 | +| ir.cpp:1792:17:1792:17 | Address | &:r1792_1 | +| ir.cpp:1792:17:1792:17 | Load | m1788_7 | +| ir.cpp:1792:17:1792:17 | StoreValue | r1792_2 | +| ir.cpp:1792:20:1792:20 | Address | &:r1792_5 | +| ir.cpp:1792:20:1792:20 | Left | r1792_6 | +| ir.cpp:1792:20:1792:20 | Load | m1788_7 | +| ir.cpp:1792:20:1792:24 | Condition | r1792_8 | +| ir.cpp:1792:24:1792:24 | Right | r1792_7 | +| ir.cpp:1794:9:1794:9 | Address | &:r1794_6 | +| ir.cpp:1794:13:1794:13 | Address | &:r1794_1 | +| ir.cpp:1794:13:1794:13 | Left | r1794_2 | +| ir.cpp:1794:13:1794:13 | Load | m1788_7 | +| ir.cpp:1794:13:1794:17 | StoreValue | r1794_5 | +| ir.cpp:1794:17:1794:17 | Address | &:r1794_3 | +| ir.cpp:1794:17:1794:17 | Load | m1792_4 | +| ir.cpp:1794:17:1794:17 | Right | r1794_4 | +| ir.cpp:1797:13:1797:13 | Address | &:r1797_3 | +| ir.cpp:1797:17:1797:17 | Address | &:r1797_1 | +| ir.cpp:1797:17:1797:17 | Load | m1794_7 | +| ir.cpp:1797:17:1797:17 | StoreValue | r1797_2 | +| ir.cpp:1797:18:1797:29 | Address | &:r1797_5 | +| ir.cpp:1797:18:1797:29 | Condition | r1797_11 | +| ir.cpp:1797:24:1797:25 | Address | &:r1797_9 | +| ir.cpp:1797:24:1797:25 | Load | m1797_8 | +| ir.cpp:1797:24:1797:25 | Unary | r1797_10 | +| ir.cpp:1797:29:1797:29 | Address | &:r1797_6 | +| ir.cpp:1797:29:1797:29 | Load | m1797_4 | +| ir.cpp:1797:29:1797:29 | StoreValue | r1797_7 | +| ir.cpp:1799:9:1799:9 | Address | &:r1799_6 | +| ir.cpp:1799:13:1799:13 | Address | &:r1799_1 | +| ir.cpp:1799:13:1799:13 | Left | r1799_2 | +| ir.cpp:1799:13:1799:13 | Load | m1794_7 | +| ir.cpp:1799:13:1799:17 | StoreValue | r1799_5 | +| ir.cpp:1799:17:1799:17 | Address | &:r1799_3 | +| ir.cpp:1799:17:1799:17 | Load | m1797_4 | +| ir.cpp:1799:17:1799:17 | Right | r1799_4 | +| ir.cpp:1802:13:1802:33 | Address | &:r1802_5 | +| ir.cpp:1802:13:1802:33 | Condition | r1802_11 | +| ir.cpp:1802:17:1802:17 | Address | &:r1802_1 | +| ir.cpp:1802:21:1802:21 | Address | &:r1802_2 | +| ir.cpp:1802:21:1802:21 | Load | m1799_7 | +| ir.cpp:1802:21:1802:21 | StoreValue | r1802_3 | +| ir.cpp:1802:28:1802:29 | Address | &:r1802_9 | +| ir.cpp:1802:28:1802:29 | Load | m1802_8 | +| ir.cpp:1802:28:1802:29 | Unary | r1802_10 | +| ir.cpp:1802:33:1802:33 | Address | &:r1802_6 | +| ir.cpp:1802:33:1802:33 | Load | m1802_4 | +| ir.cpp:1802:33:1802:33 | StoreValue | r1802_7 | +| ir.cpp:1804:9:1804:9 | Address | &:r1804_6 | +| ir.cpp:1804:13:1804:13 | Address | &:r1804_1 | +| ir.cpp:1804:13:1804:13 | Left | r1804_2 | +| ir.cpp:1804:13:1804:13 | Load | m1799_7 | +| ir.cpp:1804:13:1804:17 | StoreValue | r1804_5 | +| ir.cpp:1804:17:1804:17 | Address | &:r1804_3 | +| ir.cpp:1804:17:1804:17 | Load | m1802_4 | +| ir.cpp:1804:17:1804:17 | Right | r1804_4 | +| ir.cpp:1807:9:1807:9 | Address | &:r1807_1 | +| ir.cpp:1807:13:1807:13 | Address | &:r1807_2 | +| ir.cpp:1807:13:1807:13 | Load | m1804_7 | +| ir.cpp:1807:13:1807:13 | StoreValue | r1807_3 | +| ir.cpp:1808:13:1808:13 | Address | &:r1808_1 | +| ir.cpp:1808:13:1808:13 | Condition | r1808_2 | +| ir.cpp:1808:13:1808:13 | Load | m1807_4 | +| ir.cpp:1810:9:1810:9 | Address | &:r1810_6 | +| ir.cpp:1810:13:1810:13 | Address | &:r1810_1 | +| ir.cpp:1810:13:1810:13 | Left | r1810_2 | +| ir.cpp:1810:13:1810:13 | Load | m1804_7 | +| ir.cpp:1810:13:1810:17 | StoreValue | r1810_5 | +| ir.cpp:1810:17:1810:17 | Address | &:r1810_3 | +| ir.cpp:1810:17:1810:17 | Load | m1807_4 | +| ir.cpp:1810:17:1810:17 | Right | r1810_4 | +| ir.cpp:1813:13:1813:22 | Address | &:r1813_1 | +| ir.cpp:1813:13:1813:22 | Condition | r1813_7 | +| ir.cpp:1813:17:1813:18 | Address | &:r1813_5 | +| ir.cpp:1813:17:1813:18 | Load | m1813_4 | +| ir.cpp:1813:17:1813:18 | Unary | r1813_6 | +| ir.cpp:1813:22:1813:22 | Address | &:r1813_2 | +| ir.cpp:1813:22:1813:22 | Load | m1807_4 | +| ir.cpp:1813:22:1813:22 | StoreValue | r1813_3 | +| ir.cpp:1815:9:1815:9 | Address | &:r1815_3 | +| ir.cpp:1815:9:1815:9 | Address | &:r1815_3 | +| ir.cpp:1815:9:1815:9 | Left | r1815_4 | +| ir.cpp:1815:9:1815:9 | Load | m1810_7 | +| ir.cpp:1815:9:1815:15 | StoreValue | r1815_5 | +| ir.cpp:1815:14:1815:15 | Address | &:r1815_1 | +| ir.cpp:1815:14:1815:15 | Load | m1813_4 | +| ir.cpp:1815:14:1815:15 | Right | r1815_2 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_7 | 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 3f49642c4fb..17c59485eb9 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -9418,6 +9418,308 @@ ir.cpp: # 1750| v1750_6(void) = AliasedUse : ~m? # 1750| v1750_7(void) = ExitFunction : +# 1757| void if_initialization(int) +# 1757| Block 0 +# 1757| v1757_1(void) = EnterFunction : +# 1757| mu1757_2(unknown) = AliasedDefinition : +# 1757| mu1757_3(unknown) = InitializeNonLocal : +# 1757| r1757_4(glval) = VariableAddress[x] : +# 1757| mu1757_5(int) = InitializeParameter[x] : &:r1757_4 +# 1758| r1758_1(glval) = VariableAddress[y] : +# 1758| r1758_2(glval) = VariableAddress[x] : +# 1758| r1758_3(int) = Load[x] : &:r1758_2, ~m? +# 1758| mu1758_4(int) = Store[y] : &:r1758_1, r1758_3 +# 1758| r1758_5(glval) = VariableAddress[x] : +# 1758| r1758_6(int) = Load[x] : &:r1758_5, ~m? +# 1758| r1758_7(int) = Constant[1] : +# 1758| r1758_8(int) = Add : r1758_6, r1758_7 +# 1758| r1758_9(int) = Constant[0] : +# 1758| r1758_10(bool) = CompareNE : r1758_8, r1758_9 +# 1758| v1758_11(void) = ConditionalBranch : r1758_10 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 1759| Block 1 +# 1759| r1759_1(glval) = VariableAddress[x] : +# 1759| r1759_2(int) = Load[x] : &:r1759_1, ~m? +# 1759| r1759_3(glval) = VariableAddress[y] : +# 1759| r1759_4(int) = Load[y] : &:r1759_3, ~m? +# 1759| r1759_5(int) = Add : r1759_2, r1759_4 +# 1759| r1759_6(glval) = VariableAddress[x] : +# 1759| mu1759_7(int) = Store[x] : &:r1759_6, r1759_5 +#-----| Goto -> Block 2 + +# 1762| Block 2 +# 1762| r1762_1(glval) = VariableAddress[w] : +# 1762| mu1762_2(int) = Uninitialized[w] : &:r1762_1 +# 1763| r1763_1(glval) = VariableAddress[x] : +# 1763| r1763_2(int) = Load[x] : &:r1763_1, ~m? +# 1763| r1763_3(glval) = VariableAddress[w] : +# 1763| mu1763_4(int) = Store[w] : &:r1763_3, r1763_2 +# 1763| r1763_5(glval) = VariableAddress[x] : +# 1763| r1763_6(int) = Load[x] : &:r1763_5, ~m? +# 1763| r1763_7(int) = Constant[1] : +# 1763| r1763_8(int) = Add : r1763_6, r1763_7 +# 1763| r1763_9(int) = Constant[0] : +# 1763| r1763_10(bool) = CompareNE : r1763_8, r1763_9 +# 1763| v1763_11(void) = ConditionalBranch : r1763_10 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 1764| Block 3 +# 1764| r1764_1(glval) = VariableAddress[x] : +# 1764| r1764_2(int) = Load[x] : &:r1764_1, ~m? +# 1764| r1764_3(glval) = VariableAddress[w] : +# 1764| r1764_4(int) = Load[w] : &:r1764_3, ~m? +# 1764| r1764_5(int) = Add : r1764_2, r1764_4 +# 1764| r1764_6(glval) = VariableAddress[x] : +# 1764| mu1764_7(int) = Store[x] : &:r1764_6, r1764_5 +#-----| Goto -> Block 4 + +# 1767| Block 4 +# 1767| r1767_1(glval) = VariableAddress[x] : +# 1767| r1767_2(int) = Load[x] : &:r1767_1, ~m? +# 1767| r1767_3(glval) = VariableAddress[w] : +# 1767| mu1767_4(int) = Store[w] : &:r1767_3, r1767_2 +# 1767| r1767_5(glval) = VariableAddress[w2] : +# 1767| r1767_6(glval) = VariableAddress[w] : +# 1767| r1767_7(int) = Load[w] : &:r1767_6, ~m? +# 1767| mu1767_8(int) = Store[w2] : &:r1767_5, r1767_7 +# 1767| r1767_9(glval) = VariableAddress[w2] : +# 1767| r1767_10(int) = Load[w2] : &:r1767_9, ~m? +# 1767| r1767_11(int) = Constant[0] : +# 1767| r1767_12(bool) = CompareNE : r1767_10, r1767_11 +# 1767| r1767_13(bool) = CopyValue : r1767_12 +# 1767| v1767_14(void) = ConditionalBranch : r1767_13 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 1768| Block 5 +# 1768| r1768_1(glval) = VariableAddress[x] : +# 1768| r1768_2(int) = Load[x] : &:r1768_1, ~m? +# 1768| r1768_3(glval) = VariableAddress[w] : +# 1768| r1768_4(int) = Load[w] : &:r1768_3, ~m? +# 1768| r1768_5(int) = Add : r1768_2, r1768_4 +# 1768| r1768_6(glval) = VariableAddress[x] : +# 1768| mu1768_7(int) = Store[x] : &:r1768_6, r1768_5 +#-----| Goto -> Block 6 + +# 1771| Block 6 +# 1771| r1771_1(glval) = VariableAddress[v] : +# 1771| r1771_2(glval) = VariableAddress[x] : +# 1771| r1771_3(int) = Load[x] : &:r1771_2, ~m? +# 1771| mu1771_4(int) = Store[v] : &:r1771_1, r1771_3 +# 1771| r1771_5(glval) = VariableAddress[v2] : +# 1771| r1771_6(glval) = VariableAddress[v] : +# 1771| r1771_7(int) = Load[v] : &:r1771_6, ~m? +# 1771| mu1771_8(int) = Store[v2] : &:r1771_5, r1771_7 +# 1771| r1771_9(glval) = VariableAddress[v2] : +# 1771| r1771_10(int) = Load[v2] : &:r1771_9, ~m? +# 1771| r1771_11(int) = Constant[0] : +# 1771| r1771_12(bool) = CompareNE : r1771_10, r1771_11 +# 1771| r1771_13(bool) = CopyValue : r1771_12 +# 1771| v1771_14(void) = ConditionalBranch : r1771_13 +#-----| False -> Block 8 +#-----| True -> Block 7 + +# 1772| Block 7 +# 1772| r1772_1(glval) = VariableAddress[x] : +# 1772| r1772_2(int) = Load[x] : &:r1772_1, ~m? +# 1772| r1772_3(glval) = VariableAddress[v] : +# 1772| r1772_4(int) = Load[v] : &:r1772_3, ~m? +# 1772| r1772_5(int) = Add : r1772_2, r1772_4 +# 1772| r1772_6(glval) = VariableAddress[x] : +# 1772| mu1772_7(int) = Store[x] : &:r1772_6, r1772_5 +#-----| Goto -> Block 8 + +# 1775| Block 8 +# 1775| r1775_1(glval) = VariableAddress[z] : +# 1775| r1775_2(glval) = VariableAddress[x] : +# 1775| r1775_3(int) = Load[x] : &:r1775_2, ~m? +# 1775| mu1775_4(int) = Store[z] : &:r1775_1, r1775_3 +# 1776| r1776_1(glval) = VariableAddress[z] : +# 1776| r1776_2(int) = Load[z] : &:r1776_1, ~m? +# 1776| r1776_3(int) = Constant[0] : +# 1776| r1776_4(bool) = CompareNE : r1776_2, r1776_3 +# 1776| v1776_5(void) = ConditionalBranch : r1776_4 +#-----| False -> Block 10 +#-----| True -> Block 9 + +# 1777| Block 9 +# 1777| r1777_1(glval) = VariableAddress[x] : +# 1777| r1777_2(int) = Load[x] : &:r1777_1, ~m? +# 1777| r1777_3(glval) = VariableAddress[z] : +# 1777| r1777_4(int) = Load[z] : &:r1777_3, ~m? +# 1777| r1777_5(int) = Add : r1777_2, r1777_4 +# 1777| r1777_6(glval) = VariableAddress[x] : +# 1777| mu1777_7(int) = Store[x] : &:r1777_6, r1777_5 +#-----| Goto -> Block 10 + +# 1780| Block 10 +# 1780| r1780_1(glval) = VariableAddress[z2] : +# 1780| r1780_2(glval) = VariableAddress[z] : +# 1780| r1780_3(int) = Load[z] : &:r1780_2, ~m? +# 1780| mu1780_4(int) = Store[z2] : &:r1780_1, r1780_3 +# 1780| r1780_5(glval) = VariableAddress[z2] : +# 1780| r1780_6(int) = Load[z2] : &:r1780_5, ~m? +# 1780| r1780_7(int) = Constant[0] : +# 1780| r1780_8(bool) = CompareNE : r1780_6, r1780_7 +# 1780| r1780_9(bool) = CopyValue : r1780_8 +# 1780| v1780_10(void) = ConditionalBranch : r1780_9 +#-----| False -> Block 12 +#-----| True -> Block 11 + +# 1781| Block 11 +# 1781| r1781_1(glval) = VariableAddress[z2] : +# 1781| r1781_2(int) = Load[z2] : &:r1781_1, ~m? +# 1781| r1781_3(glval) = VariableAddress[x] : +# 1781| r1781_4(int) = Load[x] : &:r1781_3, ~m? +# 1781| r1781_5(int) = Add : r1781_4, r1781_2 +# 1781| mu1781_6(int) = Store[x] : &:r1781_3, r1781_5 +#-----| Goto -> Block 12 + +# 1783| Block 12 +# 1783| v1783_1(void) = NoOp : +# 1757| v1757_6(void) = ReturnVoid : +# 1757| v1757_7(void) = AliasedUse : ~m? +# 1757| v1757_8(void) = ExitFunction : + +# 1785| void switch_initialization(int) +# 1785| Block 0 +# 1785| v1785_1(void) = EnterFunction : +# 1785| mu1785_2(unknown) = AliasedDefinition : +# 1785| mu1785_3(unknown) = InitializeNonLocal : +# 1785| r1785_4(glval) = VariableAddress[x] : +# 1785| mu1785_5(int) = InitializeParameter[x] : &:r1785_4 +# 1786| r1786_1(glval) = VariableAddress[y] : +# 1786| r1786_2(glval) = VariableAddress[x] : +# 1786| r1786_3(int) = Load[x] : &:r1786_2, ~m? +# 1786| mu1786_4(int) = Store[y] : &:r1786_1, r1786_3 +# 1786| r1786_5(glval) = VariableAddress[x] : +# 1786| r1786_6(int) = Load[x] : &:r1786_5, ~m? +# 1786| r1786_7(int) = Constant[1] : +# 1786| r1786_8(int) = Add : r1786_6, r1786_7 +# 1786| v1786_9(void) = Switch : r1786_8 +#-----| Default -> Block 1 + +# 1787| Block 1 +# 1787| v1787_1(void) = NoOp : +# 1788| r1788_1(glval) = VariableAddress[x] : +# 1788| r1788_2(int) = Load[x] : &:r1788_1, ~m? +# 1788| r1788_3(glval) = VariableAddress[y] : +# 1788| r1788_4(int) = Load[y] : &:r1788_3, ~m? +# 1788| r1788_5(int) = Add : r1788_2, r1788_4 +# 1788| r1788_6(glval) = VariableAddress[x] : +# 1788| mu1788_7(int) = Store[x] : &:r1788_6, r1788_5 +# 1791| r1791_1(glval) = VariableAddress[w] : +# 1791| mu1791_2(int) = Uninitialized[w] : &:r1791_1 +# 1792| r1792_1(glval) = VariableAddress[x] : +# 1792| r1792_2(int) = Load[x] : &:r1792_1, ~m? +# 1792| r1792_3(glval) = VariableAddress[w] : +# 1792| mu1792_4(int) = Store[w] : &:r1792_3, r1792_2 +# 1792| r1792_5(glval) = VariableAddress[x] : +# 1792| r1792_6(int) = Load[x] : &:r1792_5, ~m? +# 1792| r1792_7(int) = Constant[1] : +# 1792| r1792_8(int) = Add : r1792_6, r1792_7 +# 1792| v1792_9(void) = Switch : r1792_8 +#-----| Default -> Block 2 + +# 1793| Block 2 +# 1793| v1793_1(void) = NoOp : +# 1794| r1794_1(glval) = VariableAddress[x] : +# 1794| r1794_2(int) = Load[x] : &:r1794_1, ~m? +# 1794| r1794_3(glval) = VariableAddress[w] : +# 1794| r1794_4(int) = Load[w] : &:r1794_3, ~m? +# 1794| r1794_5(int) = Add : r1794_2, r1794_4 +# 1794| r1794_6(glval) = VariableAddress[x] : +# 1794| mu1794_7(int) = Store[x] : &:r1794_6, r1794_5 +# 1797| r1797_1(glval) = VariableAddress[x] : +# 1797| r1797_2(int) = Load[x] : &:r1797_1, ~m? +# 1797| r1797_3(glval) = VariableAddress[w] : +# 1797| mu1797_4(int) = Store[w] : &:r1797_3, r1797_2 +# 1797| r1797_5(glval) = VariableAddress[w2] : +# 1797| r1797_6(glval) = VariableAddress[w] : +# 1797| r1797_7(int) = Load[w] : &:r1797_6, ~m? +# 1797| mu1797_8(int) = Store[w2] : &:r1797_5, r1797_7 +# 1797| r1797_9(glval) = VariableAddress[w2] : +# 1797| r1797_10(int) = Load[w2] : &:r1797_9, ~m? +# 1797| r1797_11(int) = CopyValue : r1797_10 +# 1797| v1797_12(void) = Switch : r1797_11 +#-----| Default -> Block 3 + +# 1798| Block 3 +# 1798| v1798_1(void) = NoOp : +# 1799| r1799_1(glval) = VariableAddress[x] : +# 1799| r1799_2(int) = Load[x] : &:r1799_1, ~m? +# 1799| r1799_3(glval) = VariableAddress[w] : +# 1799| r1799_4(int) = Load[w] : &:r1799_3, ~m? +# 1799| r1799_5(int) = Add : r1799_2, r1799_4 +# 1799| r1799_6(glval) = VariableAddress[x] : +# 1799| mu1799_7(int) = Store[x] : &:r1799_6, r1799_5 +# 1802| r1802_1(glval) = VariableAddress[v] : +# 1802| r1802_2(glval) = VariableAddress[x] : +# 1802| r1802_3(int) = Load[x] : &:r1802_2, ~m? +# 1802| mu1802_4(int) = Store[v] : &:r1802_1, r1802_3 +# 1802| r1802_5(glval) = VariableAddress[v2] : +# 1802| r1802_6(glval) = VariableAddress[v] : +# 1802| r1802_7(int) = Load[v] : &:r1802_6, ~m? +# 1802| mu1802_8(int) = Store[v2] : &:r1802_5, r1802_7 +# 1802| r1802_9(glval) = VariableAddress[v2] : +# 1802| r1802_10(int) = Load[v2] : &:r1802_9, ~m? +# 1802| r1802_11(int) = CopyValue : r1802_10 +# 1802| v1802_12(void) = Switch : r1802_11 +#-----| Default -> Block 4 + +# 1803| Block 4 +# 1803| v1803_1(void) = NoOp : +# 1804| r1804_1(glval) = VariableAddress[x] : +# 1804| r1804_2(int) = Load[x] : &:r1804_1, ~m? +# 1804| r1804_3(glval) = VariableAddress[v] : +# 1804| r1804_4(int) = Load[v] : &:r1804_3, ~m? +# 1804| r1804_5(int) = Add : r1804_2, r1804_4 +# 1804| r1804_6(glval) = VariableAddress[x] : +# 1804| mu1804_7(int) = Store[x] : &:r1804_6, r1804_5 +# 1807| r1807_1(glval) = VariableAddress[z] : +# 1807| r1807_2(glval) = VariableAddress[x] : +# 1807| r1807_3(int) = Load[x] : &:r1807_2, ~m? +# 1807| mu1807_4(int) = Store[z] : &:r1807_1, r1807_3 +# 1808| r1808_1(glval) = VariableAddress[z] : +# 1808| r1808_2(int) = Load[z] : &:r1808_1, ~m? +# 1808| v1808_3(void) = Switch : r1808_2 +#-----| Default -> Block 5 + +# 1809| Block 5 +# 1809| v1809_1(void) = NoOp : +# 1810| r1810_1(glval) = VariableAddress[x] : +# 1810| r1810_2(int) = Load[x] : &:r1810_1, ~m? +# 1810| r1810_3(glval) = VariableAddress[z] : +# 1810| r1810_4(int) = Load[z] : &:r1810_3, ~m? +# 1810| r1810_5(int) = Add : r1810_2, r1810_4 +# 1810| r1810_6(glval) = VariableAddress[x] : +# 1810| mu1810_7(int) = Store[x] : &:r1810_6, r1810_5 +# 1813| r1813_1(glval) = VariableAddress[z2] : +# 1813| r1813_2(glval) = VariableAddress[z] : +# 1813| r1813_3(int) = Load[z] : &:r1813_2, ~m? +# 1813| mu1813_4(int) = Store[z2] : &:r1813_1, r1813_3 +# 1813| r1813_5(glval) = VariableAddress[z2] : +# 1813| r1813_6(int) = Load[z2] : &:r1813_5, ~m? +# 1813| r1813_7(int) = CopyValue : r1813_6 +# 1813| v1813_8(void) = Switch : r1813_7 +#-----| Default -> Block 6 + +# 1814| Block 6 +# 1814| v1814_1(void) = NoOp : +# 1815| r1815_1(glval) = VariableAddress[z2] : +# 1815| r1815_2(int) = Load[z2] : &:r1815_1, ~m? +# 1815| r1815_3(glval) = VariableAddress[x] : +# 1815| r1815_4(int) = Load[x] : &:r1815_3, ~m? +# 1815| r1815_5(int) = Add : r1815_4, r1815_2 +# 1815| mu1815_6(int) = Store[x] : &:r1815_3, r1815_5 +# 1817| v1817_1(void) = NoOp : +# 1785| v1785_6(void) = ReturnVoid : +# 1785| v1785_7(void) = AliasedUse : ~m? +# 1785| v1785_8(void) = ExitFunction : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 diff --git a/cpp/ql/test/library-tests/lambdas/captures/elements.expected b/cpp/ql/test/library-tests/lambdas/captures/elements.expected index 04b6192bdba..a0077dacec9 100644 --- a/cpp/ql/test/library-tests/lambdas/captures/elements.expected +++ b/cpp/ql/test/library-tests/lambdas/captures/elements.expected @@ -156,10 +156,10 @@ | captures.cpp:23:12:23:16 | x | | captures.cpp:23:12:23:16 | y | | captures.cpp:23:12:23:20 | ... + ... | -| captures.cpp:23:16:23:16 | (reference dereference) | | captures.cpp:23:16:23:16 | definition of y | | captures.cpp:23:16:23:16 | y | | captures.cpp:23:16:23:16 | y | +| captures.cpp:23:18:23:18 | (reference dereference) | | captures.cpp:23:20:23:20 | z | | captures.cpp:26:3:26:24 | return ... | | captures.cpp:26:10:26:17 | (const lambda [] type at line 22, col. 19)... | diff --git a/cpp/ql/test/library-tests/sideEffects/stmts/stmts.expected b/cpp/ql/test/library-tests/sideEffects/stmts/stmts.expected index be1a1a7d973..8e8d4c4b1a5 100644 --- a/cpp/ql/test/library-tests/sideEffects/stmts/stmts.expected +++ b/cpp/ql/test/library-tests/sideEffects/stmts/stmts.expected @@ -2,6 +2,7 @@ | stmts.c:3:5:3:10 | declaration | true | true | | stmts.c:4:5:4:18 | declaration | true | true | | stmts.c:5:5:5:16 | declaration | false | true | +| stmts.c:7:5:7:5 | { ... } | true | true | | stmts.c:7:5:14:5 | switch (...) ... | true | true | | stmts.c:7:15:14:5 | { ... } | true | true | | stmts.c:8:9:8:15 | case ...: | true | true | diff --git a/cpp/ql/test/library-tests/string_analysis/StringAnalysis.ql b/cpp/ql/test/library-tests/string_analysis/StringAnalysis.ql index eda9acae5d9..a529b9f7952 100644 --- a/cpp/ql/test/library-tests/string_analysis/StringAnalysis.ql +++ b/cpp/ql/test/library-tests/string_analysis/StringAnalysis.ql @@ -5,7 +5,7 @@ import cpp -from AnalysedString s, string str +from AnalyzedString s, string str where if s.(StringLiteral).getUnspecifiedType().(DerivedType).getBaseType() instanceof Wchar_t then str = "[?]" diff --git a/cpp/ql/test/library-tests/switch/blocks.expected b/cpp/ql/test/library-tests/switch/blocks.expected index 9e08264d0f7..53ee2582d68 100644 --- a/cpp/ql/test/library-tests/switch/blocks.expected +++ b/cpp/ql/test/library-tests/switch/blocks.expected @@ -1,12 +1,9 @@ -| switch.c:2:5:2:5 | f | switch.c:2:14:12:1 | { ... } | switch.c:3:5:10:5 | switch (...) ... | -| switch.c:2:5:2:5 | f | switch.c:2:14:12:1 | { ... } | switch.c:10:5:10:5 | label ...: | +| switch.c:2:5:2:5 | f | switch.c:2:14:12:1 | { ... } | switch.c:3:5:3:5 | { ... } | | switch.c:2:5:2:5 | f | switch.c:2:14:12:1 | { ... } | switch.c:11:5:11:13 | return ... | | switch.c:14:6:14:6 | g | switch.c:14:15:52:1 | { ... } | switch.c:15:2:15:7 | declaration | -| switch.c:14:6:14:6 | g | switch.c:14:15:52:1 | { ... } | switch.c:17:5:26:5 | switch (...) ... | -| switch.c:14:6:14:6 | g | switch.c:14:15:52:1 | { ... } | switch.c:26:5:26:5 | label ...: | +| switch.c:14:6:14:6 | g | switch.c:14:15:52:1 | { ... } | switch.c:17:5:17:5 | { ... } | | switch.c:14:6:14:6 | g | switch.c:14:15:52:1 | { ... } | switch.c:28:5:29:5 | switch (...) ... | -| switch.c:14:6:14:6 | g | switch.c:14:15:52:1 | { ... } | switch.c:31:5:44:2 | switch (...) ... | -| switch.c:14:6:14:6 | g | switch.c:14:15:52:1 | { ... } | switch.c:44:2:44:2 | label ...: | +| switch.c:14:6:14:6 | g | switch.c:14:15:52:1 | { ... } | switch.c:31:5:31:5 | { ... } | | switch.c:14:6:14:6 | g | switch.c:14:15:52:1 | { ... } | switch.c:46:2:51:2 | switch (...) ... | | switch.c:14:6:14:6 | g | switch.c:14:15:52:1 | { ... } | switch.c:52:1:52:1 | return ... | | switch.cpp:4:5:4:5 | f | switch.cpp:4:14:9:1 | { ... } | switch.cpp:5:5:8:5 | switch (...) ... | diff --git a/cpp/ql/test/library-tests/switch_cfg/cfg.expected b/cpp/ql/test/library-tests/switch_cfg/cfg.expected index 9406983a0ce..bd70096b395 100644 --- a/cpp/ql/test/library-tests/switch_cfg/cfg.expected +++ b/cpp/ql/test/library-tests/switch_cfg/cfg.expected @@ -1,87 +1,89 @@ -| 10 | 1 | { ... } | 12 switch (...) ... | -| 10 | 43 | f | | -| 12 | 2 | switch (...) ... | 12 cond | -| 12 | 3 | cond | 12 { ... } | -| 12 | 4 | { ... } | 13 case ...: | -| 12 | 4 | { ... } | 16 case ...: | -| 12 | 4 | { ... } | 18 case ...: | -| 12 | 4 | { ... } | 21 case ...: | -| 12 | 4 | { ... } | 22 case ...: | -| 12 | 4 | { ... } | 24 case ...: | -| 12 | 4 | { ... } | 25 default: | -| 12 | 4 | { ... } | 26 case ...: | -| 12 | 4 | { ... } | 28 case ...: | +| 10 | 1 | { ... } | 12 { ... } | +| 10 | 44 | f | | +| 12 | 2 | { ... } | 12 switch (...) ... | +| 12 | 3 | switch (...) ... | 12 cond | +| 12 | 4 | cond | 12 { ... } | +| 12 | 5 | { ... } | 13 case ...: | +| 12 | 5 | { ... } | 16 case ...: | +| 12 | 5 | { ... } | 18 case ...: | +| 12 | 5 | { ... } | 21 case ...: | +| 12 | 5 | { ... } | 22 case ...: | +| 12 | 5 | { ... } | 24 case ...: | +| 12 | 5 | { ... } | 25 default: | +| 12 | 5 | { ... } | 26 case ...: | +| 12 | 5 | { ... } | 28 case ...: | | 13 | 1 | 1 | | -| 13 | 5 | case ...: | 14 ExprStmt | -| 14 | 6 | ExprStmt | 14 111 | -| 14 | 7 | 111 | 14 x | -| 14 | 8 | x | 14 ... = ... | -| 14 | 9 | ... = ... | 15 break; | -| 15 | 10 | break; | 31 label ...: | +| 13 | 6 | case ...: | 14 ExprStmt | +| 14 | 7 | ExprStmt | 14 111 | +| 14 | 8 | 111 | 14 x | +| 14 | 9 | x | 14 ... = ... | +| 14 | 10 | ... = ... | 15 break; | +| 15 | 11 | break; | 31 label ...: | | 16 | 1 | 1 | | | 16 | 1 | 2 | | | 16 | 1 | ... + ... | | -| 16 | 5 | case ...: | 17 ExprStmt | -| 17 | 6 | ExprStmt | 17 333 | -| 17 | 7 | 333 | 17 x | -| 17 | 8 | x | 17 ... = ... | -| 17 | 9 | ... = ... | 18 case ...: | +| 16 | 6 | case ...: | 17 ExprStmt | +| 17 | 7 | ExprStmt | 17 333 | +| 17 | 8 | 333 | 17 x | +| 17 | 9 | x | 17 ... = ... | +| 17 | 10 | ... = ... | 18 case ...: | | 18 | 1 | 4 | | -| 18 | 10 | case ...: | 19 ExprStmt | -| 19 | 11 | ExprStmt | 19 444 | -| 19 | 12 | 444 | 19 x | -| 19 | 13 | x | 19 ... = ... | -| 19 | 14 | ... = ... | 20 break; | -| 20 | 15 | break; | 31 label ...: | +| 18 | 11 | case ...: | 19 ExprStmt | +| 19 | 12 | ExprStmt | 19 444 | +| 19 | 13 | 444 | 19 x | +| 19 | 14 | x | 19 ... = ... | +| 19 | 15 | ... = ... | 20 break; | +| 20 | 16 | break; | 31 label ...: | | 21 | 1 | 5 | | -| 21 | 5 | case ...: | 22 case ...: | +| 21 | 6 | case ...: | 22 case ...: | | 22 | 1 | 6 | | -| 22 | 6 | case ...: | 23 ExprStmt | -| 23 | 7 | ExprStmt | 23 777 | -| 23 | 8 | 777 | 23 x | -| 23 | 9 | x | 23 ... = ... | -| 23 | 10 | ... = ... | 24 case ...: | +| 22 | 7 | case ...: | 23 ExprStmt | +| 23 | 8 | ExprStmt | 23 777 | +| 23 | 9 | 777 | 23 x | +| 23 | 10 | x | 23 ... = ... | +| 23 | 11 | ... = ... | 24 case ...: | | 24 | 1 | 7 | | -| 24 | 11 | case ...: | 25 default: | -| 25 | 12 | default: | 26 case ...: | +| 24 | 12 | case ...: | 25 default: | +| 25 | 13 | default: | 26 case ...: | | 26 | 1 | 8 | | -| 26 | 13 | case ...: | 27 ExprStmt | -| 27 | 14 | ExprStmt | 27 888 | -| 27 | 15 | 888 | 27 x | -| 27 | 16 | x | 27 ... = ... | -| 27 | 17 | ... = ... | 28 case ...: | +| 26 | 14 | case ...: | 27 ExprStmt | +| 27 | 15 | ExprStmt | 27 888 | +| 27 | 16 | 888 | 27 x | +| 27 | 17 | x | 27 ... = ... | +| 27 | 18 | ... = ... | 28 case ...: | | 28 | 1 | 9 | | -| 28 | 18 | case ...: | 29 ExprStmt | -| 29 | 19 | ExprStmt | 29 999 | -| 29 | 20 | 999 | 29 x | -| 29 | 21 | x | 29 ... = ... | -| 29 | 22 | ... = ... | 30 break; | -| 30 | 23 | break; | 31 label ...: | -| 31 | 41 | label ...: | 33 return ... | -| 33 | 42 | return ... | 10 f | -| 36 | 1 | { ... } | 38 switch (...) ... | -| 36 | 22 | g | | -| 38 | 2 | switch (...) ... | 38 cond | -| 38 | 3 | cond | 38 { ... } | -| 38 | 4 | { ... } | 39 case ...: | -| 38 | 4 | { ... } | 42 case ...: | -| 38 | 4 | { ... } | 45 label ...: | +| 28 | 19 | case ...: | 29 ExprStmt | +| 29 | 20 | ExprStmt | 29 999 | +| 29 | 21 | 999 | 29 x | +| 29 | 22 | x | 29 ... = ... | +| 29 | 23 | ... = ... | 30 break; | +| 30 | 24 | break; | 31 label ...: | +| 31 | 42 | label ...: | 33 return ... | +| 33 | 43 | return ... | 10 f | +| 36 | 1 | { ... } | 38 { ... } | +| 36 | 23 | g | | +| 38 | 2 | { ... } | 38 switch (...) ... | +| 38 | 3 | switch (...) ... | 38 cond | +| 38 | 4 | cond | 38 { ... } | +| 38 | 5 | { ... } | 39 case ...: | +| 38 | 5 | { ... } | 42 case ...: | +| 38 | 5 | { ... } | 45 label ...: | | 39 | 1 | 1 | | -| 39 | 5 | case ...: | 40 ExprStmt | -| 40 | 6 | ExprStmt | 40 111 | -| 40 | 7 | 111 | 40 x | -| 40 | 8 | x | 40 ... = ... | -| 40 | 9 | ... = ... | 41 break; | -| 41 | 10 | break; | 45 label ...: | +| 39 | 6 | case ...: | 40 ExprStmt | +| 40 | 7 | ExprStmt | 40 111 | +| 40 | 8 | 111 | 40 x | +| 40 | 9 | x | 40 ... = ... | +| 40 | 10 | ... = ... | 41 break; | +| 41 | 11 | break; | 45 label ...: | | 42 | 1 | 2 | | -| 42 | 5 | case ...: | 43 ExprStmt | -| 43 | 6 | ExprStmt | 43 222 | -| 43 | 7 | 222 | 43 x | -| 43 | 8 | x | 43 ... = ... | -| 43 | 9 | ... = ... | 45 label ...: | -| 45 | 16 | label ...: | 46 ExprStmt | -| 46 | 17 | ExprStmt | 46 999 | -| 46 | 18 | 999 | 46 x | -| 46 | 19 | x | 46 ... = ... | -| 46 | 20 | ... = ... | 48 return ... | -| 48 | 21 | return ... | 36 g | +| 42 | 6 | case ...: | 43 ExprStmt | +| 43 | 7 | ExprStmt | 43 222 | +| 43 | 8 | 222 | 43 x | +| 43 | 9 | x | 43 ... = ... | +| 43 | 10 | ... = ... | 45 label ...: | +| 45 | 17 | label ...: | 46 ExprStmt | +| 46 | 18 | ExprStmt | 46 999 | +| 46 | 19 | 999 | 46 x | +| 46 | 20 | x | 46 ... = ... | +| 46 | 21 | ... = ... | 48 return ... | +| 48 | 22 | return ... | 36 g | diff --git a/cpp/ql/test/library-tests/syntax-zoo/builtin.c b/cpp/ql/test/library-tests/syntax-zoo/builtin.c index 9811baafe9a..3677ac541f3 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/builtin.c +++ b/cpp/ql/test/library-tests/syntax-zoo/builtin.c @@ -1,4 +1,4 @@ -// semmle-extractor-options: --clang +// semmle-extractor-options: --clang --edg --clang_version --edg 30500 #define vector(elcount, type) __attribute__((vector_size((elcount)*sizeof(type)))) type diff --git a/cpp/ql/test/library-tests/usings/Usings1.expected b/cpp/ql/test/library-tests/usings/Usings1.expected index c29cf7dd11f..212769fe804 100644 --- a/cpp/ql/test/library-tests/usings/Usings1.expected +++ b/cpp/ql/test/library-tests/usings/Usings1.expected @@ -1,7 +1,7 @@ -| templates.cpp:9:5:9:14 | using c | UsingDeclarationEntry, enclosingElement:std | -| usings.cpp:8:1:8:11 | using nf | UsingDeclarationEntry, enclosingElement:(global namespace) | +| templates.cpp:9:14:9:14 | using c | UsingDeclarationEntry, enclosingElement:std | +| usings.cpp:8:10:8:11 | using nf | UsingDeclarationEntry, enclosingElement:(global namespace) | | usings.cpp:9:1:9:17 | using namespace N | UsingDirectiveEntry, enclosingElement:(global namespace) | -| usings.cpp:18:3:18:13 | using bf | UsingDeclarationEntry, enclosingElement:D | -| usings.cpp:21:5:21:14 | using gf | UsingDeclarationEntry, enclosingElement:{ ... } | -| usings.cpp:34:3:34:20 | using tbf | UsingDeclarationEntry, enclosingElement:TD | -| usings.cpp:42:5:42:22 | using foo | UsingDeclarationEntry, enclosingElement:nsbar | +| usings.cpp:18:12:18:13 | using bf | UsingDeclarationEntry, enclosingElement:D | +| usings.cpp:21:13:21:14 | using gf | UsingDeclarationEntry, enclosingElement:{ ... } | +| usings.cpp:34:18:34:20 | using tbf | UsingDeclarationEntry, enclosingElement:TD | +| usings.cpp:42:20:42:22 | using foo | UsingDeclarationEntry, enclosingElement:nsbar | diff --git a/cpp/ql/test/library-tests/vector_types/vector_types.cpp b/cpp/ql/test/library-tests/vector_types/vector_types.cpp index 5e875b6b953..8f928386af4 100644 --- a/cpp/ql/test/library-tests/vector_types/vector_types.cpp +++ b/cpp/ql/test/library-tests/vector_types/vector_types.cpp @@ -1,6 +1,6 @@ +// semmle-extractor-options: --edg --clang --edg --clang_version --edg 30801 // Compilable with: clang --std=c++0x -msse4.1 vector_types.cpp // (some bits also compilable with gcc) - int printf(...); typedef float v4f __attribute__((vector_size(16))); diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp index 2b53f9c0adf..487a4e77285 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp @@ -1,4 +1,4 @@ - +// semmle-extractor-options: -std=c++14 class MyClass { public: diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected new file mode 100644 index 00000000000..a4db6155e31 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected @@ -0,0 +1,133 @@ +edges +| tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | +| tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | +| tests3.cpp:23:21:23:53 | call to createXMLReader | tests3.cpp:25:2:25:2 | p | +| tests3.cpp:60:21:60:53 | call to createXMLReader | tests3.cpp:63:2:63:2 | p | +| tests3.cpp:67:21:67:53 | call to createXMLReader | tests3.cpp:70:2:70:2 | p | +| tests5.cpp:27:25:27:38 | call to createLSParser | tests5.cpp:29:2:29:2 | p | +| tests5.cpp:40:25:40:38 | call to createLSParser | tests5.cpp:43:2:43:2 | p | +| tests5.cpp:55:25:55:38 | call to createLSParser | tests5.cpp:59:2:59:2 | p | +| tests5.cpp:81:25:81:38 | call to createLSParser | tests5.cpp:83:2:83:2 | p | +| tests5.cpp:81:25:81:38 | call to createLSParser | tests5.cpp:83:2:83:2 | p | +| tests5.cpp:83:2:83:2 | p | tests5.cpp:85:2:85:2 | p | +| tests5.cpp:85:2:85:2 | p | tests5.cpp:86:2:86:2 | p | +| tests5.cpp:86:2:86:2 | p | tests5.cpp:88:2:88:2 | p | +| tests5.cpp:88:2:88:2 | p | tests5.cpp:89:2:89:2 | p | +| tests.cpp:15:23:15:43 | XercesDOMParser output argument | tests.cpp:17:2:17:2 | p | +| tests.cpp:28:23:28:43 | XercesDOMParser output argument | tests.cpp:31:2:31:2 | p | +| tests.cpp:35:19:35:19 | VariableAddress [post update] | tests.cpp:37:2:37:2 | p | +| tests.cpp:35:23:35:43 | XercesDOMParser output argument | tests.cpp:35:19:35:19 | VariableAddress [post update] | +| tests.cpp:37:2:37:2 | p | tests.cpp:38:2:38:2 | p | +| tests.cpp:38:2:38:2 | p | tests.cpp:39:2:39:2 | p | +| tests.cpp:51:19:51:19 | VariableAddress [post update] | tests.cpp:53:2:53:2 | p | +| tests.cpp:51:23:51:43 | XercesDOMParser output argument | tests.cpp:51:19:51:19 | VariableAddress [post update] | +| tests.cpp:53:2:53:2 | p | tests.cpp:54:2:54:2 | p | +| tests.cpp:54:2:54:2 | p | tests.cpp:55:2:55:2 | p | +| tests.cpp:55:2:55:2 | p | tests.cpp:56:2:56:2 | p | +| tests.cpp:55:2:55:2 | p | tests.cpp:56:2:56:2 | p | +| tests.cpp:56:2:56:2 | p | tests.cpp:57:2:57:2 | p | +| tests.cpp:57:2:57:2 | p | tests.cpp:58:2:58:2 | p | +| tests.cpp:58:2:58:2 | p | tests.cpp:59:2:59:2 | p | +| tests.cpp:59:2:59:2 | p | tests.cpp:60:2:60:2 | p | +| tests.cpp:66:23:66:43 | XercesDOMParser output argument | tests.cpp:69:2:69:2 | p | +| tests.cpp:73:23:73:43 | XercesDOMParser output argument | tests.cpp:80:2:80:2 | p | +| tests.cpp:85:24:85:44 | XercesDOMParser output argument | tests.cpp:88:3:88:3 | q | +| tests.cpp:100:24:100:44 | XercesDOMParser output argument | tests.cpp:104:3:104:3 | q | +| tests.cpp:112:39:112:39 | p | tests.cpp:113:2:113:2 | p | +| tests.cpp:116:39:116:39 | p | tests.cpp:117:2:117:2 | p | +| tests.cpp:122:23:122:43 | XercesDOMParser output argument | tests.cpp:126:18:126:18 | q | +| tests.cpp:122:23:122:43 | XercesDOMParser output argument | tests.cpp:128:18:128:18 | q | +| tests.cpp:126:18:126:18 | q | tests.cpp:112:39:112:39 | p | +| tests.cpp:128:18:128:18 | q | tests.cpp:116:39:116:39 | p | +nodes +| tests2.cpp:20:17:20:31 | SAXParser output argument | semmle.label | SAXParser output argument | +| tests2.cpp:22:2:22:2 | p | semmle.label | p | +| tests2.cpp:33:17:33:31 | SAXParser output argument | semmle.label | SAXParser output argument | +| tests2.cpp:37:2:37:2 | p | semmle.label | p | +| tests3.cpp:23:21:23:53 | call to createXMLReader | semmle.label | call to createXMLReader | +| tests3.cpp:25:2:25:2 | p | semmle.label | p | +| tests3.cpp:60:21:60:53 | call to createXMLReader | semmle.label | call to createXMLReader | +| tests3.cpp:63:2:63:2 | p | semmle.label | p | +| tests3.cpp:67:21:67:53 | call to createXMLReader | semmle.label | call to createXMLReader | +| tests3.cpp:70:2:70:2 | p | semmle.label | p | +| tests4.cpp:26:34:26:48 | (int)... | semmle.label | (int)... | +| tests4.cpp:36:34:36:50 | (int)... | semmle.label | (int)... | +| tests4.cpp:46:34:46:68 | ... \| ... | semmle.label | ... \| ... | +| tests4.cpp:77:34:77:38 | flags | semmle.label | flags | +| tests4.cpp:130:39:130:55 | (int)... | semmle.label | (int)... | +| tests5.cpp:27:25:27:38 | call to createLSParser | semmle.label | call to createLSParser | +| tests5.cpp:29:2:29:2 | p | semmle.label | p | +| tests5.cpp:40:25:40:38 | call to createLSParser | semmle.label | call to createLSParser | +| tests5.cpp:43:2:43:2 | p | semmle.label | p | +| tests5.cpp:55:25:55:38 | call to createLSParser | semmle.label | call to createLSParser | +| tests5.cpp:59:2:59:2 | p | semmle.label | p | +| tests5.cpp:81:25:81:38 | call to createLSParser | semmle.label | call to createLSParser | +| tests5.cpp:83:2:83:2 | p | semmle.label | p | +| tests5.cpp:83:2:83:2 | p | semmle.label | p | +| tests5.cpp:85:2:85:2 | p | semmle.label | p | +| tests5.cpp:86:2:86:2 | p | semmle.label | p | +| tests5.cpp:88:2:88:2 | p | semmle.label | p | +| tests5.cpp:89:2:89:2 | p | semmle.label | p | +| tests.cpp:15:23:15:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:17:2:17:2 | p | semmle.label | p | +| tests.cpp:28:23:28:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:31:2:31:2 | p | semmle.label | p | +| tests.cpp:35:19:35:19 | VariableAddress [post update] | semmle.label | VariableAddress [post update] | +| tests.cpp:35:23:35:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:37:2:37:2 | p | semmle.label | p | +| tests.cpp:38:2:38:2 | p | semmle.label | p | +| tests.cpp:39:2:39:2 | p | semmle.label | p | +| tests.cpp:51:19:51:19 | VariableAddress [post update] | semmle.label | VariableAddress [post update] | +| tests.cpp:51:23:51:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:53:2:53:2 | p | semmle.label | p | +| tests.cpp:54:2:54:2 | p | semmle.label | p | +| tests.cpp:55:2:55:2 | p | semmle.label | p | +| tests.cpp:56:2:56:2 | p | semmle.label | p | +| tests.cpp:56:2:56:2 | p | semmle.label | p | +| tests.cpp:57:2:57:2 | p | semmle.label | p | +| tests.cpp:58:2:58:2 | p | semmle.label | p | +| tests.cpp:59:2:59:2 | p | semmle.label | p | +| tests.cpp:60:2:60:2 | p | semmle.label | p | +| tests.cpp:66:23:66:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:69:2:69:2 | p | semmle.label | p | +| tests.cpp:73:23:73:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:80:2:80:2 | p | semmle.label | p | +| tests.cpp:85:24:85:44 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:88:3:88:3 | q | semmle.label | q | +| tests.cpp:100:24:100:44 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:104:3:104:3 | q | semmle.label | q | +| tests.cpp:112:39:112:39 | p | semmle.label | p | +| tests.cpp:113:2:113:2 | p | semmle.label | p | +| tests.cpp:116:39:116:39 | p | semmle.label | p | +| tests.cpp:117:2:117:2 | p | semmle.label | p | +| tests.cpp:122:23:122:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:126:18:126:18 | q | semmle.label | q | +| tests.cpp:128:18:128:18 | q | semmle.label | q | +subpaths +#select +| tests2.cpp:22:2:22:2 | p | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:20:17:20:31 | SAXParser output argument | XML parser | +| tests2.cpp:37:2:37:2 | p | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:33:17:33:31 | SAXParser output argument | XML parser | +| tests3.cpp:25:2:25:2 | p | tests3.cpp:23:21:23:53 | call to createXMLReader | tests3.cpp:25:2:25:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests3.cpp:23:21:23:53 | call to createXMLReader | XML parser | +| tests3.cpp:63:2:63:2 | p | tests3.cpp:60:21:60:53 | call to createXMLReader | tests3.cpp:63:2:63:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests3.cpp:60:21:60:53 | call to createXMLReader | XML parser | +| tests3.cpp:70:2:70:2 | p | tests3.cpp:67:21:67:53 | call to createXMLReader | tests3.cpp:70:2:70:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests3.cpp:67:21:67:53 | call to createXMLReader | XML parser | +| tests4.cpp:26:34:26:48 | (int)... | tests4.cpp:26:34:26:48 | (int)... | tests4.cpp:26:34:26:48 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:26:34:26:48 | (int)... | XML parser | +| tests4.cpp:36:34:36:50 | (int)... | tests4.cpp:36:34:36:50 | (int)... | tests4.cpp:36:34:36:50 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:36:34:36:50 | (int)... | XML parser | +| tests4.cpp:46:34:46:68 | ... \| ... | tests4.cpp:46:34:46:68 | ... \| ... | tests4.cpp:46:34:46:68 | ... \| ... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:46:34:46:68 | ... \| ... | XML parser | +| tests4.cpp:77:34:77:38 | flags | tests4.cpp:77:34:77:38 | flags | tests4.cpp:77:34:77:38 | flags | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:77:34:77:38 | flags | XML parser | +| tests4.cpp:130:39:130:55 | (int)... | tests4.cpp:130:39:130:55 | (int)... | tests4.cpp:130:39:130:55 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:130:39:130:55 | (int)... | XML parser | +| tests5.cpp:29:2:29:2 | p | tests5.cpp:27:25:27:38 | call to createLSParser | tests5.cpp:29:2:29:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests5.cpp:27:25:27:38 | call to createLSParser | XML parser | +| tests5.cpp:43:2:43:2 | p | tests5.cpp:40:25:40:38 | call to createLSParser | tests5.cpp:43:2:43:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests5.cpp:40:25:40:38 | call to createLSParser | XML parser | +| tests5.cpp:59:2:59:2 | p | tests5.cpp:55:25:55:38 | call to createLSParser | tests5.cpp:59:2:59:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests5.cpp:55:25:55:38 | call to createLSParser | XML parser | +| tests5.cpp:83:2:83:2 | p | tests5.cpp:81:25:81:38 | call to createLSParser | tests5.cpp:83:2:83:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests5.cpp:81:25:81:38 | call to createLSParser | XML parser | +| tests5.cpp:89:2:89:2 | p | tests5.cpp:81:25:81:38 | call to createLSParser | tests5.cpp:89:2:89:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests5.cpp:81:25:81:38 | call to createLSParser | XML parser | +| tests.cpp:17:2:17:2 | p | tests.cpp:15:23:15:43 | XercesDOMParser output argument | tests.cpp:17:2:17:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:15:23:15:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:31:2:31:2 | p | tests.cpp:28:23:28:43 | XercesDOMParser output argument | tests.cpp:31:2:31:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:28:23:28:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:39:2:39:2 | p | tests.cpp:35:23:35:43 | XercesDOMParser output argument | tests.cpp:39:2:39:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:35:23:35:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:56:2:56:2 | p | tests.cpp:51:23:51:43 | XercesDOMParser output argument | tests.cpp:56:2:56:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:51:23:51:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:60:2:60:2 | p | tests.cpp:51:23:51:43 | XercesDOMParser output argument | tests.cpp:60:2:60:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:51:23:51:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:69:2:69:2 | p | tests.cpp:66:23:66:43 | XercesDOMParser output argument | tests.cpp:69:2:69:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:66:23:66:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:80:2:80:2 | p | tests.cpp:73:23:73:43 | XercesDOMParser output argument | tests.cpp:80:2:80:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:73:23:73:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:88:3:88:3 | q | tests.cpp:85:24:85:44 | XercesDOMParser output argument | tests.cpp:88:3:88:3 | q | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:85:24:85:44 | XercesDOMParser output argument | XML parser | +| tests.cpp:104:3:104:3 | q | tests.cpp:100:24:100:44 | XercesDOMParser output argument | tests.cpp:104:3:104:3 | q | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:100:24:100:44 | XercesDOMParser output argument | XML parser | +| tests.cpp:113:2:113:2 | p | tests.cpp:122:23:122:43 | XercesDOMParser output argument | tests.cpp:113:2:113:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:122:23:122:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:117:2:117:2 | p | tests.cpp:122:23:122:43 | XercesDOMParser output argument | tests.cpp:117:2:117:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:122:23:122:43 | XercesDOMParser output argument | XML parser | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.qlref new file mode 100644 index 00000000000..866f8697caf --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-611/XXE.ql diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp new file mode 100644 index 00000000000..51ae57f54d9 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp @@ -0,0 +1,129 @@ +// test cases for rule CWE-611 (XercesDOMParser) + +#include "tests.h" + +// --- + +class XercesDOMParser: public AbstractDOMParser { +public: + XercesDOMParser(); +}; + +// --- + +void test1(InputSource &data) { + XercesDOMParser *p = new XercesDOMParser(); + + p->parse(data); // BAD (parser not correctly configured) +} + +void test2(InputSource &data) { + XercesDOMParser *p = new XercesDOMParser(); + + p->setDisableDefaultEntityResolution(true); + p->parse(data); // GOOD +} + +void test3(InputSource &data) { + XercesDOMParser *p = new XercesDOMParser(); + + p->setDisableDefaultEntityResolution(false); + p->parse(data); // BAD (parser not correctly configured) +} + +void test4(InputSource &data) { + XercesDOMParser *p = new XercesDOMParser(); + + p->setDisableDefaultEntityResolution(true); + p->setCreateEntityReferenceNodes(false); + p->parse(data); // BAD (parser not correctly configured) +} + +void test5(InputSource &data) { + XercesDOMParser *p = new XercesDOMParser(); + + p->setDisableDefaultEntityResolution(true); + p->setCreateEntityReferenceNodes(true); + p->parse(data); // GOOD +} + +void test6(InputSource &data) { + XercesDOMParser *p = new XercesDOMParser(); + + p->setDisableDefaultEntityResolution(true); + p->parse(data); // GOOD + p->setDisableDefaultEntityResolution(false); + p->parse(data); // BAD (parser not correctly configured) + p->setDisableDefaultEntityResolution(true); + p->parse(data); // GOOD + p->setCreateEntityReferenceNodes(false); + p->parse(data); // BAD (parser not correctly configured) + p->setCreateEntityReferenceNodes(true); + p->parse(data); // GOOD +} + +void test7(InputSource &data, bool cond) { + XercesDOMParser *p = new XercesDOMParser(); + + p->setDisableDefaultEntityResolution(cond); + p->parse(data); // BAD (parser may not be correctly configured) +} + +void test8(InputSource &data, bool cond) { + XercesDOMParser *p = new XercesDOMParser(); + + if (cond) + { + p->setDisableDefaultEntityResolution(true); + } + + p->parse(data); // BAD (parser may not be correctly configured) +} + +void test9(InputSource &data) { + { + XercesDOMParser *p = new XercesDOMParser(); + XercesDOMParser &q = *p; + + q.parse(data); // BAD (parser not correctly configured) + } + + { + XercesDOMParser *p = new XercesDOMParser(); + XercesDOMParser &q = *p; + + q.setDisableDefaultEntityResolution(true); + q.parse(data); // GOOD + } + + { + XercesDOMParser *p = new XercesDOMParser(); + XercesDOMParser &q = *p; + + p->setDisableDefaultEntityResolution(true); + q.parse(data); // GOOD [FALSE POSITIVE] + } +} + +void test10_doParseA(XercesDOMParser *p, InputSource &data) { + p->parse(data); // GOOD +} + +void test10_doParseB(XercesDOMParser *p, InputSource &data) { + p->parse(data); // BAD (parser not correctly configured) +} + +void test10_doParseC(XercesDOMParser *p, InputSource &data) { + p->parse(data); // BAD (parser may not be correctly configured) +} + +void test10(InputSource &data) { + XercesDOMParser *p = new XercesDOMParser(); + XercesDOMParser *q = new XercesDOMParser(); + + p->setDisableDefaultEntityResolution(true); + test10_doParseA(p, data); + test10_doParseB(q, data); + test10_doParseC(p, data); + test10_doParseC(q, data); +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h new file mode 100644 index 00000000000..7d745382174 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h @@ -0,0 +1,26 @@ +// library/common functions for rule CWE-611 + +#define NULL (0) + +class SecurityManager; +class InputSource; + +class AbstractDOMParser { +public: + AbstractDOMParser(); + + void setDisableDefaultEntityResolution(bool); // default is false + void setCreateEntityReferenceNodes(bool); // default is true + void setSecurityManager(SecurityManager *const manager); + void parse(const InputSource &data); +}; + +typedef unsigned int XMLCh; + +class XMLUni +{ +public: + static const XMLCh fgXercesDisableDefaultEntityResolution[]; + static const XMLCh fgXercesHarmlessOption[]; +}; + diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp new file mode 100644 index 00000000000..147be557844 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp @@ -0,0 +1,46 @@ +// test cases for rule CWE-611 (SAXParser) + +#include "tests.h" + +// --- + +class SAXParser +{ +public: + SAXParser(); + + void setDisableDefaultEntityResolution(bool); // default is false + void setSecurityManager(SecurityManager *const manager); + void parse(const InputSource &data); +}; + +// --- + +void test2_1(InputSource &data) { + SAXParser *p = new SAXParser(); + + p->parse(data); // BAD (parser not correctly configured) +} + +void test2_2(InputSource &data) { + SAXParser *p = new SAXParser(); + + p->setDisableDefaultEntityResolution(true); + p->parse(data); // GOOD +} + +void test2_3(InputSource &data) { + SAXParser *p = new SAXParser(); + bool v = false; + + p->setDisableDefaultEntityResolution(v); + p->parse(data); // BAD (parser not correctly configured) +} + +void test2_4(InputSource &data) { + SAXParser *p = new SAXParser(); + bool v = true; + + p->setDisableDefaultEntityResolution(v); + p->parse(data); // GOOD +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp new file mode 100644 index 00000000000..15e518daf13 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp @@ -0,0 +1,82 @@ +// test cases for rule CWE-611 (SAX2XMLReader) + +#include "tests.h" + +// --- + +class SAX2XMLReader +{ +public: + void setFeature(const XMLCh *feature, bool value); + void parse(const InputSource &data); +}; + +class XMLReaderFactory +{ +public: + static SAX2XMLReader *createXMLReader(); +}; + +// --- + +void test3_1(InputSource &data) { + SAX2XMLReader *p = XMLReaderFactory::createXMLReader(); + + p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED] +} + +void test3_2(InputSource &data) { + SAX2XMLReader *p = XMLReaderFactory::createXMLReader(); + + p->setFeature(XMLUni::fgXercesDisableDefaultEntityResolution, true); + p->parse(data); // GOOD +} + +SAX2XMLReader *p_3_3 = XMLReaderFactory::createXMLReader(); + +void test3_3(InputSource &data) { + p_3_3->parse(data); // BAD (parser not correctly configured) [NOT DETECTED] +} + +SAX2XMLReader *p_3_4 = XMLReaderFactory::createXMLReader(); + +void test3_4(InputSource &data) { + p_3_4->setFeature(XMLUni::fgXercesDisableDefaultEntityResolution, true); + p_3_4->parse(data); // GOOD +} + +SAX2XMLReader *p_3_5 = XMLReaderFactory::createXMLReader(); + +void test3_5_init() { + p_3_5->setFeature(XMLUni::fgXercesDisableDefaultEntityResolution, true); +} + +void test3_5(InputSource &data) { + test3_5_init(); + p_3_5->parse(data); // GOOD +} + +void test3_6(InputSource &data) { + SAX2XMLReader *p = XMLReaderFactory::createXMLReader(); + + p->setFeature(XMLUni::fgXercesDisableDefaultEntityResolution, false); + p->parse(data); // BAD (parser not correctly configured) +} + +void test3_7(InputSource &data) { + SAX2XMLReader *p = XMLReaderFactory::createXMLReader(); + + p->setFeature(XMLUni::fgXercesHarmlessOption, true); + p->parse(data); // BAD (parser not correctly configured) +} + +void test3_8(InputSource &data) { + SAX2XMLReader *p = XMLReaderFactory::createXMLReader(); + const XMLCh *feature = XMLUni::fgXercesDisableDefaultEntityResolution; + + p->setFeature(feature, true); + p->parse(data); // GOOD +} + + + diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests4.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests4.cpp new file mode 100644 index 00000000000..642c1866629 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests4.cpp @@ -0,0 +1,135 @@ +// test cases for rule CWE-611 (libxml2) + +#include "tests.h" + +// --- + +enum xmlParserOption +{ + XML_PARSE_NOENT = 2, + XML_PARSE_DTDLOAD = 4, + XML_PARSE_OPTION_HARMLESS = 8 +}; + +class xmlDoc; + +xmlDoc *xmlReadFile(const char *fileName, const char *encoding, int flags); +xmlDoc *xmlReadMemory(const char *ptr, int sz, const char *url, const char *encoding, int flags); + +void xmlFreeDoc(xmlDoc *ptr); + +// --- + +void test4_1(const char *fileName) { + xmlDoc *p; + + p = xmlReadFile(fileName, NULL, XML_PARSE_NOENT); // BAD (parser not correctly configured) + if (p != NULL) + { + xmlFreeDoc(p); + } +} + +void test4_2(const char *fileName) { + xmlDoc *p; + + p = xmlReadFile(fileName, NULL, XML_PARSE_DTDLOAD); // BAD (parser not correctly configured) + if (p != NULL) + { + xmlFreeDoc(p); + } +} + +void test4_3(const char *fileName) { + xmlDoc *p; + + p = xmlReadFile(fileName, NULL, XML_PARSE_NOENT | XML_PARSE_DTDLOAD); // BAD (parser not correctly configured) + if (p != NULL) + { + xmlFreeDoc(p); + } +} + +void test4_4(const char *fileName) { + xmlDoc *p; + + p = xmlReadFile(fileName, NULL, 0); // GOOD + if (p != NULL) + { + xmlFreeDoc(p); + } +} + +void test4_5(const char *fileName) { + xmlDoc *p; + + p = xmlReadFile(fileName, NULL, XML_PARSE_OPTION_HARMLESS); // GOOD + if (p != NULL) + { + xmlFreeDoc(p); + } +} + +void test4_6(const char *fileName) { + xmlDoc *p; + int flags = XML_PARSE_NOENT; + + p = xmlReadFile(fileName, NULL, flags); // BAD (parser not correctly configured) + if (p != NULL) + { + xmlFreeDoc(p); + } +} + +void test4_7(const char *fileName) { + xmlDoc *p; + int flags = 0; + + p = xmlReadFile(fileName, NULL, flags); // GOOD + if (p != NULL) + { + xmlFreeDoc(p); + } +} + +void test4_8(const char *fileName) { + xmlDoc *p; + int flags = XML_PARSE_OPTION_HARMLESS; + + p = xmlReadFile(fileName, NULL, flags | XML_PARSE_NOENT); // BAD (parser not correctly configured) [NOT DETECTED] + if (p != NULL) + { + xmlFreeDoc(p); + } +} + +void test4_9(const char *fileName) { + xmlDoc *p; + int flags = XML_PARSE_NOENT; + + p = xmlReadFile(fileName, NULL, flags | XML_PARSE_OPTION_HARMLESS); // BAD (parser not correctly configured) [NOT DETECTED] + if (p != NULL) + { + xmlFreeDoc(p); + } +} + +void test4_10(const char *ptr, int sz) { + xmlDoc *p; + + p = xmlReadMemory(ptr, sz, "", NULL, 0); // GOOD + if (p != NULL) + { + xmlFreeDoc(p); + } +} + +void test4_11(const char *ptr, int sz) { + xmlDoc *p; + + p = xmlReadMemory(ptr, sz, "", NULL, XML_PARSE_DTDLOAD); // BAD (parser not correctly configured) + if (p != NULL) + { + xmlFreeDoc(p); + } +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp new file mode 100644 index 00000000000..99027c9bd93 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp @@ -0,0 +1,103 @@ +// test cases for rule CWE-611 (createLSParser) + +#include "tests.h" + +// --- + +class DOMConfiguration { +public: + void setParameter(const XMLCh *parameter, bool value); +}; + +class DOMLSParser { +public: + DOMConfiguration *getDomConfig(); + + void parse(const InputSource &data); +}; + +class DOMImplementationLS { +public: + DOMLSParser *createLSParser(); +}; + +// --- + +void test5_1(DOMImplementationLS *impl, InputSource &data) { + DOMLSParser *p = impl->createLSParser(); + + p->parse(data); // BAD (parser not correctly configured) +} + +void test5_2(DOMImplementationLS *impl, InputSource &data) { + DOMLSParser *p = impl->createLSParser(); + + p->getDomConfig()->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, true); + p->parse(data); // GOOD +} + +void test5_3(DOMImplementationLS *impl, InputSource &data) { + DOMLSParser *p = impl->createLSParser(); + + p->getDomConfig()->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, false); + p->parse(data); // BAD (parser not correctly configured) +} + +void test5_4(DOMImplementationLS *impl, InputSource &data) { + DOMLSParser *p = impl->createLSParser(); + DOMConfiguration *cfg = p->getDomConfig(); + + cfg->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, true); + p->parse(data); // GOOD +} + +void test5_5(DOMImplementationLS *impl, InputSource &data) { + DOMLSParser *p = impl->createLSParser(); + DOMConfiguration *cfg = p->getDomConfig(); + + cfg->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, false); + p->parse(data); // BAD (parser not correctly configured) +} + +DOMImplementationLS *g_impl; +DOMLSParser *g_p1, *g_p2; +InputSource *g_data; + +void test5_6_init() { + g_p1 = g_impl->createLSParser(); + g_p1->getDomConfig()->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, true); + + g_p2 = g_impl->createLSParser(); +} + +void test5_6() { + test5_6_init(); + + g_p1->parse(*g_data); // GOOD + g_p2->parse(*g_data); // BAD (parser not correctly configured) [NOT DETECTED] +} + +void test5_7(DOMImplementationLS *impl, InputSource &data) { + DOMLSParser *p = impl->createLSParser(); + + p->parse(data); // BAD (parser not correctly configured) + + p->getDomConfig()->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, true); + p->parse(data); // GOOD + + p->getDomConfig()->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, false); + p->parse(data); // BAD (parser not correctly configured) +} + +void test5_8(DOMImplementationLS *impl, InputSource &data) { + DOMLSParser *p = impl->createLSParser(); + DOMConfiguration *cfg = p->getDomConfig(); + + p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED] + + cfg->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, true); + p->parse(data); // GOOD + + cfg->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, false); + p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED] +} diff --git a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.c b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.c index fcda0b8087a..e77dc8c5586 100644 --- a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.c +++ b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.c @@ -105,3 +105,8 @@ _Noreturn void f15(); int f16() { f15(); // GOOD } + +int f17() { + if (__builtin_expect(1, 0)) + __builtin_unreachable(); // GOOD +} diff --git a/cpp/ql/test/successor-tests/break_labels/cfg.expected b/cpp/ql/test/successor-tests/break_labels/cfg.expected index 570ed1bf345..2bf6ed1d363 100644 --- a/cpp/ql/test/successor-tests/break_labels/cfg.expected +++ b/cpp/ql/test/successor-tests/break_labels/cfg.expected @@ -1,138 +1,142 @@ -| f | false | 54 | 54 | f\ntest.c:2:5:2:5 | -| f | false | 65 | 65 | 0\ntest.c:3:17:3:18 | -| f | false | 66 | 66 | initializer for result\ntest.c:3:17:3:18 | -| f | false | 69 | 69 | declaration\ntest.c:3:5:3:19 | -| f | false | 71 | 71 | i\ntest.c:4:9:4:9 | -| f | false | 75 | 75 | 0\ntest.c:4:14:4:14 | -| f | false | 76 | 76 | ... != ...\ntest.c:4:9:4:14 | -| f | false | 78 | 78 | result\ntest.c:5:9:5:14 | -| f | false | 80 | 80 | ... ++\ntest.c:5:9:5:16 | -| f | false | 82 | 82 | ExprStmt\ntest.c:5:9:5:17 | -| f | false | 84 | 84 | i\ntest.c:6:16:6:16 | -| f | false | 88 | 88 | 10\ntest.c:6:20:6:21 | -| f | false | 89 | 89 | ... < ...\ntest.c:6:16:6:21 | -| f | false | 91 | 91 | i\ntest.c:7:17:7:17 | -| f | false | 93 | 93 | ... ++\ntest.c:7:17:7:19 | -| f | false | 97 | 97 | 5\ntest.c:7:24:7:24 | -| f | false | 98 | 98 | ... == ...\ntest.c:7:17:7:24 | -| f | false | 100 | 100 | result\ntest.c:8:17:8:22 | -| f | false | 104 | 104 | 7\ntest.c:8:26:8:26 | -| f | false | 105 | 105 | ... = ...\ntest.c:8:17:8:26 | -| f | false | 107 | 107 | ExprStmt\ntest.c:8:17:8:27 | -| f | false | 109 | 109 | break;\ntest.c:9:17:9:22 | -| f | false | 111 | 111 | { ... }\ntest.c:7:27:10:13 | -| f | false | 113 | 113 | if (...) ... \ntest.c:7:13:10:13 | -| f | false | 115 | 115 | { ... }\ntest.c:6:24:11:9 | -| f | false | 117 | 117 | while (...) ...\ntest.c:6:9:11:9 | -| f | false | 119 | 119 | label ...:\ntest.c:11:9:11:9 | -| f | false | 121 | 121 | { ... }\ntest.c:4:17:12:5 | -| f | false | 123 | 123 | if (...) ... \ntest.c:4:5:12:5 | -| f | false | 125 | 125 | result\ntest.c:13:12:13:17 | -| f | false | 127 | 127 | return ...\ntest.c:13:5:13:18 | -| f | false | 129 | 129 | { ... }\ntest.c:2:14:14:1 | -| f | true | 65 | 123 | | -| f | true | 66 | 65 | | -| f | true | 69 | 66 | | -| f | true | 71 | 75 | | -| f | true | 75 | 76 | | -| f | true | 76 | 121 | T | -| f | true | 76 | 127 | F | -| f | true | 78 | 80 | | -| f | true | 80 | 117 | | -| f | true | 82 | 78 | | -| f | true | 84 | 88 | | -| f | true | 88 | 89 | | -| f | true | 89 | 115 | T | -| f | true | 89 | 119 | F | -| f | true | 91 | 93 | | -| f | true | 93 | 97 | | -| f | true | 97 | 98 | | -| f | true | 98 | 84 | F | -| f | true | 98 | 111 | T | -| f | true | 100 | 105 | | -| f | true | 104 | 100 | | -| f | true | 105 | 109 | | -| f | true | 107 | 104 | | -| f | true | 109 | 119 | | -| f | true | 111 | 107 | | -| f | true | 113 | 91 | | -| f | true | 115 | 113 | | -| f | true | 117 | 84 | | -| f | true | 119 | 127 | | -| f | true | 121 | 82 | | -| f | true | 123 | 71 | | -| f | true | 125 | 54 | | -| f | true | 127 | 125 | | -| f | true | 129 | 69 | | -| f_for | false | 131 | 131 | f_for\ntest.c:16:6:16:10 | -| f_for | false | 142 | 142 | 0\ntest.c:18:12:18:13 | -| f_for | false | 143 | 143 | initializer for x\ntest.c:18:12:18:13 | -| f_for | false | 146 | 146 | declaration\ntest.c:17:5:17:10 | -| f_for | false | 148 | 148 | declaration\ntest.c:18:5:18:14 | -| f_for | false | 150 | 150 | i\ntest.c:20:16:20:16 | -| f_for | false | 154 | 154 | 10\ntest.c:20:20:20:21 | -| f_for | false | 155 | 155 | ... < ...\ntest.c:20:16:20:21 | -| f_for | false | 157 | 157 | i\ntest.c:21:13:21:13 | -| f_for | false | 161 | 161 | 5\ntest.c:21:18:21:18 | -| f_for | false | 162 | 162 | ... == ...\ntest.c:21:13:21:18 | -| f_for | false | 164 | 164 | continue;\ntest.c:22:13:22:21 | -| f_for | false | 166 | 166 | { ... }\ntest.c:21:21:23:9 | -| f_for | false | 168 | 168 | if (...) ... \ntest.c:21:9:23:9 | -| f_for | false | 170 | 170 | i\ntest.c:24:13:24:13 | -| f_for | false | 174 | 174 | 7\ntest.c:24:18:24:18 | -| f_for | false | 175 | 175 | ... == ...\ntest.c:24:13:24:18 | -| f_for | false | 177 | 177 | break;\ntest.c:25:13:25:18 | -| f_for | false | 179 | 179 | { ... }\ntest.c:24:21:26:9 | -| f_for | false | 181 | 181 | if (...) ... \ntest.c:24:9:26:9 | -| f_for | false | 183 | 183 | x\ntest.c:27:9:27:9 | -| f_for | false | 185 | 185 | ... ++\ntest.c:27:9:27:11 | -| f_for | false | 187 | 187 | ExprStmt\ntest.c:27:9:27:12 | -| f_for | false | 189 | 189 | label ...:\ntest.c:20:5:20:5 | -| f_for | false | 191 | 191 | { ... }\ntest.c:20:29:28:5 | -| f_for | false | 193 | 193 | i\ntest.c:20:9:20:9 | -| f_for | false | 197 | 197 | 0\ntest.c:20:13:20:13 | -| f_for | false | 198 | 198 | ... = ...\ntest.c:20:9:20:13 | -| f_for | false | 200 | 200 | ExprStmt\ntest.c:20:9:20:14 | -| f_for | false | 202 | 202 | i\ntest.c:20:24:20:24 | -| f_for | false | 204 | 204 | ... ++\ntest.c:20:24:20:26 | -| f_for | false | 206 | 206 | for(...;...;...) ...\ntest.c:20:5:28:5 | -| f_for | false | 208 | 208 | label ...:\ntest.c:28:5:28:5 | -| f_for | false | 210 | 210 | return ...\ntest.c:29:1:29:1 | -| f_for | false | 212 | 212 | { ... }\ntest.c:16:18:29:1 | -| f_for | true | 142 | 206 | | -| f_for | true | 143 | 142 | | -| f_for | true | 146 | 148 | | -| f_for | true | 148 | 143 | | -| f_for | true | 150 | 154 | | -| f_for | true | 154 | 155 | | -| f_for | true | 155 | 191 | T | -| f_for | true | 155 | 208 | F | -| f_for | true | 157 | 161 | | -| f_for | true | 161 | 162 | | -| f_for | true | 162 | 166 | T | -| f_for | true | 162 | 181 | F | -| f_for | true | 164 | 189 | | -| f_for | true | 166 | 164 | | -| f_for | true | 168 | 157 | | -| f_for | true | 170 | 174 | | -| f_for | true | 174 | 175 | | -| f_for | true | 175 | 179 | T | -| f_for | true | 175 | 187 | F | -| f_for | true | 177 | 208 | | -| f_for | true | 179 | 177 | | -| f_for | true | 181 | 170 | | -| f_for | true | 183 | 185 | | -| f_for | true | 185 | 189 | | -| f_for | true | 187 | 183 | | -| f_for | true | 189 | 202 | | -| f_for | true | 191 | 168 | | -| f_for | true | 193 | 198 | | -| f_for | true | 197 | 193 | | -| f_for | true | 198 | 150 | | -| f_for | true | 200 | 197 | | -| f_for | true | 202 | 204 | | -| f_for | true | 204 | 150 | | -| f_for | true | 206 | 200 | | -| f_for | true | 208 | 210 | | -| f_for | true | 210 | 131 | | -| f_for | true | 212 | 146 | | +| f | false | 205 | 205 | f\ntest.c:2:5:2:5 | +| f | false | 213 | 213 | declaration\ntest.c:3:5:3:19 | +| f | false | 218 | 218 | 0\ntest.c:3:17:3:18 | +| f | false | 219 | 219 | initializer for result\ntest.c:3:17:3:18 | +| f | false | 222 | 222 | if (...) ... \ntest.c:4:5:12:5 | +| f | false | 224 | 224 | i\ntest.c:4:9:4:9 | +| f | false | 228 | 228 | 0\ntest.c:4:14:4:14 | +| f | false | 229 | 229 | ... != ...\ntest.c:4:9:4:14 | +| f | false | 231 | 231 | ExprStmt\ntest.c:5:9:5:17 | +| f | false | 233 | 233 | result\ntest.c:5:9:5:14 | +| f | false | 235 | 235 | ... ++\ntest.c:5:9:5:16 | +| f | false | 237 | 237 | while (...) ...\ntest.c:6:9:11:9 | +| f | false | 239 | 239 | i\ntest.c:6:16:6:16 | +| f | false | 243 | 243 | 10\ntest.c:6:20:6:21 | +| f | false | 244 | 244 | ... < ...\ntest.c:6:16:6:21 | +| f | false | 246 | 246 | if (...) ... \ntest.c:7:13:10:13 | +| f | false | 248 | 248 | i\ntest.c:7:17:7:17 | +| f | false | 250 | 250 | ... ++\ntest.c:7:17:7:19 | +| f | false | 254 | 254 | 5\ntest.c:7:24:7:24 | +| f | false | 255 | 255 | ... == ...\ntest.c:7:17:7:24 | +| f | false | 257 | 257 | ExprStmt\ntest.c:8:17:8:27 | +| f | false | 259 | 259 | result\ntest.c:8:17:8:22 | +| f | false | 263 | 263 | 7\ntest.c:8:26:8:26 | +| f | false | 264 | 264 | ... = ...\ntest.c:8:17:8:26 | +| f | false | 266 | 266 | break;\ntest.c:9:17:9:22 | +| f | false | 268 | 268 | { ... }\ntest.c:7:27:10:13 | +| f | false | 270 | 270 | { ... }\ntest.c:6:24:11:9 | +| f | false | 272 | 272 | label ...:\ntest.c:11:9:11:9 | +| f | false | 274 | 274 | { ... }\ntest.c:6:9:6:9 | +| f | false | 276 | 276 | { ... }\ntest.c:4:17:12:5 | +| f | false | 278 | 278 | return ...\ntest.c:13:5:13:18 | +| f | false | 280 | 280 | result\ntest.c:13:12:13:17 | +| f | false | 282 | 282 | { ... }\ntest.c:2:14:14:1 | +| f | true | 213 | 219 | | +| f | true | 218 | 222 | | +| f | true | 219 | 218 | | +| f | true | 222 | 224 | | +| f | true | 224 | 228 | | +| f | true | 228 | 229 | | +| f | true | 229 | 276 | T | +| f | true | 229 | 278 | F | +| f | true | 231 | 233 | | +| f | true | 233 | 235 | | +| f | true | 235 | 274 | | +| f | true | 237 | 239 | | +| f | true | 239 | 243 | | +| f | true | 243 | 244 | | +| f | true | 244 | 270 | T | +| f | true | 244 | 272 | F | +| f | true | 246 | 248 | | +| f | true | 248 | 250 | | +| f | true | 250 | 254 | | +| f | true | 254 | 255 | | +| f | true | 255 | 239 | F | +| f | true | 255 | 268 | T | +| f | true | 257 | 263 | | +| f | true | 259 | 264 | | +| f | true | 263 | 259 | | +| f | true | 264 | 266 | | +| f | true | 266 | 272 | | +| f | true | 268 | 257 | | +| f | true | 270 | 246 | | +| f | true | 272 | 278 | | +| f | true | 274 | 237 | | +| f | true | 276 | 231 | | +| f | true | 278 | 280 | | +| f | true | 280 | 205 | | +| f | true | 282 | 213 | | +| f_for | false | 121 | 121 | f_for\ntest.c:16:6:16:10 | +| f_for | false | 126 | 126 | declaration\ntest.c:17:5:17:10 | +| f_for | false | 131 | 131 | declaration\ntest.c:18:5:18:14 | +| f_for | false | 136 | 136 | 0\ntest.c:18:12:18:13 | +| f_for | false | 137 | 137 | initializer for x\ntest.c:18:12:18:13 | +| f_for | false | 140 | 140 | for(...;...;...) ...\ntest.c:20:5:28:5 | +| f_for | false | 142 | 142 | i\ntest.c:20:16:20:16 | +| f_for | false | 146 | 146 | 10\ntest.c:20:20:20:21 | +| f_for | false | 147 | 147 | ... < ...\ntest.c:20:16:20:21 | +| f_for | false | 149 | 149 | if (...) ... \ntest.c:21:9:23:9 | +| f_for | false | 151 | 151 | i\ntest.c:21:13:21:13 | +| f_for | false | 155 | 155 | 5\ntest.c:21:18:21:18 | +| f_for | false | 156 | 156 | ... == ...\ntest.c:21:13:21:18 | +| f_for | false | 158 | 158 | continue;\ntest.c:22:13:22:21 | +| f_for | false | 160 | 160 | { ... }\ntest.c:21:21:23:9 | +| f_for | false | 162 | 162 | if (...) ... \ntest.c:24:9:26:9 | +| f_for | false | 164 | 164 | i\ntest.c:24:13:24:13 | +| f_for | false | 168 | 168 | 7\ntest.c:24:18:24:18 | +| f_for | false | 169 | 169 | ... == ...\ntest.c:24:13:24:18 | +| f_for | false | 171 | 171 | break;\ntest.c:25:13:25:18 | +| f_for | false | 173 | 173 | { ... }\ntest.c:24:21:26:9 | +| f_for | false | 175 | 175 | ExprStmt\ntest.c:27:9:27:12 | +| f_for | false | 177 | 177 | x\ntest.c:27:9:27:9 | +| f_for | false | 179 | 179 | ... ++\ntest.c:27:9:27:11 | +| f_for | false | 181 | 181 | label ...:\ntest.c:20:5:20:5 | +| f_for | false | 183 | 183 | { ... }\ntest.c:20:29:28:5 | +| f_for | false | 185 | 185 | ExprStmt\ntest.c:20:9:20:14 | +| f_for | false | 187 | 187 | i\ntest.c:20:9:20:9 | +| f_for | false | 191 | 191 | 0\ntest.c:20:13:20:13 | +| f_for | false | 192 | 192 | ... = ...\ntest.c:20:9:20:13 | +| f_for | false | 194 | 194 | i\ntest.c:20:24:20:24 | +| f_for | false | 196 | 196 | ... ++\ntest.c:20:24:20:26 | +| f_for | false | 198 | 198 | label ...:\ntest.c:28:5:28:5 | +| f_for | false | 200 | 200 | { ... }\ntest.c:20:5:20:5 | +| f_for | false | 201 | 201 | return ...\ntest.c:29:1:29:1 | +| f_for | false | 203 | 203 | { ... }\ntest.c:16:18:29:1 | +| f_for | true | 126 | 131 | | +| f_for | true | 131 | 137 | | +| f_for | true | 136 | 200 | | +| f_for | true | 137 | 136 | | +| f_for | true | 140 | 185 | | +| f_for | true | 142 | 146 | | +| f_for | true | 146 | 147 | | +| f_for | true | 147 | 183 | T | +| f_for | true | 147 | 198 | F | +| f_for | true | 149 | 151 | | +| f_for | true | 151 | 155 | | +| f_for | true | 155 | 156 | | +| f_for | true | 156 | 160 | T | +| f_for | true | 156 | 162 | F | +| f_for | true | 158 | 181 | | +| f_for | true | 160 | 158 | | +| f_for | true | 162 | 164 | | +| f_for | true | 164 | 168 | | +| f_for | true | 168 | 169 | | +| f_for | true | 169 | 173 | T | +| f_for | true | 169 | 175 | F | +| f_for | true | 171 | 198 | | +| f_for | true | 173 | 171 | | +| f_for | true | 175 | 177 | | +| f_for | true | 177 | 179 | | +| f_for | true | 179 | 181 | | +| f_for | true | 181 | 194 | | +| f_for | true | 183 | 149 | | +| f_for | true | 185 | 191 | | +| f_for | true | 187 | 192 | | +| f_for | true | 191 | 187 | | +| f_for | true | 192 | 142 | | +| f_for | true | 194 | 196 | | +| f_for | true | 196 | 142 | | +| f_for | true | 198 | 201 | | +| f_for | true | 200 | 140 | | +| f_for | true | 201 | 121 | | +| f_for | true | 203 | 126 | | diff --git a/cpp/ql/test/successor-tests/dostmt/dostmt07.expected b/cpp/ql/test/successor-tests/dostmt/dostmt07.expected index ee9601c673d..10f04304a7e 100644 --- a/cpp/ql/test/successor-tests/dostmt/dostmt07.expected +++ b/cpp/ql/test/successor-tests/dostmt/dostmt07.expected @@ -1,4 +1,5 @@ -| 0 | dostmt.c:8:22:14:1 | { ... } | 1 | dostmt.c:9:3:12:13 | do (...) ... | +| 0 | dostmt.c:8:22:14:1 | { ... } | 1 | dostmt.c:9:3:9:3 | { ... } | +| 1 | dostmt.c:9:3:9:3 | { ... } | 1 | dostmt.c:9:3:12:13 | do (...) ... | | 1 | dostmt.c:9:3:12:13 | do (...) ... | 1 | dostmt.c:9:6:12:3 | { ... } | | 1 | dostmt.c:9:6:12:3 | { ... } | 2 | dostmt.c:10:5:10:7 | label ...: | | 2 | dostmt.c:10:5:10:7 | label ...: | 2 | dostmt.c:10:8:10:8 | ; | diff --git a/cpp/ql/test/successor-tests/dostmt/dostmt08.expected b/cpp/ql/test/successor-tests/dostmt/dostmt08.expected index 5991a930edf..cbdc8438a55 100644 --- a/cpp/ql/test/successor-tests/dostmt/dostmt08.expected +++ b/cpp/ql/test/successor-tests/dostmt/dostmt08.expected @@ -1,4 +1,5 @@ -| 0 | dostmt.c:16:22:23:1 | { ... } | 1 | dostmt.c:17:3:21:13 | do (...) ... | +| 0 | dostmt.c:16:22:23:1 | { ... } | 1 | dostmt.c:17:3:17:3 | { ... } | +| 1 | dostmt.c:17:3:17:3 | { ... } | 1 | dostmt.c:17:3:21:13 | do (...) ... | | 1 | dostmt.c:17:3:21:13 | do (...) ... | 1 | dostmt.c:17:6:21:3 | { ... } | | 1 | dostmt.c:17:6:21:3 | { ... } | 2 | dostmt.c:18:5:18:7 | label ...: | | 2 | dostmt.c:18:5:18:7 | label ...: | 2 | dostmt.c:18:8:18:8 | ; | diff --git a/cpp/ql/test/successor-tests/ifstmt/ifelsestmt/ifelsestmt08.expected b/cpp/ql/test/successor-tests/ifstmt/ifelsestmt/ifelsestmt08.expected index 7c07a22c811..2dd0bcfbdc5 100644 --- a/cpp/ql/test/successor-tests/ifstmt/ifelsestmt/ifelsestmt08.expected +++ b/cpp/ql/test/successor-tests/ifstmt/ifelsestmt/ifelsestmt08.expected @@ -1,12 +1,12 @@ | 0 | ifelsestmt.c:11:23:17:1 | { ... } | 1 | ifelsestmt.c:12:3:15:8 | if (...) ... | | 1 | ifelsestmt.c:12:3:15:8 | if (...) ... | 1 | ifelsestmt.c:12:6:12:6 | 0 | -| 1 | ifelsestmt.c:12:6:12:6 | 0 | -1 | file://:0:0:0:0 | { ... } | +| 1 | ifelsestmt.c:12:6:12:6 | 0 | 4 | ifelsestmt.c:15:5:15:5 | { ... } | +| 2 | ifelsestmt.c:13:5:13:5 | { ... } | 2 | ifelsestmt.c:13:5:13:7 | label ...: | | 2 | ifelsestmt.c:13:5:13:7 | label ...: | 2 | ifelsestmt.c:13:8:13:8 | ; | | 2 | ifelsestmt.c:13:8:13:8 | ; | 5 | ifelsestmt.c:16:3:16:5 | label ...: | +| 4 | ifelsestmt.c:15:5:15:5 | { ... } | 4 | ifelsestmt.c:15:5:15:7 | label ...: | | 4 | ifelsestmt.c:15:5:15:7 | label ...: | 4 | ifelsestmt.c:15:8:15:8 | ; | | 4 | ifelsestmt.c:15:8:15:8 | ; | 5 | ifelsestmt.c:16:3:16:5 | label ...: | | 5 | ifelsestmt.c:16:3:16:5 | label ...: | 5 | ifelsestmt.c:16:6:16:6 | ; | | 5 | ifelsestmt.c:16:6:16:6 | ; | 6 | ifelsestmt.c:17:1:17:1 | return ... | | 6 | ifelsestmt.c:17:1:17:1 | return ... | 0 | ifelsestmt.c:11:6:11:19 | always_false_2 | -| -1 | file://:0:0:0:0 | { ... } | 2 | ifelsestmt.c:13:5:13:7 | label ...: | -| -1 | file://:0:0:0:0 | { ... } | 4 | ifelsestmt.c:15:5:15:7 | label ...: | diff --git a/cpp/ql/test/successor-tests/ifstmt/ifelsestmt/ifelsestmt10.expected b/cpp/ql/test/successor-tests/ifstmt/ifelsestmt/ifelsestmt10.expected index 4556d22f978..40b9add82cb 100644 --- a/cpp/ql/test/successor-tests/ifstmt/ifelsestmt/ifelsestmt10.expected +++ b/cpp/ql/test/successor-tests/ifstmt/ifelsestmt/ifelsestmt10.expected @@ -1,12 +1,12 @@ | 0 | ifelsestmt.c:29:22:35:1 | { ... } | 1 | ifelsestmt.c:30:3:33:8 | if (...) ... | | 1 | ifelsestmt.c:30:3:33:8 | if (...) ... | 1 | ifelsestmt.c:30:6:30:6 | 1 | -| 1 | ifelsestmt.c:30:6:30:6 | 1 | -1 | file://:0:0:0:0 | { ... } | +| 1 | ifelsestmt.c:30:6:30:6 | 1 | 2 | ifelsestmt.c:31:5:31:5 | { ... } | +| 2 | ifelsestmt.c:31:5:31:5 | { ... } | 2 | ifelsestmt.c:31:5:31:7 | label ...: | | 2 | ifelsestmt.c:31:5:31:7 | label ...: | 2 | ifelsestmt.c:31:8:31:8 | ; | | 2 | ifelsestmt.c:31:8:31:8 | ; | 5 | ifelsestmt.c:34:3:34:5 | label ...: | +| 4 | ifelsestmt.c:33:5:33:5 | { ... } | 4 | ifelsestmt.c:33:5:33:7 | label ...: | | 4 | ifelsestmt.c:33:5:33:7 | label ...: | 4 | ifelsestmt.c:33:8:33:8 | ; | | 4 | ifelsestmt.c:33:8:33:8 | ; | 5 | ifelsestmt.c:34:3:34:5 | label ...: | | 5 | ifelsestmt.c:34:3:34:5 | label ...: | 5 | ifelsestmt.c:34:6:34:6 | ; | | 5 | ifelsestmt.c:34:6:34:6 | ; | 6 | ifelsestmt.c:35:1:35:1 | return ... | | 6 | ifelsestmt.c:35:1:35:1 | return ... | 0 | ifelsestmt.c:29:6:29:18 | always_true_2 | -| -1 | file://:0:0:0:0 | { ... } | 2 | ifelsestmt.c:31:5:31:7 | label ...: | -| -1 | file://:0:0:0:0 | { ... } | 4 | ifelsestmt.c:33:5:33:7 | label ...: | diff --git a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt.cpp b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt.cpp new file mode 100644 index 00000000000..b8d09edffca --- /dev/null +++ b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt.cpp @@ -0,0 +1,8 @@ +void normal(int x, int y) { + if(int z = y; x == z) { + l1:; + } + l2:; +} + +// semmle-extractor-options: -std=c++17 diff --git a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt01.expected b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt01.expected index 9ed533ab840..73752ac3834 100644 --- a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt01.expected +++ b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt01.expected @@ -1 +1,2 @@ | ifstmt.c:28:6:28:11 | ... == ... | l2 | +| ifstmt.cpp:2:17:2:22 | ... == ... | l2 | diff --git a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt02.expected b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt02.expected index 1dfd5b6042e..fcc99833adc 100644 --- a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt02.expected +++ b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt02.expected @@ -1 +1,2 @@ | ifstmt.c:28:6:28:11 | ... == ... | l1 | +| ifstmt.cpp:2:17:2:22 | ... == ... | l1 | diff --git a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt04.expected b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt04.expected index a3eb12cc2c2..6de3a7b13f0 100644 --- a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt04.expected +++ b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt04.expected @@ -1 +1,2 @@ | ifstmt.c:29:8:29:8 | ; | l2 | +| ifstmt.cpp:3:8:3:8 | ; | l2 | diff --git a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt05.ql b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt05.ql index 46d6d103b8a..e59a59a01f4 100644 --- a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt05.ql +++ b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt05.ql @@ -1,6 +1,9 @@ /** * @name ifstmt05 - * @description Every if statement has its condition or one of the condition's descendants as its unique successor. + * @description Every if statement with an initialization has the initialization or one of the + * initialization's descendants as its unique successor. Every if statement without + * and initialization has its condition or one of the condition's descendants as + * its unique successor. */ import cpp @@ -8,7 +11,11 @@ import cpp from IfStmt is where not ( - is.getASuccessor() = is.getCondition().getAChild*() and + ( + if exists(is.getInitialization()) + then is.getASuccessor() = is.getInitialization().getAChild*() + else is.getASuccessor() = is.getCondition().getAChild*() + ) and count(is.getASuccessor()) = 1 ) select is diff --git a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt07.expected b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt07.expected index 8223f1d0c54..442846d7db7 100644 --- a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt07.expected +++ b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt07.expected @@ -1,9 +1,9 @@ | 0 | ifstmt.c:8:23:12:1 | { ... } | 1 | ifstmt.c:9:3:10:8 | if (...) ... | | 1 | ifstmt.c:9:3:10:8 | if (...) ... | 1 | ifstmt.c:9:6:9:6 | 0 | | 1 | ifstmt.c:9:6:9:6 | 0 | 3 | ifstmt.c:11:3:11:5 | label ...: | +| 2 | ifstmt.c:10:5:10:5 | { ... } | 2 | ifstmt.c:10:5:10:7 | label ...: | | 2 | ifstmt.c:10:5:10:7 | label ...: | 2 | ifstmt.c:10:8:10:8 | ; | | 2 | ifstmt.c:10:8:10:8 | ; | 3 | ifstmt.c:11:3:11:5 | label ...: | | 3 | ifstmt.c:11:3:11:5 | label ...: | 3 | ifstmt.c:11:6:11:6 | ; | | 3 | ifstmt.c:11:6:11:6 | ; | 4 | ifstmt.c:12:1:12:1 | return ... | | 4 | ifstmt.c:12:1:12:1 | return ... | 0 | ifstmt.c:8:6:8:19 | always_false_2 | -| -1 | file://:0:0:0:0 | { ... } | 2 | ifstmt.c:10:5:10:7 | label ...: | diff --git a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt09.expected b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt09.expected index a5b27cb720b..d2bc2cadcd0 100644 --- a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt09.expected +++ b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt09.expected @@ -1,9 +1,9 @@ | 0 | ifstmt.c:21:22:25:1 | { ... } | 1 | ifstmt.c:22:3:23:8 | if (...) ... | | 1 | ifstmt.c:22:3:23:8 | if (...) ... | 1 | ifstmt.c:22:6:22:6 | 1 | -| 1 | ifstmt.c:22:6:22:6 | 1 | -1 | file://:0:0:0:0 | { ... } | +| 1 | ifstmt.c:22:6:22:6 | 1 | 2 | ifstmt.c:23:5:23:5 | { ... } | +| 2 | ifstmt.c:23:5:23:5 | { ... } | 2 | ifstmt.c:23:5:23:7 | label ...: | | 2 | ifstmt.c:23:5:23:7 | label ...: | 2 | ifstmt.c:23:8:23:8 | ; | | 2 | ifstmt.c:23:8:23:8 | ; | 3 | ifstmt.c:24:3:24:5 | label ...: | | 3 | ifstmt.c:24:3:24:5 | label ...: | 3 | ifstmt.c:24:6:24:6 | ; | | 3 | ifstmt.c:24:6:24:6 | ; | 4 | ifstmt.c:25:1:25:1 | return ... | | 4 | ifstmt.c:25:1:25:1 | return ... | 0 | ifstmt.c:21:6:21:18 | always_true_2 | -| -1 | file://:0:0:0:0 | { ... } | 2 | ifstmt.c:23:5:23:7 | label ...: | diff --git a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt10.expected b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt10.expected index 8ffff11ac6e..a031d5f7d66 100644 --- a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt10.expected +++ b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt10.expected @@ -1,12 +1,27 @@ | 0 | ifstmt.c:27:27:32:1 | { ... } | 1 | ifstmt.c:28:3:30:3 | if (...) ... | +| 0 | ifstmt.cpp:1:27:6:1 | { ... } | 1 | ifstmt.cpp:2:3:4:3 | if (...) ... | | 1 | ifstmt.c:28:3:30:3 | if (...) ... | 1 | ifstmt.c:28:6:28:6 | x | | 1 | ifstmt.c:28:6:28:6 | x | 1 | ifstmt.c:28:11:28:11 | y | | 1 | ifstmt.c:28:6:28:11 | ... == ... | 1 | ifstmt.c:28:14:30:3 | { ... } | | 1 | ifstmt.c:28:6:28:11 | ... == ... | 4 | ifstmt.c:31:3:31:5 | label ...: | | 1 | ifstmt.c:28:11:28:11 | y | 1 | ifstmt.c:28:6:28:11 | ... == ... | | 1 | ifstmt.c:28:14:30:3 | { ... } | 2 | ifstmt.c:29:5:29:7 | label ...: | +| 1 | ifstmt.cpp:2:3:4:3 | if (...) ... | 1 | ifstmt.cpp:2:6:2:6 | declaration | +| 1 | ifstmt.cpp:2:6:2:6 | declaration | 1 | ifstmt.cpp:2:13:2:14 | initializer for z | +| 1 | ifstmt.cpp:2:13:2:14 | initializer for z | 1 | ifstmt.cpp:2:14:2:14 | y | +| 1 | ifstmt.cpp:2:14:2:14 | y | 1 | ifstmt.cpp:2:17:2:17 | x | +| 1 | ifstmt.cpp:2:17:2:17 | x | 1 | ifstmt.cpp:2:22:2:22 | z | +| 1 | ifstmt.cpp:2:17:2:22 | ... == ... | 1 | ifstmt.cpp:2:25:4:3 | { ... } | +| 1 | ifstmt.cpp:2:17:2:22 | ... == ... | 4 | ifstmt.cpp:5:3:5:5 | label ...: | +| 1 | ifstmt.cpp:2:22:2:22 | z | 1 | ifstmt.cpp:2:17:2:22 | ... == ... | +| 1 | ifstmt.cpp:2:25:4:3 | { ... } | 2 | ifstmt.cpp:3:5:3:7 | label ...: | | 2 | ifstmt.c:29:5:29:7 | label ...: | 2 | ifstmt.c:29:8:29:8 | ; | | 2 | ifstmt.c:29:8:29:8 | ; | 4 | ifstmt.c:31:3:31:5 | label ...: | +| 2 | ifstmt.cpp:3:5:3:7 | label ...: | 2 | ifstmt.cpp:3:8:3:8 | ; | +| 2 | ifstmt.cpp:3:8:3:8 | ; | 4 | ifstmt.cpp:5:3:5:5 | label ...: | | 4 | ifstmt.c:31:3:31:5 | label ...: | 4 | ifstmt.c:31:6:31:6 | ; | | 4 | ifstmt.c:31:6:31:6 | ; | 5 | ifstmt.c:32:1:32:1 | return ... | +| 4 | ifstmt.cpp:5:3:5:5 | label ...: | 4 | ifstmt.cpp:5:6:5:6 | ; | +| 4 | ifstmt.cpp:5:6:5:6 | ; | 5 | ifstmt.cpp:6:1:6:1 | return ... | | 5 | ifstmt.c:32:1:32:1 | return ... | 0 | ifstmt.c:27:6:27:11 | normal | +| 5 | ifstmt.cpp:6:1:6:1 | return ... | 0 | ifstmt.cpp:1:6:1:11 | normal | diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.expected b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt11.expected similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.expected rename to cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt11.expected diff --git a/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt11.ql b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt11.ql new file mode 100644 index 00000000000..ad729b076e6 --- /dev/null +++ b/cpp/ql/test/successor-tests/ifstmt/ifstmt/ifstmt11.ql @@ -0,0 +1,15 @@ +/** + * @name ifstmt11 + * @description If an initialization exists, then the condition is a successor of the initialization. + */ + +import cpp + +from IfStmt is, Expr e, Stmt s, ControlFlowNode n +where + s = is.getInitialization() and + e = is.getCondition() and + n = s.getASuccessor*() and + not exists(ControlFlowNode m | m = e.getASuccessor*() | m = n) and + not exists(ControlFlowNode m | m = e.getAPredecessor*() | m = n) +select is diff --git a/cpp/ql/test/successor-tests/pruning/graphable.expected b/cpp/ql/test/successor-tests/pruning/graphable.expected index fe4325329c5..b3aa9de1906 100644 --- a/cpp/ql/test/successor-tests/pruning/graphable.expected +++ b/cpp/ql/test/successor-tests/pruning/graphable.expected @@ -1,557 +1,575 @@ -| f_0 | false | 125 | 125 | f_0 | -| f_0 | false | 130 | 130 | 0 | -| f_0 | false | 133 | 133 | return ... | -| f_0 | false | 135 | 135 | { ... } | -| f_0 | false | 137 | 137 | ; | -| f_0 | false | 139 | 139 | { ... } | -| f_0 | false | 141 | 141 | if (...) ... | -| f_0 | false | 143 | 143 | return ... | -| f_0 | false | 145 | 145 | { ... } | -| f_0 | true | 130 | 139 | F | -| f_0 | true | 133 | 125 | | -| f_0 | true | 135 | 133 | | -| f_0 | true | 137 | 143 | | -| f_0 | true | 139 | 137 | | -| f_0 | true | 141 | 130 | | -| f_0 | true | 143 | 125 | | -| f_0 | true | 145 | 141 | | -| f_1 | false | 148 | 148 | f_1 | -| f_1 | false | 153 | 153 | 1 | -| f_1 | false | 154 | 154 | return ... | -| f_1 | false | 156 | 156 | { ... } | -| f_1 | false | 160 | 160 | ; | -| f_1 | false | 162 | 162 | { ... } | -| f_1 | false | 164 | 164 | if (...) ... | -| f_1 | false | 166 | 166 | return ... | -| f_1 | false | 168 | 168 | { ... } | -| f_1 | true | 153 | 156 | T | -| f_1 | true | 154 | 148 | | -| f_1 | true | 156 | 154 | | -| f_1 | true | 160 | 166 | | -| f_1 | true | 162 | 160 | | -| f_1 | true | 164 | 153 | | -| f_1 | true | 166 | 148 | | -| f_1 | true | 168 | 164 | | -| f_256 | false | 171 | 171 | f_256 | -| f_256 | false | 176 | 176 | 256 | -| f_256 | false | 177 | 177 | return ... | -| f_256 | false | 179 | 179 | { ... } | -| f_256 | false | 183 | 183 | ; | -| f_256 | false | 185 | 185 | { ... } | -| f_256 | false | 187 | 187 | if (...) ... | -| f_256 | false | 189 | 189 | return ... | -| f_256 | false | 191 | 191 | { ... } | -| f_256 | true | 176 | 179 | T | -| f_256 | true | 177 | 171 | | -| f_256 | true | 179 | 177 | | -| f_256 | true | 183 | 189 | | -| f_256 | true | 185 | 183 | | -| f_256 | true | 187 | 176 | | -| f_256 | true | 189 | 171 | | -| f_256 | true | 191 | 187 | | -| f_uint8_t_0 | false | 194 | 194 | f_uint8_t_0 | -| f_uint8_t_0 | false | 199 | 199 | 0 | -| f_uint8_t_0 | false | 200 | 200 | (uint8_t)... | -| f_uint8_t_0 | false | 206 | 206 | return ... | -| f_uint8_t_0 | false | 208 | 208 | { ... } | -| f_uint8_t_0 | false | 210 | 210 | ; | -| f_uint8_t_0 | false | 212 | 212 | { ... } | -| f_uint8_t_0 | false | 214 | 214 | if (...) ... | -| f_uint8_t_0 | false | 216 | 216 | return ... | -| f_uint8_t_0 | false | 218 | 218 | { ... } | -| f_uint8_t_0 | true | 199 | 212 | F | -| f_uint8_t_0 | true | 206 | 194 | | -| f_uint8_t_0 | true | 208 | 206 | | -| f_uint8_t_0 | true | 210 | 216 | | -| f_uint8_t_0 | true | 212 | 210 | | -| f_uint8_t_0 | true | 214 | 199 | | -| f_uint8_t_0 | true | 216 | 194 | | -| f_uint8_t_0 | true | 218 | 214 | | -| f_uint8_t_1 | false | 221 | 221 | f_uint8_t_1 | -| f_uint8_t_1 | false | 226 | 226 | 1 | -| f_uint8_t_1 | false | 227 | 227 | (uint8_t)... | -| f_uint8_t_1 | false | 231 | 231 | return ... | -| f_uint8_t_1 | false | 233 | 233 | { ... } | -| f_uint8_t_1 | false | 237 | 237 | ; | -| f_uint8_t_1 | false | 239 | 239 | { ... } | -| f_uint8_t_1 | false | 241 | 241 | if (...) ... | -| f_uint8_t_1 | false | 243 | 243 | return ... | -| f_uint8_t_1 | false | 245 | 245 | { ... } | -| f_uint8_t_1 | true | 226 | 233 | T | -| f_uint8_t_1 | true | 231 | 221 | | -| f_uint8_t_1 | true | 233 | 231 | | -| f_uint8_t_1 | true | 237 | 243 | | -| f_uint8_t_1 | true | 239 | 237 | | -| f_uint8_t_1 | true | 241 | 226 | | -| f_uint8_t_1 | true | 243 | 221 | | -| f_uint8_t_1 | true | 245 | 241 | | -| f_uint8_t_256 | false | 248 | 248 | f_uint8_t_256 | -| f_uint8_t_256 | false | 253 | 253 | 256 | -| f_uint8_t_256 | false | 254 | 254 | (uint8_t)... | -| f_uint8_t_256 | false | 260 | 260 | return ... | -| f_uint8_t_256 | false | 262 | 262 | { ... } | -| f_uint8_t_256 | false | 264 | 264 | ; | -| f_uint8_t_256 | false | 266 | 266 | { ... } | -| f_uint8_t_256 | false | 268 | 268 | if (...) ... | -| f_uint8_t_256 | false | 270 | 270 | return ... | -| f_uint8_t_256 | false | 272 | 272 | { ... } | -| f_uint8_t_256 | true | 253 | 266 | F | -| f_uint8_t_256 | true | 260 | 248 | | -| f_uint8_t_256 | true | 262 | 260 | | -| f_uint8_t_256 | true | 264 | 270 | | -| f_uint8_t_256 | true | 266 | 264 | | -| f_uint8_t_256 | true | 268 | 253 | | -| f_uint8_t_256 | true | 270 | 248 | | -| f_uint8_t_256 | true | 272 | 268 | | -| f_uint8_t_257 | false | 275 | 275 | f_uint8_t_257 | -| f_uint8_t_257 | false | 280 | 280 | 257 | -| f_uint8_t_257 | false | 281 | 281 | (uint8_t)... | -| f_uint8_t_257 | false | 285 | 285 | return ... | -| f_uint8_t_257 | false | 287 | 287 | { ... } | -| f_uint8_t_257 | false | 291 | 291 | ; | -| f_uint8_t_257 | false | 293 | 293 | { ... } | -| f_uint8_t_257 | false | 295 | 295 | if (...) ... | -| f_uint8_t_257 | false | 297 | 297 | return ... | -| f_uint8_t_257 | false | 299 | 299 | { ... } | -| f_uint8_t_257 | true | 280 | 287 | T | -| f_uint8_t_257 | true | 285 | 275 | | -| f_uint8_t_257 | true | 287 | 285 | | -| f_uint8_t_257 | true | 291 | 297 | | -| f_uint8_t_257 | true | 293 | 291 | | -| f_uint8_t_257 | true | 295 | 280 | | -| f_uint8_t_257 | true | 297 | 275 | | -| f_uint8_t_257 | true | 299 | 295 | | -| f_uint8_t_minus1 | false | 302 | 302 | f_uint8_t_minus1 | -| f_uint8_t_minus1 | false | 307 | 307 | 255 | -| f_uint8_t_minus1 | false | 310 | 310 | 1 | -| f_uint8_t_minus1 | false | 311 | 311 | - ... | -| f_uint8_t_minus1 | false | 313 | 313 | (uint8_t)... | -| f_uint8_t_minus1 | false | 315 | 315 | (int)... | -| f_uint8_t_minus1 | false | 319 | 319 | ... == ... | -| f_uint8_t_minus1 | false | 323 | 323 | return ... | -| f_uint8_t_minus1 | false | 325 | 325 | { ... } | -| f_uint8_t_minus1 | false | 329 | 329 | ; | -| f_uint8_t_minus1 | false | 331 | 331 | { ... } | -| f_uint8_t_minus1 | false | 333 | 333 | if (...) ... | -| f_uint8_t_minus1 | false | 335 | 335 | return ... | -| f_uint8_t_minus1 | false | 337 | 337 | { ... } | -| f_uint8_t_minus1 | true | 307 | 310 | | -| f_uint8_t_minus1 | true | 310 | 311 | | -| f_uint8_t_minus1 | true | 311 | 319 | | -| f_uint8_t_minus1 | true | 319 | 325 | T | -| f_uint8_t_minus1 | true | 323 | 302 | | -| f_uint8_t_minus1 | true | 325 | 323 | | -| f_uint8_t_minus1 | true | 329 | 335 | | -| f_uint8_t_minus1 | true | 331 | 329 | | -| f_uint8_t_minus1 | true | 333 | 307 | | -| f_uint8_t_minus1 | true | 335 | 302 | | -| f_uint8_t_minus1 | true | 337 | 333 | | -| f_v_int_0 | false | 340 | 340 | f_v_int_0 | -| f_v_int_0 | false | 346 | 346 | 0 | -| f_v_int_0 | false | 347 | 347 | initializer for i | -| f_v_int_0 | false | 350 | 350 | declaration | -| f_v_int_0 | false | 352 | 352 | i | -| f_v_int_0 | false | 356 | 356 | return ... | -| f_v_int_0 | false | 358 | 358 | { ... } | -| f_v_int_0 | false | 360 | 360 | ; | -| f_v_int_0 | false | 362 | 362 | { ... } | -| f_v_int_0 | false | 364 | 364 | if (...) ... | -| f_v_int_0 | false | 366 | 366 | return ... | -| f_v_int_0 | false | 368 | 368 | { ... } | -| f_v_int_0 | true | 346 | 364 | | -| f_v_int_0 | true | 347 | 346 | | -| f_v_int_0 | true | 350 | 347 | | -| f_v_int_0 | true | 352 | 362 | F | -| f_v_int_0 | true | 356 | 340 | | -| f_v_int_0 | true | 358 | 356 | | -| f_v_int_0 | true | 360 | 366 | | -| f_v_int_0 | true | 362 | 360 | | -| f_v_int_0 | true | 364 | 352 | | -| f_v_int_0 | true | 366 | 340 | | -| f_v_int_0 | true | 368 | 350 | | -| f_v_int_1 | false | 371 | 371 | f_v_int_1 | -| f_v_int_1 | false | 377 | 377 | 1 | -| f_v_int_1 | false | 378 | 378 | initializer for i | -| f_v_int_1 | false | 381 | 381 | declaration | -| f_v_int_1 | false | 383 | 383 | i | -| f_v_int_1 | false | 385 | 385 | return ... | -| f_v_int_1 | false | 387 | 387 | { ... } | -| f_v_int_1 | false | 391 | 391 | ; | -| f_v_int_1 | false | 393 | 393 | { ... } | -| f_v_int_1 | false | 395 | 395 | if (...) ... | -| f_v_int_1 | false | 397 | 397 | return ... | -| f_v_int_1 | false | 399 | 399 | { ... } | -| f_v_int_1 | true | 377 | 395 | | -| f_v_int_1 | true | 378 | 377 | | -| f_v_int_1 | true | 381 | 378 | | -| f_v_int_1 | true | 383 | 387 | T | -| f_v_int_1 | true | 385 | 371 | | -| f_v_int_1 | true | 387 | 385 | | -| f_v_int_1 | true | 391 | 397 | | -| f_v_int_1 | true | 393 | 391 | | -| f_v_int_1 | true | 395 | 383 | | -| f_v_int_1 | true | 397 | 371 | | -| f_v_int_1 | true | 399 | 381 | | -| f_v_int_256 | false | 402 | 402 | f_v_int_256 | -| f_v_int_256 | false | 408 | 408 | 256 | -| f_v_int_256 | false | 409 | 409 | initializer for i | -| f_v_int_256 | false | 412 | 412 | declaration | -| f_v_int_256 | false | 414 | 414 | i | -| f_v_int_256 | false | 416 | 416 | return ... | -| f_v_int_256 | false | 418 | 418 | { ... } | -| f_v_int_256 | false | 422 | 422 | ; | -| f_v_int_256 | false | 424 | 424 | { ... } | -| f_v_int_256 | false | 426 | 426 | if (...) ... | -| f_v_int_256 | false | 428 | 428 | return ... | -| f_v_int_256 | false | 430 | 430 | { ... } | -| f_v_int_256 | true | 408 | 426 | | -| f_v_int_256 | true | 409 | 408 | | -| f_v_int_256 | true | 412 | 409 | | -| f_v_int_256 | true | 414 | 418 | T | -| f_v_int_256 | true | 416 | 402 | | -| f_v_int_256 | true | 418 | 416 | | -| f_v_int_256 | true | 422 | 428 | | -| f_v_int_256 | true | 424 | 422 | | -| f_v_int_256 | true | 426 | 414 | | -| f_v_int_256 | true | 428 | 402 | | -| f_v_int_256 | true | 430 | 412 | | -| f_v_uint8_t_0 | false | 433 | 433 | f_v_uint8_t_0 | -| f_v_uint8_t_0 | false | 439 | 439 | 0 | -| f_v_uint8_t_0 | false | 440 | 440 | (uint8_t)... | -| f_v_uint8_t_0 | false | 443 | 443 | initializer for i | -| f_v_uint8_t_0 | false | 447 | 447 | declaration | -| f_v_uint8_t_0 | false | 449 | 449 | i | -| f_v_uint8_t_0 | false | 453 | 453 | return ... | -| f_v_uint8_t_0 | false | 455 | 455 | { ... } | -| f_v_uint8_t_0 | false | 457 | 457 | ; | -| f_v_uint8_t_0 | false | 459 | 459 | { ... } | -| f_v_uint8_t_0 | false | 461 | 461 | if (...) ... | -| f_v_uint8_t_0 | false | 463 | 463 | return ... | -| f_v_uint8_t_0 | false | 465 | 465 | { ... } | -| f_v_uint8_t_0 | true | 439 | 461 | | -| f_v_uint8_t_0 | true | 443 | 439 | | -| f_v_uint8_t_0 | true | 447 | 443 | | -| f_v_uint8_t_0 | true | 449 | 459 | F | -| f_v_uint8_t_0 | true | 453 | 433 | | -| f_v_uint8_t_0 | true | 455 | 453 | | -| f_v_uint8_t_0 | true | 457 | 463 | | -| f_v_uint8_t_0 | true | 459 | 457 | | -| f_v_uint8_t_0 | true | 461 | 449 | | -| f_v_uint8_t_0 | true | 463 | 433 | | -| f_v_uint8_t_0 | true | 465 | 447 | | -| f_v_uint8_t_1 | false | 468 | 468 | f_v_uint8_t_1 | -| f_v_uint8_t_1 | false | 474 | 474 | 1 | -| f_v_uint8_t_1 | false | 475 | 475 | (uint8_t)... | -| f_v_uint8_t_1 | false | 478 | 478 | initializer for i | -| f_v_uint8_t_1 | false | 482 | 482 | declaration | -| f_v_uint8_t_1 | false | 484 | 484 | i | -| f_v_uint8_t_1 | false | 486 | 486 | return ... | -| f_v_uint8_t_1 | false | 488 | 488 | { ... } | -| f_v_uint8_t_1 | false | 492 | 492 | ; | -| f_v_uint8_t_1 | false | 494 | 494 | { ... } | -| f_v_uint8_t_1 | false | 496 | 496 | if (...) ... | -| f_v_uint8_t_1 | false | 498 | 498 | return ... | -| f_v_uint8_t_1 | false | 500 | 500 | { ... } | -| f_v_uint8_t_1 | true | 474 | 496 | | -| f_v_uint8_t_1 | true | 478 | 474 | | -| f_v_uint8_t_1 | true | 482 | 478 | | -| f_v_uint8_t_1 | true | 484 | 488 | T | -| f_v_uint8_t_1 | true | 486 | 468 | | -| f_v_uint8_t_1 | true | 488 | 486 | | -| f_v_uint8_t_1 | true | 492 | 498 | | -| f_v_uint8_t_1 | true | 494 | 492 | | -| f_v_uint8_t_1 | true | 496 | 484 | | -| f_v_uint8_t_1 | true | 498 | 468 | | -| f_v_uint8_t_1 | true | 500 | 482 | | -| f_v_uint8_t_256 | false | 503 | 503 | f_v_uint8_t_256 | -| f_v_uint8_t_256 | false | 509 | 509 | 256 | -| f_v_uint8_t_256 | false | 510 | 510 | (uint8_t)... | -| f_v_uint8_t_256 | false | 513 | 513 | initializer for i | -| f_v_uint8_t_256 | false | 517 | 517 | declaration | -| f_v_uint8_t_256 | false | 519 | 519 | i | -| f_v_uint8_t_256 | false | 523 | 523 | return ... | -| f_v_uint8_t_256 | false | 525 | 525 | { ... } | -| f_v_uint8_t_256 | false | 527 | 527 | ; | -| f_v_uint8_t_256 | false | 529 | 529 | { ... } | -| f_v_uint8_t_256 | false | 531 | 531 | if (...) ... | -| f_v_uint8_t_256 | false | 533 | 533 | return ... | -| f_v_uint8_t_256 | false | 535 | 535 | { ... } | -| f_v_uint8_t_256 | true | 509 | 531 | | -| f_v_uint8_t_256 | true | 513 | 509 | | -| f_v_uint8_t_256 | true | 517 | 513 | | -| f_v_uint8_t_256 | true | 519 | 529 | F | -| f_v_uint8_t_256 | true | 523 | 503 | | -| f_v_uint8_t_256 | true | 525 | 523 | | -| f_v_uint8_t_256 | true | 527 | 533 | | -| f_v_uint8_t_256 | true | 529 | 527 | | -| f_v_uint8_t_256 | true | 531 | 519 | | -| f_v_uint8_t_256 | true | 533 | 503 | | -| f_v_uint8_t_256 | true | 535 | 517 | | -| f_v_uint8_t_257 | false | 538 | 538 | f_v_uint8_t_257 | -| f_v_uint8_t_257 | false | 544 | 544 | 257 | -| f_v_uint8_t_257 | false | 545 | 545 | (uint8_t)... | -| f_v_uint8_t_257 | false | 548 | 548 | initializer for i | -| f_v_uint8_t_257 | false | 552 | 552 | declaration | -| f_v_uint8_t_257 | false | 554 | 554 | i | -| f_v_uint8_t_257 | false | 556 | 556 | return ... | -| f_v_uint8_t_257 | false | 558 | 558 | { ... } | -| f_v_uint8_t_257 | false | 562 | 562 | ; | -| f_v_uint8_t_257 | false | 564 | 564 | { ... } | -| f_v_uint8_t_257 | false | 566 | 566 | if (...) ... | -| f_v_uint8_t_257 | false | 568 | 568 | return ... | -| f_v_uint8_t_257 | false | 570 | 570 | { ... } | -| f_v_uint8_t_257 | true | 544 | 566 | | -| f_v_uint8_t_257 | true | 548 | 544 | | -| f_v_uint8_t_257 | true | 552 | 548 | | -| f_v_uint8_t_257 | true | 554 | 558 | T | -| f_v_uint8_t_257 | true | 556 | 538 | | -| f_v_uint8_t_257 | true | 558 | 556 | | -| f_v_uint8_t_257 | true | 562 | 568 | | -| f_v_uint8_t_257 | true | 564 | 562 | | -| f_v_uint8_t_257 | true | 566 | 554 | | -| f_v_uint8_t_257 | true | 568 | 538 | | -| f_v_uint8_t_257 | true | 570 | 552 | | -| f_v_uint8_t_minus1 | false | 573 | 573 | f_v_uint8_t_minus1 | -| f_v_uint8_t_minus1 | false | 579 | 579 | 1 | -| f_v_uint8_t_minus1 | false | 580 | 580 | - ... | -| f_v_uint8_t_minus1 | false | 582 | 582 | (uint8_t)... | -| f_v_uint8_t_minus1 | false | 586 | 586 | initializer for i | -| f_v_uint8_t_minus1 | false | 590 | 590 | declaration | -| f_v_uint8_t_minus1 | false | 594 | 594 | 255 | -| f_v_uint8_t_minus1 | false | 595 | 595 | i | -| f_v_uint8_t_minus1 | false | 597 | 597 | (int)... | -| f_v_uint8_t_minus1 | false | 599 | 599 | ... == ... | -| f_v_uint8_t_minus1 | false | 601 | 601 | return ... | -| f_v_uint8_t_minus1 | false | 603 | 603 | { ... } | -| f_v_uint8_t_minus1 | false | 607 | 607 | ; | -| f_v_uint8_t_minus1 | false | 609 | 609 | { ... } | -| f_v_uint8_t_minus1 | false | 611 | 611 | if (...) ... | -| f_v_uint8_t_minus1 | false | 613 | 613 | return ... | -| f_v_uint8_t_minus1 | false | 615 | 615 | { ... } | -| f_v_uint8_t_minus1 | true | 579 | 580 | | -| f_v_uint8_t_minus1 | true | 580 | 611 | | -| f_v_uint8_t_minus1 | true | 586 | 579 | | -| f_v_uint8_t_minus1 | true | 590 | 586 | | -| f_v_uint8_t_minus1 | true | 594 | 595 | | -| f_v_uint8_t_minus1 | true | 595 | 599 | | -| f_v_uint8_t_minus1 | true | 599 | 603 | T | -| f_v_uint8_t_minus1 | true | 601 | 573 | | -| f_v_uint8_t_minus1 | true | 603 | 601 | | -| f_v_uint8_t_minus1 | true | 607 | 613 | | -| f_v_uint8_t_minus1 | true | 609 | 607 | | -| f_v_uint8_t_minus1 | true | 611 | 594 | | -| f_v_uint8_t_minus1 | true | 613 | 573 | | -| f_v_uint8_t_minus1 | true | 615 | 590 | | -| switch_asm | false | 878 | 878 | switch_asm | -| switch_asm | false | 884 | 884 | 0 | -| switch_asm | false | 885 | 885 | initializer for faulted | -| switch_asm | false | 888 | 888 | declaration | -| switch_asm | false | 890 | 890 | faulted | -| switch_asm | false | 892 | 892 | faulted | -| switch_asm | false | 894 | 894 | asm statement | -| switch_asm | false | 896 | 896 | faulted | -| switch_asm | false | 900 | 900 | 1 | -| switch_asm | false | 901 | 901 | case ...: | -| switch_asm | false | 903 | 903 | break; | -| switch_asm | false | 905 | 905 | { ... } | -| switch_asm | false | 907 | 907 | switch (...) ... | -| switch_asm | false | 909 | 909 | label ...: | -| switch_asm | false | 911 | 911 | return ... | -| switch_asm | false | 913 | 913 | { ... } | -| switch_asm | true | 884 | 894 | | -| switch_asm | true | 885 | 884 | | -| switch_asm | true | 888 | 885 | | -| switch_asm | true | 890 | 892 | | -| switch_asm | true | 892 | 907 | | -| switch_asm | true | 894 | 890 | | -| switch_asm | true | 896 | 905 | | -| switch_asm | true | 901 | 903 | | -| switch_asm | true | 903 | 909 | | -| switch_asm | true | 905 | 901 | | -| switch_asm | true | 905 | 909 | | -| switch_asm | true | 907 | 896 | | -| switch_asm | true | 909 | 911 | | -| switch_asm | true | 911 | 878 | | -| switch_asm | true | 913 | 888 | | -| switch_f_0 | false | 618 | 618 | switch_f_0 | -| switch_f_0 | false | 623 | 623 | 255 | -| switch_f_0 | false | 626 | 626 | 0 | -| switch_f_0 | false | 627 | 627 | case ...: | -| switch_f_0 | false | 631 | 631 | break; | -| switch_f_0 | false | 633 | 633 | { ... } | -| switch_f_0 | false | 635 | 635 | switch (...) ... | -| switch_f_0 | false | 637 | 637 | label ...: | -| switch_f_0 | false | 639 | 639 | return ... | -| switch_f_0 | false | 641 | 641 | { ... } | -| switch_f_0 | true | 623 | 633 | | -| switch_f_0 | true | 627 | 631 | | -| switch_f_0 | true | 631 | 637 | | -| switch_f_0 | true | 633 | 637 | | -| switch_f_0 | true | 635 | 623 | | -| switch_f_0 | true | 637 | 639 | | -| switch_f_0 | true | 639 | 618 | | -| switch_f_0 | true | 641 | 635 | | -| switch_f_255 | false | 644 | 644 | switch_f_255 | -| switch_f_255 | false | 649 | 649 | 255 | -| switch_f_255 | false | 652 | 652 | 255 | -| switch_f_255 | false | 653 | 653 | case ...: | -| switch_f_255 | false | 655 | 655 | break; | -| switch_f_255 | false | 657 | 657 | { ... } | -| switch_f_255 | false | 659 | 659 | switch (...) ... | -| switch_f_255 | false | 661 | 661 | label ...: | -| switch_f_255 | false | 663 | 663 | return ... | -| switch_f_255 | false | 665 | 665 | { ... } | -| switch_f_255 | true | 649 | 657 | | -| switch_f_255 | true | 653 | 655 | | -| switch_f_255 | true | 655 | 661 | | -| switch_f_255 | true | 657 | 653 | | -| switch_f_255 | true | 657 | 661 | | -| switch_f_255 | true | 659 | 649 | | -| switch_f_255 | true | 661 | 663 | | -| switch_f_255 | true | 663 | 644 | | -| switch_f_255 | true | 665 | 659 | | -| switch_f_uint8_t_256 | false | 700 | 700 | switch_f_uint8_t_256 | -| switch_f_uint8_t_256 | false | 705 | 705 | 256 | -| switch_f_uint8_t_256 | false | 708 | 708 | 256 | -| switch_f_uint8_t_256 | false | 709 | 709 | (uint8_t)... | -| switch_f_uint8_t_256 | false | 711 | 711 | (int)... | -| switch_f_uint8_t_256 | false | 715 | 715 | case ...: | -| switch_f_uint8_t_256 | false | 719 | 719 | break; | -| switch_f_uint8_t_256 | false | 721 | 721 | { ... } | -| switch_f_uint8_t_256 | false | 723 | 723 | switch (...) ... | -| switch_f_uint8_t_256 | false | 725 | 725 | label ...: | -| switch_f_uint8_t_256 | false | 727 | 727 | return ... | -| switch_f_uint8_t_256 | false | 729 | 729 | { ... } | -| switch_f_uint8_t_256 | true | 705 | 721 | | -| switch_f_uint8_t_256 | true | 715 | 719 | | -| switch_f_uint8_t_256 | true | 719 | 725 | | -| switch_f_uint8_t_256 | true | 721 | 725 | | -| switch_f_uint8_t_256 | true | 723 | 705 | | -| switch_f_uint8_t_256 | true | 725 | 727 | | -| switch_f_uint8_t_256 | true | 727 | 700 | | -| switch_f_uint8_t_256 | true | 729 | 723 | | -| switch_f_uint8_t_minus1 | false | 668 | 668 | switch_f_uint8_t_minus1 | -| switch_f_uint8_t_minus1 | false | 673 | 673 | 255 | -| switch_f_uint8_t_minus1 | false | 676 | 676 | 1 | -| switch_f_uint8_t_minus1 | false | 677 | 677 | - ... | -| switch_f_uint8_t_minus1 | false | 679 | 679 | (uint8_t)... | -| switch_f_uint8_t_minus1 | false | 681 | 681 | (int)... | -| switch_f_uint8_t_minus1 | false | 685 | 685 | case ...: | -| switch_f_uint8_t_minus1 | false | 687 | 687 | break; | -| switch_f_uint8_t_minus1 | false | 689 | 689 | { ... } | -| switch_f_uint8_t_minus1 | false | 691 | 691 | switch (...) ... | -| switch_f_uint8_t_minus1 | false | 693 | 693 | label ...: | -| switch_f_uint8_t_minus1 | false | 695 | 695 | return ... | -| switch_f_uint8_t_minus1 | false | 697 | 697 | { ... } | -| switch_f_uint8_t_minus1 | true | 673 | 689 | | -| switch_f_uint8_t_minus1 | true | 685 | 687 | | -| switch_f_uint8_t_minus1 | true | 687 | 693 | | -| switch_f_uint8_t_minus1 | true | 689 | 685 | | -| switch_f_uint8_t_minus1 | true | 689 | 693 | | -| switch_f_uint8_t_minus1 | true | 691 | 673 | | -| switch_f_uint8_t_minus1 | true | 693 | 695 | | -| switch_f_uint8_t_minus1 | true | 695 | 668 | | -| switch_f_uint8_t_minus1 | true | 697 | 691 | | -| switch_f_v_0 | false | 732 | 732 | switch_f_v_0 | -| switch_f_v_0 | false | 738 | 738 | 255 | -| switch_f_v_0 | false | 739 | 739 | initializer for i | -| switch_f_v_0 | false | 742 | 742 | declaration | -| switch_f_v_0 | false | 744 | 744 | i | -| switch_f_v_0 | false | 748 | 748 | 0 | -| switch_f_v_0 | false | 749 | 749 | case ...: | -| switch_f_v_0 | false | 753 | 753 | break; | -| switch_f_v_0 | false | 755 | 755 | { ... } | -| switch_f_v_0 | false | 757 | 757 | switch (...) ... | -| switch_f_v_0 | false | 759 | 759 | label ...: | -| switch_f_v_0 | false | 761 | 761 | return ... | -| switch_f_v_0 | false | 763 | 763 | { ... } | -| switch_f_v_0 | true | 738 | 757 | | -| switch_f_v_0 | true | 739 | 738 | | -| switch_f_v_0 | true | 742 | 739 | | -| switch_f_v_0 | true | 744 | 755 | | -| switch_f_v_0 | true | 749 | 753 | | -| switch_f_v_0 | true | 753 | 759 | | -| switch_f_v_0 | true | 755 | 759 | | -| switch_f_v_0 | true | 757 | 744 | | -| switch_f_v_0 | true | 759 | 761 | | -| switch_f_v_0 | true | 761 | 732 | | -| switch_f_v_0 | true | 763 | 742 | | -| switch_f_v_255 | false | 766 | 766 | switch_f_v_255 | -| switch_f_v_255 | false | 772 | 772 | 255 | -| switch_f_v_255 | false | 773 | 773 | initializer for i | -| switch_f_v_255 | false | 776 | 776 | declaration | -| switch_f_v_255 | false | 778 | 778 | i | -| switch_f_v_255 | false | 782 | 782 | 255 | -| switch_f_v_255 | false | 783 | 783 | case ...: | -| switch_f_v_255 | false | 785 | 785 | break; | -| switch_f_v_255 | false | 787 | 787 | { ... } | -| switch_f_v_255 | false | 789 | 789 | switch (...) ... | -| switch_f_v_255 | false | 791 | 791 | label ...: | -| switch_f_v_255 | false | 793 | 793 | return ... | -| switch_f_v_255 | false | 795 | 795 | { ... } | -| switch_f_v_255 | true | 772 | 789 | | -| switch_f_v_255 | true | 773 | 772 | | -| switch_f_v_255 | true | 776 | 773 | | -| switch_f_v_255 | true | 778 | 787 | | -| switch_f_v_255 | true | 783 | 785 | | -| switch_f_v_255 | true | 785 | 791 | | -| switch_f_v_255 | true | 787 | 783 | | -| switch_f_v_255 | true | 787 | 791 | | -| switch_f_v_255 | true | 789 | 778 | | -| switch_f_v_255 | true | 791 | 793 | | -| switch_f_v_255 | true | 793 | 766 | | -| switch_f_v_255 | true | 795 | 776 | | -| switch_f_v_uint8_t_256 | false | 838 | 838 | switch_f_v_uint8_t_256 | -| switch_f_v_uint8_t_256 | false | 844 | 844 | 256 | -| switch_f_v_uint8_t_256 | false | 845 | 845 | initializer for i | -| switch_f_v_uint8_t_256 | false | 848 | 848 | declaration | -| switch_f_v_uint8_t_256 | false | 850 | 850 | i | -| switch_f_v_uint8_t_256 | false | 854 | 854 | 256 | -| switch_f_v_uint8_t_256 | false | 855 | 855 | (uint8_t)... | -| switch_f_v_uint8_t_256 | false | 857 | 857 | (int)... | -| switch_f_v_uint8_t_256 | false | 861 | 861 | case ...: | -| switch_f_v_uint8_t_256 | false | 865 | 865 | break; | -| switch_f_v_uint8_t_256 | false | 867 | 867 | { ... } | -| switch_f_v_uint8_t_256 | false | 869 | 869 | switch (...) ... | -| switch_f_v_uint8_t_256 | false | 871 | 871 | label ...: | -| switch_f_v_uint8_t_256 | false | 873 | 873 | return ... | -| switch_f_v_uint8_t_256 | false | 875 | 875 | { ... } | -| switch_f_v_uint8_t_256 | true | 844 | 869 | | -| switch_f_v_uint8_t_256 | true | 845 | 844 | | -| switch_f_v_uint8_t_256 | true | 848 | 845 | | -| switch_f_v_uint8_t_256 | true | 850 | 867 | | -| switch_f_v_uint8_t_256 | true | 861 | 865 | | -| switch_f_v_uint8_t_256 | true | 865 | 871 | | -| switch_f_v_uint8_t_256 | true | 867 | 871 | | -| switch_f_v_uint8_t_256 | true | 869 | 850 | | -| switch_f_v_uint8_t_256 | true | 871 | 873 | | -| switch_f_v_uint8_t_256 | true | 873 | 838 | | -| switch_f_v_uint8_t_256 | true | 875 | 848 | | -| switch_f_v_uint8_t_minus1 | false | 798 | 798 | switch_f_v_uint8_t_minus1 | -| switch_f_v_uint8_t_minus1 | false | 804 | 804 | 255 | -| switch_f_v_uint8_t_minus1 | false | 805 | 805 | initializer for i | -| switch_f_v_uint8_t_minus1 | false | 808 | 808 | declaration | -| switch_f_v_uint8_t_minus1 | false | 810 | 810 | i | -| switch_f_v_uint8_t_minus1 | false | 814 | 814 | 1 | -| switch_f_v_uint8_t_minus1 | false | 815 | 815 | - ... | -| switch_f_v_uint8_t_minus1 | false | 817 | 817 | (uint8_t)... | -| switch_f_v_uint8_t_minus1 | false | 819 | 819 | (int)... | -| switch_f_v_uint8_t_minus1 | false | 823 | 823 | case ...: | -| switch_f_v_uint8_t_minus1 | false | 825 | 825 | break; | -| switch_f_v_uint8_t_minus1 | false | 827 | 827 | { ... } | -| switch_f_v_uint8_t_minus1 | false | 829 | 829 | switch (...) ... | -| switch_f_v_uint8_t_minus1 | false | 831 | 831 | label ...: | -| switch_f_v_uint8_t_minus1 | false | 833 | 833 | return ... | -| switch_f_v_uint8_t_minus1 | false | 835 | 835 | { ... } | -| switch_f_v_uint8_t_minus1 | true | 804 | 829 | | -| switch_f_v_uint8_t_minus1 | true | 805 | 804 | | -| switch_f_v_uint8_t_minus1 | true | 808 | 805 | | -| switch_f_v_uint8_t_minus1 | true | 810 | 827 | | -| switch_f_v_uint8_t_minus1 | true | 823 | 825 | | -| switch_f_v_uint8_t_minus1 | true | 825 | 831 | | -| switch_f_v_uint8_t_minus1 | true | 827 | 823 | | -| switch_f_v_uint8_t_minus1 | true | 827 | 831 | | -| switch_f_v_uint8_t_minus1 | true | 829 | 810 | | -| switch_f_v_uint8_t_minus1 | true | 831 | 833 | | -| switch_f_v_uint8_t_minus1 | true | 833 | 798 | | -| switch_f_v_uint8_t_minus1 | true | 835 | 808 | | +| f_0 | false | 900 | 900 | f_0 | +| f_0 | false | 905 | 905 | if (...) ... | +| f_0 | false | 909 | 909 | 0 | +| f_0 | false | 910 | 910 | return ... | +| f_0 | false | 912 | 912 | { ... } | +| f_0 | false | 914 | 914 | ; | +| f_0 | false | 916 | 916 | { ... } | +| f_0 | false | 918 | 918 | return ... | +| f_0 | false | 920 | 920 | { ... } | +| f_0 | true | 905 | 909 | | +| f_0 | true | 909 | 916 | F | +| f_0 | true | 910 | 900 | | +| f_0 | true | 912 | 910 | | +| f_0 | true | 914 | 918 | | +| f_0 | true | 916 | 914 | | +| f_0 | true | 918 | 900 | | +| f_0 | true | 920 | 905 | | +| f_1 | false | 878 | 878 | f_1 | +| f_1 | false | 883 | 883 | if (...) ... | +| f_1 | false | 887 | 887 | 1 | +| f_1 | false | 888 | 888 | return ... | +| f_1 | false | 890 | 890 | { ... } | +| f_1 | false | 892 | 892 | ; | +| f_1 | false | 894 | 894 | { ... } | +| f_1 | false | 896 | 896 | return ... | +| f_1 | false | 898 | 898 | { ... } | +| f_1 | true | 883 | 887 | | +| f_1 | true | 887 | 890 | T | +| f_1 | true | 888 | 878 | | +| f_1 | true | 890 | 888 | | +| f_1 | true | 892 | 896 | | +| f_1 | true | 894 | 892 | | +| f_1 | true | 896 | 878 | | +| f_1 | true | 898 | 883 | | +| f_256 | false | 856 | 856 | f_256 | +| f_256 | false | 861 | 861 | if (...) ... | +| f_256 | false | 865 | 865 | 256 | +| f_256 | false | 866 | 866 | return ... | +| f_256 | false | 868 | 868 | { ... } | +| f_256 | false | 870 | 870 | ; | +| f_256 | false | 872 | 872 | { ... } | +| f_256 | false | 874 | 874 | return ... | +| f_256 | false | 876 | 876 | { ... } | +| f_256 | true | 861 | 865 | | +| f_256 | true | 865 | 868 | T | +| f_256 | true | 866 | 856 | | +| f_256 | true | 868 | 866 | | +| f_256 | true | 870 | 874 | | +| f_256 | true | 872 | 870 | | +| f_256 | true | 874 | 856 | | +| f_256 | true | 876 | 861 | | +| f_uint8_t_0 | false | 831 | 831 | f_uint8_t_0 | +| f_uint8_t_0 | false | 836 | 836 | if (...) ... | +| f_uint8_t_0 | false | 840 | 840 | 0 | +| f_uint8_t_0 | false | 841 | 841 | (uint8_t)... | +| f_uint8_t_0 | false | 844 | 844 | return ... | +| f_uint8_t_0 | false | 846 | 846 | { ... } | +| f_uint8_t_0 | false | 848 | 848 | ; | +| f_uint8_t_0 | false | 850 | 850 | { ... } | +| f_uint8_t_0 | false | 852 | 852 | return ... | +| f_uint8_t_0 | false | 854 | 854 | { ... } | +| f_uint8_t_0 | true | 836 | 840 | | +| f_uint8_t_0 | true | 840 | 850 | F | +| f_uint8_t_0 | true | 844 | 831 | | +| f_uint8_t_0 | true | 846 | 844 | | +| f_uint8_t_0 | true | 848 | 852 | | +| f_uint8_t_0 | true | 850 | 848 | | +| f_uint8_t_0 | true | 852 | 831 | | +| f_uint8_t_0 | true | 854 | 836 | | +| f_uint8_t_1 | false | 806 | 806 | f_uint8_t_1 | +| f_uint8_t_1 | false | 811 | 811 | if (...) ... | +| f_uint8_t_1 | false | 815 | 815 | 1 | +| f_uint8_t_1 | false | 816 | 816 | (uint8_t)... | +| f_uint8_t_1 | false | 819 | 819 | return ... | +| f_uint8_t_1 | false | 821 | 821 | { ... } | +| f_uint8_t_1 | false | 823 | 823 | ; | +| f_uint8_t_1 | false | 825 | 825 | { ... } | +| f_uint8_t_1 | false | 827 | 827 | return ... | +| f_uint8_t_1 | false | 829 | 829 | { ... } | +| f_uint8_t_1 | true | 811 | 815 | | +| f_uint8_t_1 | true | 815 | 821 | T | +| f_uint8_t_1 | true | 819 | 806 | | +| f_uint8_t_1 | true | 821 | 819 | | +| f_uint8_t_1 | true | 823 | 827 | | +| f_uint8_t_1 | true | 825 | 823 | | +| f_uint8_t_1 | true | 827 | 806 | | +| f_uint8_t_1 | true | 829 | 811 | | +| f_uint8_t_256 | false | 781 | 781 | f_uint8_t_256 | +| f_uint8_t_256 | false | 786 | 786 | if (...) ... | +| f_uint8_t_256 | false | 790 | 790 | 256 | +| f_uint8_t_256 | false | 791 | 791 | (uint8_t)... | +| f_uint8_t_256 | false | 794 | 794 | return ... | +| f_uint8_t_256 | false | 796 | 796 | { ... } | +| f_uint8_t_256 | false | 798 | 798 | ; | +| f_uint8_t_256 | false | 800 | 800 | { ... } | +| f_uint8_t_256 | false | 802 | 802 | return ... | +| f_uint8_t_256 | false | 804 | 804 | { ... } | +| f_uint8_t_256 | true | 786 | 790 | | +| f_uint8_t_256 | true | 790 | 800 | F | +| f_uint8_t_256 | true | 794 | 781 | | +| f_uint8_t_256 | true | 796 | 794 | | +| f_uint8_t_256 | true | 798 | 802 | | +| f_uint8_t_256 | true | 800 | 798 | | +| f_uint8_t_256 | true | 802 | 781 | | +| f_uint8_t_256 | true | 804 | 786 | | +| f_uint8_t_257 | false | 756 | 756 | f_uint8_t_257 | +| f_uint8_t_257 | false | 761 | 761 | if (...) ... | +| f_uint8_t_257 | false | 765 | 765 | 257 | +| f_uint8_t_257 | false | 766 | 766 | (uint8_t)... | +| f_uint8_t_257 | false | 769 | 769 | return ... | +| f_uint8_t_257 | false | 771 | 771 | { ... } | +| f_uint8_t_257 | false | 773 | 773 | ; | +| f_uint8_t_257 | false | 775 | 775 | { ... } | +| f_uint8_t_257 | false | 777 | 777 | return ... | +| f_uint8_t_257 | false | 779 | 779 | { ... } | +| f_uint8_t_257 | true | 761 | 765 | | +| f_uint8_t_257 | true | 765 | 771 | T | +| f_uint8_t_257 | true | 769 | 756 | | +| f_uint8_t_257 | true | 771 | 769 | | +| f_uint8_t_257 | true | 773 | 777 | | +| f_uint8_t_257 | true | 775 | 773 | | +| f_uint8_t_257 | true | 777 | 756 | | +| f_uint8_t_257 | true | 779 | 761 | | +| f_uint8_t_minus1 | false | 722 | 722 | f_uint8_t_minus1 | +| f_uint8_t_minus1 | false | 727 | 727 | if (...) ... | +| f_uint8_t_minus1 | false | 731 | 731 | 255 | +| f_uint8_t_minus1 | false | 734 | 734 | 1 | +| f_uint8_t_minus1 | false | 735 | 735 | - ... | +| f_uint8_t_minus1 | false | 737 | 737 | (uint8_t)... | +| f_uint8_t_minus1 | false | 739 | 739 | (int)... | +| f_uint8_t_minus1 | false | 741 | 741 | ... == ... | +| f_uint8_t_minus1 | false | 744 | 744 | return ... | +| f_uint8_t_minus1 | false | 746 | 746 | { ... } | +| f_uint8_t_minus1 | false | 748 | 748 | ; | +| f_uint8_t_minus1 | false | 750 | 750 | { ... } | +| f_uint8_t_minus1 | false | 752 | 752 | return ... | +| f_uint8_t_minus1 | false | 754 | 754 | { ... } | +| f_uint8_t_minus1 | true | 727 | 731 | | +| f_uint8_t_minus1 | true | 731 | 734 | | +| f_uint8_t_minus1 | true | 734 | 735 | | +| f_uint8_t_minus1 | true | 735 | 741 | | +| f_uint8_t_minus1 | true | 741 | 746 | T | +| f_uint8_t_minus1 | true | 744 | 722 | | +| f_uint8_t_minus1 | true | 746 | 744 | | +| f_uint8_t_minus1 | true | 748 | 752 | | +| f_uint8_t_minus1 | true | 750 | 748 | | +| f_uint8_t_minus1 | true | 752 | 722 | | +| f_uint8_t_minus1 | true | 754 | 727 | | +| f_v_int_0 | false | 692 | 692 | f_v_int_0 | +| f_v_int_0 | false | 697 | 697 | declaration | +| f_v_int_0 | false | 702 | 702 | 0 | +| f_v_int_0 | false | 703 | 703 | initializer for i | +| f_v_int_0 | false | 706 | 706 | if (...) ... | +| f_v_int_0 | false | 708 | 708 | i | +| f_v_int_0 | false | 710 | 710 | return ... | +| f_v_int_0 | false | 712 | 712 | { ... } | +| f_v_int_0 | false | 714 | 714 | ; | +| f_v_int_0 | false | 716 | 716 | { ... } | +| f_v_int_0 | false | 718 | 718 | return ... | +| f_v_int_0 | false | 720 | 720 | { ... } | +| f_v_int_0 | true | 697 | 703 | | +| f_v_int_0 | true | 702 | 706 | | +| f_v_int_0 | true | 703 | 702 | | +| f_v_int_0 | true | 706 | 708 | | +| f_v_int_0 | true | 708 | 716 | F | +| f_v_int_0 | true | 710 | 692 | | +| f_v_int_0 | true | 712 | 710 | | +| f_v_int_0 | true | 714 | 718 | | +| f_v_int_0 | true | 716 | 714 | | +| f_v_int_0 | true | 718 | 692 | | +| f_v_int_0 | true | 720 | 697 | | +| f_v_int_1 | false | 662 | 662 | f_v_int_1 | +| f_v_int_1 | false | 667 | 667 | declaration | +| f_v_int_1 | false | 672 | 672 | 1 | +| f_v_int_1 | false | 673 | 673 | initializer for i | +| f_v_int_1 | false | 676 | 676 | if (...) ... | +| f_v_int_1 | false | 678 | 678 | i | +| f_v_int_1 | false | 680 | 680 | return ... | +| f_v_int_1 | false | 682 | 682 | { ... } | +| f_v_int_1 | false | 684 | 684 | ; | +| f_v_int_1 | false | 686 | 686 | { ... } | +| f_v_int_1 | false | 688 | 688 | return ... | +| f_v_int_1 | false | 690 | 690 | { ... } | +| f_v_int_1 | true | 667 | 673 | | +| f_v_int_1 | true | 672 | 676 | | +| f_v_int_1 | true | 673 | 672 | | +| f_v_int_1 | true | 676 | 678 | | +| f_v_int_1 | true | 678 | 682 | T | +| f_v_int_1 | true | 680 | 662 | | +| f_v_int_1 | true | 682 | 680 | | +| f_v_int_1 | true | 684 | 688 | | +| f_v_int_1 | true | 686 | 684 | | +| f_v_int_1 | true | 688 | 662 | | +| f_v_int_1 | true | 690 | 667 | | +| f_v_int_256 | false | 632 | 632 | f_v_int_256 | +| f_v_int_256 | false | 637 | 637 | declaration | +| f_v_int_256 | false | 642 | 642 | 256 | +| f_v_int_256 | false | 643 | 643 | initializer for i | +| f_v_int_256 | false | 646 | 646 | if (...) ... | +| f_v_int_256 | false | 648 | 648 | i | +| f_v_int_256 | false | 650 | 650 | return ... | +| f_v_int_256 | false | 652 | 652 | { ... } | +| f_v_int_256 | false | 654 | 654 | ; | +| f_v_int_256 | false | 656 | 656 | { ... } | +| f_v_int_256 | false | 658 | 658 | return ... | +| f_v_int_256 | false | 660 | 660 | { ... } | +| f_v_int_256 | true | 637 | 643 | | +| f_v_int_256 | true | 642 | 646 | | +| f_v_int_256 | true | 643 | 642 | | +| f_v_int_256 | true | 646 | 648 | | +| f_v_int_256 | true | 648 | 652 | T | +| f_v_int_256 | true | 650 | 632 | | +| f_v_int_256 | true | 652 | 650 | | +| f_v_int_256 | true | 654 | 658 | | +| f_v_int_256 | true | 656 | 654 | | +| f_v_int_256 | true | 658 | 632 | | +| f_v_int_256 | true | 660 | 637 | | +| f_v_uint8_t_0 | false | 599 | 599 | f_v_uint8_t_0 | +| f_v_uint8_t_0 | false | 604 | 604 | declaration | +| f_v_uint8_t_0 | false | 609 | 609 | 0 | +| f_v_uint8_t_0 | false | 610 | 610 | (uint8_t)... | +| f_v_uint8_t_0 | false | 612 | 612 | initializer for i | +| f_v_uint8_t_0 | false | 616 | 616 | if (...) ... | +| f_v_uint8_t_0 | false | 618 | 618 | i | +| f_v_uint8_t_0 | false | 620 | 620 | return ... | +| f_v_uint8_t_0 | false | 622 | 622 | { ... } | +| f_v_uint8_t_0 | false | 624 | 624 | ; | +| f_v_uint8_t_0 | false | 626 | 626 | { ... } | +| f_v_uint8_t_0 | false | 628 | 628 | return ... | +| f_v_uint8_t_0 | false | 630 | 630 | { ... } | +| f_v_uint8_t_0 | true | 604 | 612 | | +| f_v_uint8_t_0 | true | 609 | 616 | | +| f_v_uint8_t_0 | true | 612 | 609 | | +| f_v_uint8_t_0 | true | 616 | 618 | | +| f_v_uint8_t_0 | true | 618 | 626 | F | +| f_v_uint8_t_0 | true | 620 | 599 | | +| f_v_uint8_t_0 | true | 622 | 620 | | +| f_v_uint8_t_0 | true | 624 | 628 | | +| f_v_uint8_t_0 | true | 626 | 624 | | +| f_v_uint8_t_0 | true | 628 | 599 | | +| f_v_uint8_t_0 | true | 630 | 604 | | +| f_v_uint8_t_1 | false | 566 | 566 | f_v_uint8_t_1 | +| f_v_uint8_t_1 | false | 571 | 571 | declaration | +| f_v_uint8_t_1 | false | 576 | 576 | 1 | +| f_v_uint8_t_1 | false | 577 | 577 | (uint8_t)... | +| f_v_uint8_t_1 | false | 579 | 579 | initializer for i | +| f_v_uint8_t_1 | false | 583 | 583 | if (...) ... | +| f_v_uint8_t_1 | false | 585 | 585 | i | +| f_v_uint8_t_1 | false | 587 | 587 | return ... | +| f_v_uint8_t_1 | false | 589 | 589 | { ... } | +| f_v_uint8_t_1 | false | 591 | 591 | ; | +| f_v_uint8_t_1 | false | 593 | 593 | { ... } | +| f_v_uint8_t_1 | false | 595 | 595 | return ... | +| f_v_uint8_t_1 | false | 597 | 597 | { ... } | +| f_v_uint8_t_1 | true | 571 | 579 | | +| f_v_uint8_t_1 | true | 576 | 583 | | +| f_v_uint8_t_1 | true | 579 | 576 | | +| f_v_uint8_t_1 | true | 583 | 585 | | +| f_v_uint8_t_1 | true | 585 | 589 | T | +| f_v_uint8_t_1 | true | 587 | 566 | | +| f_v_uint8_t_1 | true | 589 | 587 | | +| f_v_uint8_t_1 | true | 591 | 595 | | +| f_v_uint8_t_1 | true | 593 | 591 | | +| f_v_uint8_t_1 | true | 595 | 566 | | +| f_v_uint8_t_1 | true | 597 | 571 | | +| f_v_uint8_t_256 | false | 533 | 533 | f_v_uint8_t_256 | +| f_v_uint8_t_256 | false | 538 | 538 | declaration | +| f_v_uint8_t_256 | false | 543 | 543 | 256 | +| f_v_uint8_t_256 | false | 544 | 544 | (uint8_t)... | +| f_v_uint8_t_256 | false | 546 | 546 | initializer for i | +| f_v_uint8_t_256 | false | 550 | 550 | if (...) ... | +| f_v_uint8_t_256 | false | 552 | 552 | i | +| f_v_uint8_t_256 | false | 554 | 554 | return ... | +| f_v_uint8_t_256 | false | 556 | 556 | { ... } | +| f_v_uint8_t_256 | false | 558 | 558 | ; | +| f_v_uint8_t_256 | false | 560 | 560 | { ... } | +| f_v_uint8_t_256 | false | 562 | 562 | return ... | +| f_v_uint8_t_256 | false | 564 | 564 | { ... } | +| f_v_uint8_t_256 | true | 538 | 546 | | +| f_v_uint8_t_256 | true | 543 | 550 | | +| f_v_uint8_t_256 | true | 546 | 543 | | +| f_v_uint8_t_256 | true | 550 | 552 | | +| f_v_uint8_t_256 | true | 552 | 560 | F | +| f_v_uint8_t_256 | true | 554 | 533 | | +| f_v_uint8_t_256 | true | 556 | 554 | | +| f_v_uint8_t_256 | true | 558 | 562 | | +| f_v_uint8_t_256 | true | 560 | 558 | | +| f_v_uint8_t_256 | true | 562 | 533 | | +| f_v_uint8_t_256 | true | 564 | 538 | | +| f_v_uint8_t_257 | false | 500 | 500 | f_v_uint8_t_257 | +| f_v_uint8_t_257 | false | 505 | 505 | declaration | +| f_v_uint8_t_257 | false | 510 | 510 | 257 | +| f_v_uint8_t_257 | false | 511 | 511 | (uint8_t)... | +| f_v_uint8_t_257 | false | 513 | 513 | initializer for i | +| f_v_uint8_t_257 | false | 517 | 517 | if (...) ... | +| f_v_uint8_t_257 | false | 519 | 519 | i | +| f_v_uint8_t_257 | false | 521 | 521 | return ... | +| f_v_uint8_t_257 | false | 523 | 523 | { ... } | +| f_v_uint8_t_257 | false | 525 | 525 | ; | +| f_v_uint8_t_257 | false | 527 | 527 | { ... } | +| f_v_uint8_t_257 | false | 529 | 529 | return ... | +| f_v_uint8_t_257 | false | 531 | 531 | { ... } | +| f_v_uint8_t_257 | true | 505 | 513 | | +| f_v_uint8_t_257 | true | 510 | 517 | | +| f_v_uint8_t_257 | true | 513 | 510 | | +| f_v_uint8_t_257 | true | 517 | 519 | | +| f_v_uint8_t_257 | true | 519 | 523 | T | +| f_v_uint8_t_257 | true | 521 | 500 | | +| f_v_uint8_t_257 | true | 523 | 521 | | +| f_v_uint8_t_257 | true | 525 | 529 | | +| f_v_uint8_t_257 | true | 527 | 525 | | +| f_v_uint8_t_257 | true | 529 | 500 | | +| f_v_uint8_t_257 | true | 531 | 505 | | +| f_v_uint8_t_minus1 | false | 459 | 459 | f_v_uint8_t_minus1 | +| f_v_uint8_t_minus1 | false | 464 | 464 | declaration | +| f_v_uint8_t_minus1 | false | 469 | 469 | 1 | +| f_v_uint8_t_minus1 | false | 470 | 470 | - ... | +| f_v_uint8_t_minus1 | false | 472 | 472 | (uint8_t)... | +| f_v_uint8_t_minus1 | false | 474 | 474 | initializer for i | +| f_v_uint8_t_minus1 | false | 478 | 478 | if (...) ... | +| f_v_uint8_t_minus1 | false | 482 | 482 | 255 | +| f_v_uint8_t_minus1 | false | 483 | 483 | i | +| f_v_uint8_t_minus1 | false | 485 | 485 | (int)... | +| f_v_uint8_t_minus1 | false | 486 | 486 | ... == ... | +| f_v_uint8_t_minus1 | false | 488 | 488 | return ... | +| f_v_uint8_t_minus1 | false | 490 | 490 | { ... } | +| f_v_uint8_t_minus1 | false | 492 | 492 | ; | +| f_v_uint8_t_minus1 | false | 494 | 494 | { ... } | +| f_v_uint8_t_minus1 | false | 496 | 496 | return ... | +| f_v_uint8_t_minus1 | false | 498 | 498 | { ... } | +| f_v_uint8_t_minus1 | true | 464 | 474 | | +| f_v_uint8_t_minus1 | true | 469 | 470 | | +| f_v_uint8_t_minus1 | true | 470 | 478 | | +| f_v_uint8_t_minus1 | true | 474 | 469 | | +| f_v_uint8_t_minus1 | true | 478 | 482 | | +| f_v_uint8_t_minus1 | true | 482 | 483 | | +| f_v_uint8_t_minus1 | true | 483 | 486 | | +| f_v_uint8_t_minus1 | true | 486 | 490 | T | +| f_v_uint8_t_minus1 | true | 488 | 459 | | +| f_v_uint8_t_minus1 | true | 490 | 488 | | +| f_v_uint8_t_minus1 | true | 492 | 496 | | +| f_v_uint8_t_minus1 | true | 494 | 492 | | +| f_v_uint8_t_minus1 | true | 496 | 459 | | +| f_v_uint8_t_minus1 | true | 498 | 464 | | +| switch_asm | false | 150 | 150 | switch_asm | +| switch_asm | false | 155 | 155 | declaration | +| switch_asm | false | 160 | 160 | 0 | +| switch_asm | false | 161 | 161 | initializer for faulted | +| switch_asm | false | 164 | 164 | asm statement | +| switch_asm | false | 166 | 166 | faulted | +| switch_asm | false | 168 | 168 | faulted | +| switch_asm | false | 170 | 170 | switch (...) ... | +| switch_asm | false | 172 | 172 | faulted | +| switch_asm | false | 174 | 174 | case ...: | +| switch_asm | false | 178 | 178 | 1 | +| switch_asm | false | 179 | 179 | break; | +| switch_asm | false | 181 | 181 | { ... } | +| switch_asm | false | 183 | 183 | label ...: | +| switch_asm | false | 185 | 185 | { ... } | +| switch_asm | false | 187 | 187 | return ... | +| switch_asm | false | 189 | 189 | { ... } | +| switch_asm | true | 155 | 161 | | +| switch_asm | true | 160 | 164 | | +| switch_asm | true | 161 | 160 | | +| switch_asm | true | 164 | 166 | | +| switch_asm | true | 166 | 168 | | +| switch_asm | true | 168 | 185 | | +| switch_asm | true | 170 | 172 | | +| switch_asm | true | 172 | 181 | | +| switch_asm | true | 174 | 179 | | +| switch_asm | true | 179 | 183 | | +| switch_asm | true | 181 | 174 | | +| switch_asm | true | 181 | 183 | | +| switch_asm | true | 183 | 187 | | +| switch_asm | true | 185 | 170 | | +| switch_asm | true | 187 | 150 | | +| switch_asm | true | 189 | 155 | | +| switch_f_0 | false | 432 | 432 | switch_f_0 | +| switch_f_0 | false | 437 | 437 | switch (...) ... | +| switch_f_0 | false | 441 | 441 | 255 | +| switch_f_0 | false | 442 | 442 | case ...: | +| switch_f_0 | false | 446 | 446 | 0 | +| switch_f_0 | false | 447 | 447 | break; | +| switch_f_0 | false | 449 | 449 | { ... } | +| switch_f_0 | false | 451 | 451 | label ...: | +| switch_f_0 | false | 453 | 453 | { ... } | +| switch_f_0 | false | 455 | 455 | return ... | +| switch_f_0 | false | 457 | 457 | { ... } | +| switch_f_0 | true | 437 | 441 | | +| switch_f_0 | true | 441 | 449 | | +| switch_f_0 | true | 442 | 447 | | +| switch_f_0 | true | 447 | 451 | | +| switch_f_0 | true | 449 | 451 | | +| switch_f_0 | true | 451 | 455 | | +| switch_f_0 | true | 453 | 437 | | +| switch_f_0 | true | 455 | 432 | | +| switch_f_0 | true | 457 | 453 | | +| switch_f_255 | false | 405 | 405 | switch_f_255 | +| switch_f_255 | false | 410 | 410 | switch (...) ... | +| switch_f_255 | false | 414 | 414 | 255 | +| switch_f_255 | false | 415 | 415 | case ...: | +| switch_f_255 | false | 419 | 419 | 255 | +| switch_f_255 | false | 420 | 420 | break; | +| switch_f_255 | false | 422 | 422 | { ... } | +| switch_f_255 | false | 424 | 424 | label ...: | +| switch_f_255 | false | 426 | 426 | { ... } | +| switch_f_255 | false | 428 | 428 | return ... | +| switch_f_255 | false | 430 | 430 | { ... } | +| switch_f_255 | true | 410 | 414 | | +| switch_f_255 | true | 414 | 422 | | +| switch_f_255 | true | 415 | 420 | | +| switch_f_255 | true | 420 | 424 | | +| switch_f_255 | true | 422 | 415 | | +| switch_f_255 | true | 422 | 424 | | +| switch_f_255 | true | 424 | 428 | | +| switch_f_255 | true | 426 | 410 | | +| switch_f_255 | true | 428 | 405 | | +| switch_f_255 | true | 430 | 426 | | +| switch_f_uint8_t_256 | false | 341 | 341 | switch_f_uint8_t_256 | +| switch_f_uint8_t_256 | false | 346 | 346 | switch (...) ... | +| switch_f_uint8_t_256 | false | 350 | 350 | 256 | +| switch_f_uint8_t_256 | false | 351 | 351 | case ...: | +| switch_f_uint8_t_256 | false | 355 | 355 | 256 | +| switch_f_uint8_t_256 | false | 356 | 356 | (uint8_t)... | +| switch_f_uint8_t_256 | false | 358 | 358 | (int)... | +| switch_f_uint8_t_256 | false | 360 | 360 | break; | +| switch_f_uint8_t_256 | false | 362 | 362 | { ... } | +| switch_f_uint8_t_256 | false | 364 | 364 | label ...: | +| switch_f_uint8_t_256 | false | 366 | 366 | { ... } | +| switch_f_uint8_t_256 | false | 368 | 368 | return ... | +| switch_f_uint8_t_256 | false | 370 | 370 | { ... } | +| switch_f_uint8_t_256 | true | 346 | 350 | | +| switch_f_uint8_t_256 | true | 350 | 362 | | +| switch_f_uint8_t_256 | true | 351 | 360 | | +| switch_f_uint8_t_256 | true | 360 | 364 | | +| switch_f_uint8_t_256 | true | 362 | 364 | | +| switch_f_uint8_t_256 | true | 364 | 368 | | +| switch_f_uint8_t_256 | true | 366 | 346 | | +| switch_f_uint8_t_256 | true | 368 | 341 | | +| switch_f_uint8_t_256 | true | 370 | 366 | | +| switch_f_uint8_t_minus1 | false | 372 | 372 | switch_f_uint8_t_minus1 | +| switch_f_uint8_t_minus1 | false | 377 | 377 | switch (...) ... | +| switch_f_uint8_t_minus1 | false | 381 | 381 | 255 | +| switch_f_uint8_t_minus1 | false | 382 | 382 | case ...: | +| switch_f_uint8_t_minus1 | false | 386 | 386 | 1 | +| switch_f_uint8_t_minus1 | false | 387 | 387 | - ... | +| switch_f_uint8_t_minus1 | false | 389 | 389 | (uint8_t)... | +| switch_f_uint8_t_minus1 | false | 391 | 391 | (int)... | +| switch_f_uint8_t_minus1 | false | 393 | 393 | break; | +| switch_f_uint8_t_minus1 | false | 395 | 395 | { ... } | +| switch_f_uint8_t_minus1 | false | 397 | 397 | label ...: | +| switch_f_uint8_t_minus1 | false | 399 | 399 | { ... } | +| switch_f_uint8_t_minus1 | false | 401 | 401 | return ... | +| switch_f_uint8_t_minus1 | false | 403 | 403 | { ... } | +| switch_f_uint8_t_minus1 | true | 377 | 381 | | +| switch_f_uint8_t_minus1 | true | 381 | 395 | | +| switch_f_uint8_t_minus1 | true | 382 | 393 | | +| switch_f_uint8_t_minus1 | true | 393 | 397 | | +| switch_f_uint8_t_minus1 | true | 395 | 382 | | +| switch_f_uint8_t_minus1 | true | 395 | 397 | | +| switch_f_uint8_t_minus1 | true | 397 | 401 | | +| switch_f_uint8_t_minus1 | true | 399 | 377 | | +| switch_f_uint8_t_minus1 | true | 401 | 372 | | +| switch_f_uint8_t_minus1 | true | 403 | 399 | | +| switch_f_v_0 | false | 306 | 306 | switch_f_v_0 | +| switch_f_v_0 | false | 311 | 311 | declaration | +| switch_f_v_0 | false | 316 | 316 | 255 | +| switch_f_v_0 | false | 317 | 317 | initializer for i | +| switch_f_v_0 | false | 320 | 320 | switch (...) ... | +| switch_f_v_0 | false | 322 | 322 | i | +| switch_f_v_0 | false | 324 | 324 | case ...: | +| switch_f_v_0 | false | 328 | 328 | 0 | +| switch_f_v_0 | false | 329 | 329 | break; | +| switch_f_v_0 | false | 331 | 331 | { ... } | +| switch_f_v_0 | false | 333 | 333 | label ...: | +| switch_f_v_0 | false | 335 | 335 | { ... } | +| switch_f_v_0 | false | 337 | 337 | return ... | +| switch_f_v_0 | false | 339 | 339 | { ... } | +| switch_f_v_0 | true | 311 | 317 | | +| switch_f_v_0 | true | 316 | 335 | | +| switch_f_v_0 | true | 317 | 316 | | +| switch_f_v_0 | true | 320 | 322 | | +| switch_f_v_0 | true | 322 | 331 | | +| switch_f_v_0 | true | 324 | 329 | | +| switch_f_v_0 | true | 329 | 333 | | +| switch_f_v_0 | true | 331 | 333 | | +| switch_f_v_0 | true | 333 | 337 | | +| switch_f_v_0 | true | 335 | 320 | | +| switch_f_v_0 | true | 337 | 306 | | +| switch_f_v_0 | true | 339 | 311 | | +| switch_f_v_255 | false | 271 | 271 | switch_f_v_255 | +| switch_f_v_255 | false | 276 | 276 | declaration | +| switch_f_v_255 | false | 281 | 281 | 255 | +| switch_f_v_255 | false | 282 | 282 | initializer for i | +| switch_f_v_255 | false | 285 | 285 | switch (...) ... | +| switch_f_v_255 | false | 287 | 287 | i | +| switch_f_v_255 | false | 289 | 289 | case ...: | +| switch_f_v_255 | false | 293 | 293 | 255 | +| switch_f_v_255 | false | 294 | 294 | break; | +| switch_f_v_255 | false | 296 | 296 | { ... } | +| switch_f_v_255 | false | 298 | 298 | label ...: | +| switch_f_v_255 | false | 300 | 300 | { ... } | +| switch_f_v_255 | false | 302 | 302 | return ... | +| switch_f_v_255 | false | 304 | 304 | { ... } | +| switch_f_v_255 | true | 276 | 282 | | +| switch_f_v_255 | true | 281 | 300 | | +| switch_f_v_255 | true | 282 | 281 | | +| switch_f_v_255 | true | 285 | 287 | | +| switch_f_v_255 | true | 287 | 296 | | +| switch_f_v_255 | true | 289 | 294 | | +| switch_f_v_255 | true | 294 | 298 | | +| switch_f_v_255 | true | 296 | 289 | | +| switch_f_v_255 | true | 296 | 298 | | +| switch_f_v_255 | true | 298 | 302 | | +| switch_f_v_255 | true | 300 | 285 | | +| switch_f_v_255 | true | 302 | 271 | | +| switch_f_v_255 | true | 304 | 276 | | +| switch_f_v_uint8_t_256 | false | 191 | 191 | switch_f_v_uint8_t_256 | +| switch_f_v_uint8_t_256 | false | 196 | 196 | declaration | +| switch_f_v_uint8_t_256 | false | 201 | 201 | 256 | +| switch_f_v_uint8_t_256 | false | 202 | 202 | initializer for i | +| switch_f_v_uint8_t_256 | false | 205 | 205 | switch (...) ... | +| switch_f_v_uint8_t_256 | false | 207 | 207 | i | +| switch_f_v_uint8_t_256 | false | 209 | 209 | case ...: | +| switch_f_v_uint8_t_256 | false | 213 | 213 | 256 | +| switch_f_v_uint8_t_256 | false | 214 | 214 | (uint8_t)... | +| switch_f_v_uint8_t_256 | false | 216 | 216 | (int)... | +| switch_f_v_uint8_t_256 | false | 218 | 218 | break; | +| switch_f_v_uint8_t_256 | false | 220 | 220 | { ... } | +| switch_f_v_uint8_t_256 | false | 222 | 222 | label ...: | +| switch_f_v_uint8_t_256 | false | 224 | 224 | { ... } | +| switch_f_v_uint8_t_256 | false | 226 | 226 | return ... | +| switch_f_v_uint8_t_256 | false | 228 | 228 | { ... } | +| switch_f_v_uint8_t_256 | true | 196 | 202 | | +| switch_f_v_uint8_t_256 | true | 201 | 224 | | +| switch_f_v_uint8_t_256 | true | 202 | 201 | | +| switch_f_v_uint8_t_256 | true | 205 | 207 | | +| switch_f_v_uint8_t_256 | true | 207 | 220 | | +| switch_f_v_uint8_t_256 | true | 209 | 218 | | +| switch_f_v_uint8_t_256 | true | 218 | 222 | | +| switch_f_v_uint8_t_256 | true | 220 | 222 | | +| switch_f_v_uint8_t_256 | true | 222 | 226 | | +| switch_f_v_uint8_t_256 | true | 224 | 205 | | +| switch_f_v_uint8_t_256 | true | 226 | 191 | | +| switch_f_v_uint8_t_256 | true | 228 | 196 | | +| switch_f_v_uint8_t_minus1 | false | 230 | 230 | switch_f_v_uint8_t_minus1 | +| switch_f_v_uint8_t_minus1 | false | 235 | 235 | declaration | +| switch_f_v_uint8_t_minus1 | false | 240 | 240 | 255 | +| switch_f_v_uint8_t_minus1 | false | 241 | 241 | initializer for i | +| switch_f_v_uint8_t_minus1 | false | 244 | 244 | switch (...) ... | +| switch_f_v_uint8_t_minus1 | false | 246 | 246 | i | +| switch_f_v_uint8_t_minus1 | false | 248 | 248 | case ...: | +| switch_f_v_uint8_t_minus1 | false | 252 | 252 | 1 | +| switch_f_v_uint8_t_minus1 | false | 253 | 253 | - ... | +| switch_f_v_uint8_t_minus1 | false | 255 | 255 | (uint8_t)... | +| switch_f_v_uint8_t_minus1 | false | 257 | 257 | (int)... | +| switch_f_v_uint8_t_minus1 | false | 259 | 259 | break; | +| switch_f_v_uint8_t_minus1 | false | 261 | 261 | { ... } | +| switch_f_v_uint8_t_minus1 | false | 263 | 263 | label ...: | +| switch_f_v_uint8_t_minus1 | false | 265 | 265 | { ... } | +| switch_f_v_uint8_t_minus1 | false | 267 | 267 | return ... | +| switch_f_v_uint8_t_minus1 | false | 269 | 269 | { ... } | +| switch_f_v_uint8_t_minus1 | true | 235 | 241 | | +| switch_f_v_uint8_t_minus1 | true | 240 | 265 | | +| switch_f_v_uint8_t_minus1 | true | 241 | 240 | | +| switch_f_v_uint8_t_minus1 | true | 244 | 246 | | +| switch_f_v_uint8_t_minus1 | true | 246 | 261 | | +| switch_f_v_uint8_t_minus1 | true | 248 | 259 | | +| switch_f_v_uint8_t_minus1 | true | 259 | 263 | | +| switch_f_v_uint8_t_minus1 | true | 261 | 248 | | +| switch_f_v_uint8_t_minus1 | true | 261 | 263 | | +| switch_f_v_uint8_t_minus1 | true | 263 | 267 | | +| switch_f_v_uint8_t_minus1 | true | 265 | 244 | | +| switch_f_v_uint8_t_minus1 | true | 267 | 230 | | +| switch_f_v_uint8_t_minus1 | true | 269 | 235 | | diff --git a/cpp/ql/test/successor-tests/switchstmt/switchstmt/cfg.expected b/cpp/ql/test/successor-tests/switchstmt/switchstmt/cfg.expected index ca3de0ffaff..607995cefd3 100644 --- a/cpp/ql/test/successor-tests/switchstmt/switchstmt/cfg.expected +++ b/cpp/ql/test/successor-tests/switchstmt/switchstmt/cfg.expected @@ -12,3 +12,20 @@ | switchstmt | switchstmt.c:1:6:1:6 | f | 7 | 8 | switchstmt.c:7:5:7:5 | switchstmt.c:7:5:7:5 | switchstmt.c:7:5:7:5 | ; | 8: return ... | | switchstmt | switchstmt.c:1:6:1:6 | f | 8 | 9 | switchstmt.c:8:1:8:1 | switchstmt.c:8:1:8:1 | switchstmt.c:8:1:8:1 | return ... | 8: f | | switchstmt | switchstmt.c:1:6:1:6 | f | 8 | 10 | switchstmt.c:1:6:1:6 | switchstmt.c:1:6:1:6 | switchstmt.c:1:6:1:6 | f | | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 3 | 1 | switchstmt.cpp:3:15:12:1 | switchstmt.cpp:3:15:12:1 | switchstmt.cpp:3:15:12:1 | { ... } | 4: switch (...) ... | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 4 | 2 | switchstmt.cpp:4:6:10:5 | switchstmt.cpp:4:6:10:5 | switchstmt.cpp:4:6:10:5 | switch (...) ... | 5: declaration | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 5 | 3 | switchstmt.cpp:5:10:5:10 | switchstmt.cpp:5:10:5:10 | switchstmt.cpp:5:10:5:10 | declaration | 5: initializer for y | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 5 | 4 | switchstmt.cpp:5:17:5:18 | switchstmt.cpp:5:17:5:18 | switchstmt.cpp:5:17:5:18 | initializer for y | 5: x | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 5 | 5 | switchstmt.cpp:5:18:5:18 | switchstmt.cpp:5:18:5:18 | switchstmt.cpp:5:18:5:18 | x | 6: y | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 6 | 6 | switchstmt.cpp:6:10:6:10 | switchstmt.cpp:6:10:6:10 | switchstmt.cpp:6:10:6:10 | y | 6: { ... } | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 6 | 7 | switchstmt.cpp:6:13:10:5 | switchstmt.cpp:6:13:10:5 | switchstmt.cpp:6:13:10:5 | { ... } | 7: case ...: | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 6 | 7 | switchstmt.cpp:6:13:10:5 | switchstmt.cpp:6:13:10:5 | switchstmt.cpp:6:13:10:5 | { ... } | 8: case ...: | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 6 | 7 | switchstmt.cpp:6:13:10:5 | switchstmt.cpp:6:13:10:5 | switchstmt.cpp:6:13:10:5 | { ... } | 9: default: | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 7 | 1 | switchstmt.cpp:7:14:7:14 | switchstmt.cpp:7:14:7:14 | switchstmt.cpp:7:14:7:14 | 1 | | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 7 | 8 | switchstmt.cpp:7:9:7:15 | switchstmt.cpp:7:9:7:15 | switchstmt.cpp:7:9:7:15 | case ...: | 8: case ...: | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 8 | 1 | switchstmt.cpp:8:14:8:14 | switchstmt.cpp:8:14:8:14 | switchstmt.cpp:8:14:8:14 | 2 | | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 8 | 9 | switchstmt.cpp:8:9:8:15 | switchstmt.cpp:8:9:8:15 | switchstmt.cpp:8:9:8:15 | case ...: | 9: default: | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 9 | 10 | switchstmt.cpp:9:9:9:16 | switchstmt.cpp:9:9:9:16 | switchstmt.cpp:9:9:9:16 | default: | 11: ; | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 11 | 11 | switchstmt.cpp:11:5:11:5 | switchstmt.cpp:11:5:11:5 | switchstmt.cpp:11:5:11:5 | ; | 12: return ... | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 12 | 12 | switchstmt.cpp:12:1:12:1 | switchstmt.cpp:12:1:12:1 | switchstmt.cpp:12:1:12:1 | return ... | 12: g | +| switchstmt | switchstmt.cpp:3:6:3:6 | g | 12 | 13 | switchstmt.cpp:3:6:3:6 | switchstmt.cpp:3:6:3:6 | switchstmt.cpp:3:6:3:6 | g | | diff --git a/cpp/ql/test/successor-tests/switchstmt/switchstmt/switchstmt.cpp b/cpp/ql/test/successor-tests/switchstmt/switchstmt/switchstmt.cpp new file mode 100644 index 00000000000..a88ad7e710c --- /dev/null +++ b/cpp/ql/test/successor-tests/switchstmt/switchstmt/switchstmt.cpp @@ -0,0 +1,12 @@ +// semmle-extractor-options: -std=c++17 + +void g(int x) { + switch ( + int y = x; + y) { + case 1: + case 2: + default: + } + ; +} diff --git a/cpp/ql/test/successor-tests/whilestmt/whilestmt07.expected b/cpp/ql/test/successor-tests/whilestmt/whilestmt07.expected index 062c5a02e8b..1bdfcc5428f 100644 --- a/cpp/ql/test/successor-tests/whilestmt/whilestmt07.expected +++ b/cpp/ql/test/successor-tests/whilestmt/whilestmt07.expected @@ -1,4 +1,5 @@ -| 0 | whilestmt.c:15:22:21:1 | { ... } | 1 | whilestmt.c:16:3:19:3 | while (...) ... | +| 0 | whilestmt.c:15:22:21:1 | { ... } | 1 | whilestmt.c:16:3:16:3 | { ... } | +| 1 | whilestmt.c:16:3:16:3 | { ... } | 1 | whilestmt.c:16:3:19:3 | while (...) ... | | 1 | whilestmt.c:16:3:19:3 | while (...) ... | 1 | whilestmt.c:16:9:16:9 | 1 | | 1 | whilestmt.c:16:9:16:9 | 1 | 1 | whilestmt.c:16:12:19:3 | { ... } | | 1 | whilestmt.c:16:12:19:3 | { ... } | 2 | whilestmt.c:17:5:17:7 | label ...: | diff --git a/cpp/ql/test/successor-tests/whilestmt/whilestmt08.expected b/cpp/ql/test/successor-tests/whilestmt/whilestmt08.expected index b80cf3db691..ca64f447bc8 100644 --- a/cpp/ql/test/successor-tests/whilestmt/whilestmt08.expected +++ b/cpp/ql/test/successor-tests/whilestmt/whilestmt08.expected @@ -1,4 +1,5 @@ -| 0 | whilestmt.c:23:22:30:1 | { ... } | 1 | whilestmt.c:24:3:28:3 | while (...) ... | +| 0 | whilestmt.c:23:22:30:1 | { ... } | 1 | whilestmt.c:24:3:24:3 | { ... } | +| 1 | whilestmt.c:24:3:24:3 | { ... } | 1 | whilestmt.c:24:3:28:3 | while (...) ... | | 1 | whilestmt.c:24:3:28:3 | while (...) ... | 1 | whilestmt.c:24:9:24:9 | 1 | | 1 | whilestmt.c:24:9:24:9 | 1 | 1 | whilestmt.c:24:12:28:3 | { ... } | | 1 | whilestmt.c:24:12:28:3 | { ... } | 2 | whilestmt.c:25:5:25:7 | label ...: | diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index 9a77f1e0ebc..4d9996c1446 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -1,6 +1,7 @@ package,sink,source,summary,sink:code,sink:html,sink:remote,sink:sql,sink:xss,source:local,summary:taint,summary:value Dapper,55,,,,,,55,,,, Microsoft.ApplicationBlocks.Data,28,,,,,,28,,,, +Microsoft.EntityFrameworkCore,6,,,,,,6,,,, Microsoft.Extensions.Primitives,,,54,,,,,,,54, Microsoft.VisualBasic,,,4,,,,,,,,4 MySql.Data.MySqlClient,48,,,,,,48,,,, diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index 7ac7b6d1e9b..9863b503fbf 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -9,6 +9,6 @@ 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``",3,2336,28,5 - Others,"``Dapper``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.Extensions.Primitives``, ``Microsoft.VisualBasic``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``",,149,131, - Totals,,3,2492,353,5 + Others,"``Dapper``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Primitives``, ``Microsoft.VisualBasic``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``",,149,137, + Totals,,3,2492,359,5 diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index e8a163935b1..a3b06b075db 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.2 + +## 1.1.1 + +## 1.1.0 + ## 1.0.7 ## 1.0.6 diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.0.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.0.md new file mode 100644 index 00000000000..57af6ca9886 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.0.md @@ -0,0 +1 @@ +## 1.1.0 diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.1.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.1.md new file mode 100644 index 00000000000..bf5d722f884 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.1.md @@ -0,0 +1 @@ +## 1.1.1 diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.2.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.2.md new file mode 100644 index 00000000000..a948ef6c11d --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.2.md @@ -0,0 +1 @@ +## 1.1.2 diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 8e3e6bf2704..53ab127707f 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.0.7 +lastReleaseVersion: 1.1.2 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 27669a90e89..ef0192e094a 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.1.0-dev +version: 1.1.3-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index e8a163935b1..a3b06b075db 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.2 + +## 1.1.1 + +## 1.1.0 + ## 1.0.7 ## 1.0.6 diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.0.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.0.md new file mode 100644 index 00000000000..57af6ca9886 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.0.md @@ -0,0 +1 @@ +## 1.1.0 diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.1.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.1.md new file mode 100644 index 00000000000..bf5d722f884 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.1.md @@ -0,0 +1 @@ +## 1.1.1 diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.2.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.2.md new file mode 100644 index 00000000000..a948ef6c11d --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.2.md @@ -0,0 +1 @@ +## 1.1.2 diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 8e3e6bf2704..53ab127707f 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.0.7 +lastReleaseVersion: 1.1.2 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index f44a7d03e47..d3d0baabf19 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.1.0-dev +version: 1.1.3-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index fbc579d04b7..17252098beb 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,17 @@ +## 0.2.1 + +## 0.2.0 + +### Breaking Changes + +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. + +## 0.1.0 + +### Breaking Changes + +* The recently added flow-state versions of `isBarrierIn`, `isBarrierOut`, `isSanitizerIn`, and `isSanitizerOut` in the data flow and taint tracking libraries have been removed. + ## 0.0.13 ## 0.0.12 diff --git a/csharp/ql/lib/change-notes/2022-04-08-flow-state-barriers.md b/csharp/ql/lib/change-notes/2022-04-08-flow-state-barriers.md deleted file mode 100644 index c07f30e6284..00000000000 --- a/csharp/ql/lib/change-notes/2022-04-08-flow-state-barriers.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -The recently added flow-state versions of `isBarrierIn`, `isBarrierOut`, `isSanitizerIn`, and `isSanitizerOut` in the data flow and taint tracking libraries have been removed. diff --git a/csharp/ql/lib/change-notes/released/0.1.0.md b/csharp/ql/lib/change-notes/released/0.1.0.md new file mode 100644 index 00000000000..e488a4f757e --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.1.0.md @@ -0,0 +1,5 @@ +## 0.1.0 + +### Breaking Changes + +* The recently added flow-state versions of `isBarrierIn`, `isBarrierOut`, `isSanitizerIn`, and `isSanitizerOut` in the data flow and taint tracking libraries have been removed. diff --git a/csharp/ql/lib/change-notes/released/0.2.0.md b/csharp/ql/lib/change-notes/released/0.2.0.md new file mode 100644 index 00000000000..7ccf56ddd47 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.2.0.md @@ -0,0 +1,5 @@ +## 0.2.0 + +### Breaking Changes + +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. diff --git a/csharp/ql/lib/change-notes/released/0.2.1.md b/csharp/ql/lib/change-notes/released/0.2.1.md new file mode 100644 index 00000000000..c260de2a9ee --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.2.1.md @@ -0,0 +1 @@ +## 0.2.1 diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 044e54e4f7e..df29a726bcc 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.13 +lastReleaseVersion: 0.2.1 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 916beebd1bf..2b91ac08704 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.1.0-dev +version: 0.2.2-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/lib/semmle/code/cil/Instructions.qll b/csharp/ql/lib/semmle/code/cil/Instructions.qll index 370a91d8343..91bc1f37ea6 100644 --- a/csharp/ql/lib/semmle/code/cil/Instructions.qll +++ b/csharp/ql/lib/semmle/code/cil/Instructions.qll @@ -491,7 +491,7 @@ module Opcodes { override Callable getTarget() { none() } - /** Gets the function pointer type targetted by this instruction. */ + /** Gets the function pointer type targeted by this instruction. */ FunctionPointerType getTargetType() { cil_access(this, result) } // The number of items popped/pushed from the stack depends on the target of diff --git a/csharp/ql/lib/semmle/code/csharp/Member.qll b/csharp/ql/lib/semmle/code/csharp/Member.qll index 01a19ff87e0..ad314217024 100644 --- a/csharp/ql/lib/semmle/code/csharp/Member.qll +++ b/csharp/ql/lib/semmle/code/csharp/Member.qll @@ -117,7 +117,7 @@ class Modifiable extends Declaration, @modifiable { * Note that explicit interface implementations are also considered effectively * `private` if the implemented interface is itself effectively `private`. Finally, * `private protected` members are not considered effectively `private`, because - * they can be overriden within the declaring assembly. + * they can be overridden within the declaring assembly. */ predicate isEffectivelyPrivate() { this.isReallyPrivate() or @@ -143,7 +143,7 @@ class Modifiable extends Declaration, @modifiable { * considered. Explicit interface implementations are also considered effectively * `internal` if the implemented interface is itself effectively `internal`. Finally, * `internal protected` members are not considered effectively `internal`, because - * they can be overriden outside the declaring assembly. + * they can be overridden outside the declaring assembly. */ predicate isEffectivelyInternal() { this.isReallyInternal() or diff --git a/csharp/ql/lib/semmle/code/csharp/PrintAst.qll b/csharp/ql/lib/semmle/code/csharp/PrintAst.qll index a3d36fba69d..d179da2e194 100644 --- a/csharp/ql/lib/semmle/code/csharp/PrintAst.qll +++ b/csharp/ql/lib/semmle/code/csharp/PrintAst.qll @@ -265,7 +265,7 @@ class TypeMentionNode extends PrintAstNode, TTypeMentionNode { final TypeMention getTypeMention() { result = typeMention } /** - * Gets the `Element` targetted by the `TypeMention`. + * Gets the `Element` targeted by the `TypeMention`. */ final Element getTarget() { result = typeMention.getTarget() } diff --git a/csharp/ql/lib/semmle/code/csharp/Unification.qll b/csharp/ql/lib/semmle/code/csharp/Unification.qll index ae2ee5a2e49..4df258c1d00 100644 --- a/csharp/ql/lib/semmle/code/csharp/Unification.qll +++ b/csharp/ql/lib/semmle/code/csharp/Unification.qll @@ -672,7 +672,7 @@ module Unification { * `ConstrainedTypeParameter::unifiable()` can be used. * * - * For performance reasons, type paramater constraints inside `t1` and `t2` are + * For performance reasons, type parameter constraints inside `t1` and `t2` are * *not* taken into account, and there is also no guarantee that the same type * parameter can be substituted with two different terms. For example, in * diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImplShared.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImplShared.qll index e7ae2e489a2..47fcd24883c 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImplShared.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImplShared.qll @@ -744,7 +744,7 @@ cached private module Cached { /** * If needed, call this predicate from `ControlFlowGraphImplSpecific.qll` in order to - * force a stage-dependency on the `ControlFlowGraphImplShared.qll` stage and therby + * force a stage-dependency on the `ControlFlowGraphImplShared.qll` stage and thereby * collapsing the two stages. */ cached diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll index 34578833a06..9e8baa291ca 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll @@ -86,6 +86,7 @@ private import internal.FlowSummaryImplSpecific */ private module Frameworks { private import semmle.code.csharp.frameworks.EntityFramework + private import semmle.code.csharp.frameworks.Generated private import semmle.code.csharp.frameworks.JsonNET private import semmle.code.csharp.frameworks.microsoft.extensions.Primitives private import semmle.code.csharp.frameworks.microsoft.VisualBasic @@ -515,9 +516,7 @@ Element interpretElement( /** * Holds if `c` has a `generated` summary. */ -predicate hasSummary(DataFlowCallable c, boolean generated) { - summaryElement(c, _, _, _, generated) -} +predicate hasSummary(Callable c, boolean generated) { summaryElement(c, _, _, _, generated) } cached private module Cached { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/FlowSummary.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/FlowSummary.qll index 56bbc76331b..08a9a8a5421 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/FlowSummary.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/FlowSummary.qll @@ -1,6 +1,7 @@ /** Provides classes and predicates for defining flow summaries. */ import csharp +private import dotnet private import internal.FlowSummaryImpl as Impl private import internal.DataFlowDispatch as DataFlowDispatch @@ -138,28 +139,6 @@ private class RecordConstructorFlow extends SummarizedCallable { } } -private class SummarizedCallableDefaultClearsContent extends Impl::Public::SummarizedCallable { - SummarizedCallableDefaultClearsContent() { - this instanceof Impl::Public::SummarizedCallable or none() - } - - // By default, we assume that all stores into arguments are definite - override predicate clearsContent(ParameterPosition pos, DataFlow::Content content) { - exists(SummaryComponentStack output, SummaryComponent target | - this.propagatesFlow(_, output, _) and - output.drop(_) = - SummaryComponentStack::push(SummaryComponent::content(content), - SummaryComponentStack::singleton(target)) and - not content instanceof DataFlow::ElementContent - | - target = SummaryComponent::argument(pos.getPosition()) - or - target = SummaryComponent::qualifier() and - pos.isThisParameter() - ) - } -} - class RequiredSummaryComponentStack = Impl::Public::RequiredSummaryComponentStack; private class RecordConstructorFlowRequiredSummaryComponentStack extends RequiredSummaryComponentStack { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/AccessPathSyntax.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/AccessPathSyntax.qll index 8e126868cc1..076e12f2671 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/AccessPathSyntax.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/AccessPathSyntax.qll @@ -42,9 +42,7 @@ module AccessPath { * Parses a lower-bounded interval `n..` and gets the lower bound. */ bindingset[arg] - private int parseLowerBound(string arg) { - result = arg.regexpCapture("(-?\\d+)\\.\\.", 1).toInt() - } + int parseLowerBound(string arg) { result = arg.regexpCapture("(-?\\d+)\\.\\.", 1).toInt() } /** * Parses an integer constant or interval (bounded or unbounded) that explicitly @@ -151,7 +149,7 @@ class AccessPath extends string instanceof AccessPath::Range { * An access part token such as `Argument[1]` or `ReturnValue`, appearing in one or more access paths. */ class AccessPathToken extends string { - AccessPathToken() { this = getRawToken(any(AccessPath path), _) } + AccessPathToken() { this = getRawToken(_, _) } private string getPart(int part) { result = this.regexpCapture("([^\\[]+)(?:\\[([^\\]]*)\\])?", part) @@ -169,9 +167,16 @@ class AccessPathToken extends string { /** Gets the `n`th argument to this token, such as `x` or `y` from `Member[x,y]`. */ string getArgument(int n) { result = this.getArgumentList().splitAt(",", n).trim() } + /** Gets the `n`th argument to this `name` token, such as `x` or `y` from `Member[x,y]`. */ + pragma[nomagic] + string getArgument(string name, int n) { name = this.getName() and result = this.getArgument(n) } + /** Gets an argument to this token, such as `x` or `y` from `Member[x,y]`. */ string getAnArgument() { result = this.getArgument(_) } + /** Gets an argument to this `name` token, such as `x` or `y` from `Member[x,y]`. */ + string getAnArgument(string name) { result = this.getArgument(name, _) } + /** Gets the number of arguments to this token, such as 2 for `Member[x,y]` or zero for `ReturnValue`. */ int getNumArgument() { result = count(int n | exists(this.getArgument(n))) } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll new file mode 100644 index 00000000000..2bdb56b2aa6 --- /dev/null +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll @@ -0,0 +1,529 @@ +/** + * Provides classes for performing global (inter-procedural) + * content-sensitive data flow analyses. + */ + +private import DataFlowImplCommon + +module ContentDataFlow { + private import DataFlowImplSpecific::Private + private import DataFlowImplSpecific::Private as DataFlowPrivate + private import DataFlowImplForContentDataFlow as DF + + class Node = DF::Node; + + class FlowFeature = DF::FlowFeature; + + class ContentSet = DF::ContentSet; + + predicate stageStats = DF::stageStats/8; + + /** + * A configuration of interprocedural data flow analysis. This defines + * sources, sinks, and any other configurable aspect of the analysis. Each + * use of the global data flow library must define its own unique extension + * of this abstract class. To create a configuration, extend this class with + * a subclass whose characteristic predicate is a unique singleton string. + * For example, write + * + * ```ql + * class MyAnalysisConfiguration extends ContentDataFlowConfiguration { + * MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" } + * // Override `isSource` and `isSink`. + * // Optionally override `isBarrier`. + * // Optionally override `isAdditionalFlowStep`. + * // Optionally override `getAFeature`. + * // Optionally override `accessPathLimit`. + * // Optionally override `isRelevantContent`. + * } + * ``` + * + * Unlike `DataFlow::Configuration` (on which this class is based), we allow + * for data to be stored (possibly nested) inside contents of sources and sinks. + * We track flow paths of the form + * + * ``` + * source --value-->* node + * (--read--> node --value-->* node)* + * --(non-value|value)-->* node + * (--store--> node --value-->* node)* + * --value-->* sink + * ``` + * + * where `--value-->` is a value-preserving flow step, `--read-->` is a read + * step, `--store-->` is a store step, and `--(non-value)-->` is a + * non-value-preserving flow step. + * + * That is, first a sequence of 0 or more reads, followed by 0 or more additional + * steps, followed by 0 or more stores, with value-preserving steps allowed in + * between all other steps. + */ + abstract class Configuration extends string { + bindingset[this] + Configuration() { any() } + + /** + * Holds if `source` is a relevant data flow source. + */ + abstract predicate isSource(Node source); + + /** + * Holds if `sink` is a relevant data flow sink. + */ + abstract predicate isSink(Node sink); + + /** + * Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps. + */ + predicate isAdditionalFlowStep(Node node1, Node node2) { none() } + + /** Holds if data flow into `node` is prohibited. */ + predicate isBarrier(Node node) { none() } + + /** + * Gets a data flow configuration feature to add restrictions to the set of + * valid flow paths. + * + * - `FeatureHasSourceCallContext`: + * Assume that sources have some existing call context to disallow + * conflicting return-flow directly following the source. + * - `FeatureHasSinkCallContext`: + * Assume that sinks have some existing call context to disallow + * conflicting argument-to-parameter flow directly preceding the sink. + * - `FeatureEqualSourceSinkCallContext`: + * Implies both of the above and additionally ensures that the entire flow + * path preserves the call context. + */ + FlowFeature getAFeature() { none() } + + /** Gets a limit on the number of reads out of sources and number of stores into sinks. */ + int accessPathLimit() { result = DataFlowPrivate::accessPathLimit() } + + /** Holds if `c` is relevant for reads out of sources or stores into sinks. */ + predicate isRelevantContent(ContentSet c) { any() } + + /** + * Holds if data stored inside `sourceAp` on `source` flows to `sinkAp` inside `sink` + * for this configuration. `preservesValue` indicates whether any of the additional + * flow steps defined by `isAdditionalFlowStep` are needed. + * + * For the source access path, `sourceAp`, the top of the stack represents the content + * that was last read from. That is, if `sourceAp` is `Field1.Field2` (with `Field1` + * being the top of the stack), then there is flow from `source.Field2.Field1`. + * + * For the sink access path, `sinkAp`, the top of the stack represents the content + * that was last stored into. That is, if `sinkAp` is `Field1.Field2` (with `Field1` + * being the top of the stack), then there is flow into `sink.Field1.Field2`. + */ + final predicate hasFlow( + Node source, AccessPath sourceAp, Node sink, AccessPath sinkAp, boolean preservesValue + ) { + exists(DF::PathNode pathSource, DF::PathNode pathSink | + this.(ConfigurationAdapter).hasFlowPath(pathSource, pathSink) and + nodeReaches(pathSource, TAccessPathNil(), TAccessPathNil(), pathSink, sourceAp, sinkAp) and + source = pathSource.getNode() and + sink = pathSink.getNode() + | + pathSink.getState().(InitState).decode(preservesValue) + or + pathSink.getState().(ReadState).decode(_, preservesValue) + or + pathSink.getState().(StoreState).decode(_, preservesValue) + ) + } + } + + /** A flow state representing no reads or stores. */ + private class InitState extends DF::FlowState { + private boolean preservesValue_; + + InitState() { this = "Init(" + preservesValue_ + ")" and preservesValue_ in [false, true] } + + predicate decode(boolean preservesValue) { preservesValue = preservesValue_ } + } + + /** A flow state representing that content has been stored into. */ + private class StoreState extends DF::FlowState { + private boolean preservesValue_; + private int size_; + + StoreState() { + preservesValue_ in [false, true] and + size_ in [1 .. any(Configuration c).accessPathLimit()] and + this = "StoreState(" + size_ + "," + preservesValue_ + ")" + } + + predicate decode(int size, boolean preservesValue) { + size = size_ and preservesValue = preservesValue_ + } + } + + /** A flow state representing that content has been read from. */ + private class ReadState extends DF::FlowState { + private boolean preservesValue_; + private int size_; + + ReadState() { + preservesValue_ in [false, true] and + size_ in [1 .. any(Configuration c).accessPathLimit()] and + this = "ReadState(" + size_ + "," + preservesValue_ + ")" + } + + predicate decode(int size, boolean preservesValue) { + size = size_ and preservesValue = preservesValue_ + } + } + + private predicate storeStep( + Node node1, DF::FlowState state1, ContentSet c, Node node2, StoreState state2, + Configuration config + ) { + exists(boolean preservesValue, int size | + storeSet(node1, c, node2, _, _) and + config.isRelevantContent(c) and + state2.decode(size + 1, preservesValue) + | + state1.(InitState).decode(preservesValue) and size = 0 + or + state1.(ReadState).decode(_, preservesValue) and size = 0 + or + state1.(StoreState).decode(size, preservesValue) + ) + } + + private predicate readStep( + Node node1, DF::FlowState state1, ContentSet c, Node node2, ReadState state2, + Configuration config + ) { + exists(int size | + readSet(node1, c, node2) and + config.isRelevantContent(c) and + state2.decode(size + 1, true) + | + state1.(InitState).decode(true) and + size = 0 + or + state1.(ReadState).decode(size, true) + ) + } + + private predicate additionalStep( + Node node1, DF::FlowState state1, Node node2, DF::FlowState state2, Configuration config + ) { + config.isAdditionalFlowStep(node1, node2) and + ( + state1 instanceof InitState and + state2.(InitState).decode(false) + or + exists(int size | + state1.(ReadState).decode(size, _) and + state2.(ReadState).decode(size, false) + ) + ) + } + + private class ConfigurationAdapter extends DF::Configuration { + private Configuration c; + + ConfigurationAdapter() { this = c } + + final override predicate isSource(Node source, DF::FlowState state) { + c.isSource(source) and + state.(InitState).decode(true) + } + + final override predicate isSink(Node sink, DF::FlowState state) { + c.isSink(sink) and + ( + state instanceof InitState or + state instanceof StoreState or + state instanceof ReadState + ) + } + + final override predicate isAdditionalFlowStep( + Node node1, DF::FlowState state1, Node node2, DF::FlowState state2 + ) { + storeStep(node1, state1, _, node2, state2, this) or + readStep(node1, state1, _, node2, state2, this) or + additionalStep(node1, state1, node2, state2, this) + } + + final override predicate isBarrier(Node node) { c.isBarrier(node) } + + final override FlowFeature getAFeature() { result = c.getAFeature() } + + // needed to record reads/stores inside summarized callables + final override predicate includeHiddenNodes() { any() } + } + + private newtype TAccessPath = + TAccessPathNil() or + TAccessPathCons(ContentSet head, AccessPath tail) { + nodeReachesStore(_, _, _, _, head, _, tail) + or + nodeReachesRead(_, _, _, _, head, tail, _) + } + + /** An access path. */ + class AccessPath extends TAccessPath { + /** Gets the head of this access path, if any. */ + ContentSet getHead() { this = TAccessPathCons(result, _) } + + /** Gets the tail of this access path, if any. */ + AccessPath getTail() { this = TAccessPathCons(_, result) } + + /** + * Gets a textual representation of this access path. + * + * Elements are dot-separated, and the head of the stack is + * rendered first. + */ + string toString() { + this = TAccessPathNil() and + result = "" + or + exists(ContentSet head, AccessPath tail | + this = TAccessPathCons(head, tail) and + result = head + "." + tail + ) + } + } + + // important to use `edges` and not `PathNode::getASuccessor()`, as the latter + // is not pruned for reachability + private predicate pathSucc = DF::PathGraph::edges/2; + + /** + * Provides a big-step flow relation, where flow stops at read/store steps that + * must be recorded, and flow via `subpaths` such that reads/stores inside + * summarized callables can be recorded as well. + */ + private module BigStepFlow { + private predicate reachesSink(DF::PathNode node) { + any(ConfigurationAdapter config).isSink(node.getNode(), node.getState()) + or + exists(DF::PathNode mid | + pathSucc(node, mid) and + reachesSink(mid) + ) + } + + /** + * Holds if the flow step `pred -> succ` should not be allowed to be included + * in the big-step relation. + */ + pragma[nomagic] + private predicate excludeStep(DF::PathNode pred, DF::PathNode succ) { + pathSucc(pred, succ) and + ( + // we need to record reads/stores inside summarized callables + DF::PathGraph::subpaths(pred, _, _, succ) + or + // only allow flow into a summarized callable, as part of the big-step + // relation, when flow can reach a sink without going back out + DF::PathGraph::subpaths(pred, succ, _, _) and + not reachesSink(succ) + or + // needed to record store steps + storeStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState(), + pred.getConfiguration()) + or + // needed to record read steps + readStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState(), + pred.getConfiguration()) + ) + } + + pragma[nomagic] + private DataFlowCallable getEnclosingCallableImpl(DF::PathNode node) { + result = getNodeEnclosingCallable(node.getNode()) + } + + pragma[inline] + private DataFlowCallable getEnclosingCallable(DF::PathNode node) { + pragma[only_bind_into](result) = getEnclosingCallableImpl(pragma[only_bind_out](node)) + } + + pragma[nomagic] + private predicate bigStepEntry(DF::PathNode node) { + node.getConfiguration() instanceof Configuration and + ( + any(ConfigurationAdapter config).isSource(node.getNode(), node.getState()) + or + excludeStep(_, node) + or + DF::PathGraph::subpaths(_, node, _, _) + ) + } + + pragma[nomagic] + private predicate bigStepExit(DF::PathNode node) { + node.getConfiguration() instanceof Configuration and + ( + bigStepEntry(node) + or + any(ConfigurationAdapter config).isSink(node.getNode(), node.getState()) + or + excludeStep(node, _) + or + DF::PathGraph::subpaths(_, _, node, _) + ) + } + + pragma[nomagic] + private predicate step(DF::PathNode pred, DF::PathNode succ) { + pathSucc(pred, succ) and + not excludeStep(pred, succ) + } + + pragma[nomagic] + private predicate stepRec(DF::PathNode pred, DF::PathNode succ) { + step(pred, succ) and + not bigStepEntry(pred) + } + + private predicate stepRecPlus(DF::PathNode n1, DF::PathNode n2) = fastTC(stepRec/2)(n1, n2) + + /** + * Holds if there is flow `pathSucc+(pred) = succ`, and such a flow path does + * not go through any reads/stores that need to be recorded, or summarized + * steps. + */ + pragma[nomagic] + private predicate bigStep(DF::PathNode pred, DF::PathNode succ) { + exists(DF::PathNode mid | + bigStepEntry(pred) and + step(pred, mid) + | + succ = mid + or + stepRecPlus(mid, succ) + ) and + bigStepExit(succ) + } + + pragma[nomagic] + predicate bigStepNotLocal(DF::PathNode pred, DF::PathNode succ) { + bigStep(pred, succ) and + not getEnclosingCallable(pred) = getEnclosingCallable(succ) + } + + pragma[nomagic] + predicate bigStepMaybeLocal(DF::PathNode pred, DF::PathNode succ) { + bigStep(pred, succ) and + getEnclosingCallable(pred) = getEnclosingCallable(succ) + } + } + + /** + * Holds if `source` can reach `node`, having read `reads` from the source and + * written `stores` into `node`. + * + * `source` is either a source from a configuration, in which case `scReads` and + * `scStores` are always empty, or it is the parameter of a summarized callable, + * in which case `scReads` and `scStores` record the reads/stores for a summary + * context, that is, the reads/stores for an argument that can reach the parameter. + */ + pragma[nomagic] + private predicate nodeReaches( + DF::PathNode source, AccessPath scReads, AccessPath scStores, DF::PathNode node, + AccessPath reads, AccessPath stores + ) { + exists(ConfigurationAdapter config | + node = source and + reads = scReads and + stores = scStores + | + config.hasFlowPath(source, _) and + scReads = TAccessPathNil() and + scStores = TAccessPathNil() + or + // the argument in a sub path can be reached, so we start flow from the sub path + // parameter, while recording the read/store summary context + exists(DF::PathNode arg | + nodeReachesSubpathArg(_, _, _, arg, scReads, scStores) and + DF::PathGraph::subpaths(arg, source, _, _) + ) + ) + or + exists(DF::PathNode mid | + nodeReaches(source, scReads, scStores, mid, reads, stores) and + BigStepFlow::bigStepMaybeLocal(mid, node) + ) + or + exists(DF::PathNode mid | + nodeReaches(source, scReads, scStores, mid, reads, stores) and + BigStepFlow::bigStepNotLocal(mid, node) and + // when flow is not local, we cannot flow back out, so we may stop + // flow early when computing summary flow + any(ConfigurationAdapter config).hasFlowPath(source, _) and + scReads = TAccessPathNil() and + scStores = TAccessPathNil() + ) + or + // store step + exists(AccessPath storesMid, ContentSet c | + nodeReachesStore(source, scReads, scStores, node, c, reads, storesMid) and + stores = TAccessPathCons(c, storesMid) + ) + or + // read step + exists(AccessPath readsMid, ContentSet c | + nodeReachesRead(source, scReads, scStores, node, c, readsMid, stores) and + reads = TAccessPathCons(c, readsMid) + ) + or + // flow-through step; match outer stores/reads with inner store/read summary contexts + exists(DF::PathNode mid, AccessPath innerScReads, AccessPath innerScStores | + nodeReachesSubpathArg(source, scReads, scStores, mid, innerScReads, innerScStores) and + subpathArgReachesOut(mid, innerScReads, innerScStores, node, reads, stores) + ) + } + + pragma[nomagic] + private predicate nodeReachesStore( + DF::PathNode source, AccessPath scReads, AccessPath scStores, DF::PathNode node, ContentSet c, + AccessPath reads, AccessPath stores + ) { + exists(DF::PathNode mid | + nodeReaches(source, scReads, scStores, mid, reads, stores) and + storeStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState(), + node.getConfiguration()) and + pathSucc(mid, node) + ) + } + + pragma[nomagic] + private predicate nodeReachesRead( + DF::PathNode source, AccessPath scReads, AccessPath scStores, DF::PathNode node, ContentSet c, + AccessPath reads, AccessPath stores + ) { + exists(DF::PathNode mid | + nodeReaches(source, scReads, scStores, mid, reads, stores) and + readStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState(), + node.getConfiguration()) and + pathSucc(mid, node) + ) + } + + pragma[nomagic] + private predicate nodeReachesSubpathArg( + DF::PathNode source, AccessPath scReads, AccessPath scStores, DF::PathNode arg, + AccessPath reads, AccessPath stores + ) { + nodeReaches(source, scReads, scStores, arg, reads, stores) and + DF::PathGraph::subpaths(arg, _, _, _) + } + + pragma[nomagic] + private predicate subpathArgReachesOut( + DF::PathNode arg, AccessPath scReads, AccessPath scStores, DF::PathNode out, AccessPath reads, + AccessPath stores + ) { + exists(DF::PathNode source, DF::PathNode ret | + nodeReaches(source, scReads, scStores, ret, reads, stores) and + DF::PathGraph::subpaths(arg, source, ret, out) + ) + } +} diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll index 2f04ba350f4..d35b741fb0c 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll @@ -12,14 +12,6 @@ private import semmle.code.csharp.dispatch.RuntimeCallable private import semmle.code.csharp.frameworks.system.Collections private import semmle.code.csharp.frameworks.system.collections.Generic -private predicate summarizedCallable(DataFlowCallable c) { - c instanceof FlowSummary::SummarizedCallable - or - FlowSummaryImpl::Private::summaryReturnNode(_, TJumpReturnKind(c, _)) - or - c = interpretElement(_, _, _, _, _, _) -} - /** * Gets a source declaration of callable `c` that has a body or has * a flow summary. @@ -29,9 +21,6 @@ private predicate summarizedCallable(DataFlowCallable c) { */ DotNet::Callable getCallableForDataFlow(DotNet::Callable c) { exists(DotNet::Callable unboundDecl | unboundDecl = c.getUnboundDeclaration() | - summarizedCallable(unboundDecl) and - result = unboundDecl - or result.hasBody() and if unboundDecl.getFile().fromSource() then @@ -81,17 +70,46 @@ newtype TReturnKind = v = def.getSourceVariable().getAssignable() ) } or - TJumpReturnKind(DataFlowCallable target, ReturnKind rk) { - rk instanceof NormalReturnKind and + TJumpReturnKind(Callable target, ReturnKind rk) { + target.isUnboundDeclaration() and ( - target instanceof Constructor or - not target.getReturnType() instanceof VoidType + rk instanceof NormalReturnKind and + ( + target instanceof Constructor or + not target.getReturnType() instanceof VoidType + ) + or + exists(target.getParameter(rk.(OutRefReturnKind).getPosition())) ) - or - exists(target.getParameter(rk.(OutRefReturnKind).getPosition())) } +/** + * A summarized callable where the summary should be used for dataflow analysis. + */ +class DataFlowSummarizedCallable instanceof FlowSummary::SummarizedCallable { + DataFlowSummarizedCallable() { + not this.fromSource() + or + this.fromSource() and not this.isAutoGenerated() + } + + string toString() { result = super.toString() } +} + private module Cached { + /** + * The following heuristic is used to rank when to use source code or when to use summaries for DataFlowCallables. + * 1. Use hand written summaries. + * 2. Use source code. + * 3. Use auto generated summaries. + */ + cached + newtype TDataFlowCallable = + TDotNetCallable(DotNet::Callable c) { + c.isUnboundDeclaration() and not c instanceof DataFlowSummarizedCallable + } or + TSummarizedCallable(DataFlowSummarizedCallable sc) + cached newtype TDataFlowCall = TNonDelegateCall(ControlFlow::Nodes::ElementNode cfn, DispatchCall dc) { @@ -108,7 +126,7 @@ private module Cached { // No need to include calls that are compiled from source not call.getImplementation().getMethod().compiledFromSource() } or - TSummaryCall(FlowSummary::SummarizedCallable c, Node receiver) { + TSummaryCall(FlowSummaryImpl::Public::SummarizedCallable c, Node receiver) { FlowSummaryImpl::Private::summaryCallbackRange(c, receiver) } @@ -144,7 +162,7 @@ private module DispatchImpl { * call is a delegate call, or if the qualifier accesses a parameter of * the enclosing callable `c` (including the implicit `this` parameter). */ - predicate mayBenefitFromCallContext(NonDelegateDataFlowCall call, Callable c) { + predicate mayBenefitFromCallContext(NonDelegateDataFlowCall call, DataFlowCallable c) { c = call.getEnclosingCallable() and call.getDispatchCall().mayBenefitFromCallContext() } @@ -154,7 +172,7 @@ private module DispatchImpl { * restricted to those `call`s for which a context might make a difference. */ DataFlowCallable viableImplInCallContext(NonDelegateDataFlowCall call, DataFlowCall ctx) { - result = + result.getUnderlyingCallable() = call.getDispatchCall() .getADynamicTargetInCallContext(ctx.(NonDelegateDataFlowCall).getDispatchCall()) .getUnboundDeclaration() @@ -233,13 +251,13 @@ class ImplicitCapturedReturnKind extends ReturnKind, TImplicitCapturedReturnKind * one API entry point and out of another. */ class JumpReturnKind extends ReturnKind, TJumpReturnKind { - private DataFlowCallable target; + private Callable target; private ReturnKind rk; JumpReturnKind() { this = TJumpReturnKind(target, rk) } /** Gets the target of the jump. */ - DataFlowCallable getTarget() { result = target } + Callable getTarget() { result = target } /** Gets the return kind of the target. */ ReturnKind getTargetReturnKind() { result = rk } @@ -247,8 +265,24 @@ class JumpReturnKind extends ReturnKind, TJumpReturnKind { override string toString() { result = "jump to " + target } } -class DataFlowCallable extends DotNet::Callable { - DataFlowCallable() { this.isUnboundDeclaration() } +/** A callable used for data flow. */ +class DataFlowCallable extends TDataFlowCallable { + /** Get the underlying source code callable, if any. */ + DotNet::Callable asCallable() { this = TDotNetCallable(result) } + + /** Get the underlying summarized callable, if any. */ + FlowSummary::SummarizedCallable asSummarizedCallable() { this = TSummarizedCallable(result) } + + /** Get the underlying callable. */ + DotNet::Callable getUnderlyingCallable() { + result = this.asCallable() or result = this.asSummarizedCallable() + } + + /** Gets a textual representation of this dataflow callable. */ + string toString() { result = this.getUnderlyingCallable().toString() } + + /** Get the location of this dataflow callable. */ + Location getLocation() { result = this.getUnderlyingCallable().getLocation() } } /** A call relevant for data flow. */ @@ -306,18 +340,32 @@ class NonDelegateDataFlowCall extends DataFlowCall, TNonDelegateCall { DispatchCall getDispatchCall() { result = dc } override DataFlowCallable getARuntimeTarget() { - result = getCallableForDataFlow(dc.getADynamicTarget()) + result.asCallable() = getCallableForDataFlow(dc.getADynamicTarget()) or - result = dc.getAStaticTarget().getUnboundDeclaration() and - summarizedCallable(result) and - not result instanceof RuntimeCallable + exists(Callable c, boolean static | + result.asSummarizedCallable() = c and + c = this.getATarget(static) + | + static = false + or + static = true and not c instanceof RuntimeCallable + ) + } + + /** Gets a static or dynamic target of this call. */ + Callable getATarget(boolean static) { + result = dc.getADynamicTarget().getUnboundDeclaration() and static = false + or + result = dc.getAStaticTarget().getUnboundDeclaration() and static = true } override ControlFlow::Nodes::ElementNode getControlFlowNode() { result = cfn } override DataFlow::ExprNode getNode() { result.getControlFlowNode() = cfn } - override DataFlowCallable getEnclosingCallable() { result = cfn.getEnclosingCallable() } + override DataFlowCallable getEnclosingCallable() { + result.getUnderlyingCallable() = cfn.getEnclosingCallable() + } override string toString() { result = cfn.toString() } @@ -345,7 +393,9 @@ class ExplicitDelegateLikeDataFlowCall extends DelegateDataFlowCall, TExplicitDe override DataFlow::ExprNode getNode() { result.getControlFlowNode() = cfn } - override DataFlowCallable getEnclosingCallable() { result = cfn.getEnclosingCallable() } + override DataFlowCallable getEnclosingCallable() { + result.getUnderlyingCallable() = cfn.getEnclosingCallable() + } override string toString() { result = cfn.toString() } @@ -363,13 +413,15 @@ class TransitiveCapturedDataFlowCall extends DataFlowCall, TTransitiveCapturedCa TransitiveCapturedDataFlowCall() { this = TTransitiveCapturedCall(cfn, target) } - override DataFlowCallable getARuntimeTarget() { result = target } + override DataFlowCallable getARuntimeTarget() { result.getUnderlyingCallable() = target } override ControlFlow::Nodes::ElementNode getControlFlowNode() { result = cfn } override DataFlow::ExprNode getNode() { none() } - override DataFlowCallable getEnclosingCallable() { result = cfn.getEnclosingCallable() } + override DataFlowCallable getEnclosingCallable() { + result.getUnderlyingCallable() = cfn.getEnclosingCallable() + } override string toString() { result = "[transitive] " + cfn.toString() } @@ -384,14 +436,16 @@ class CilDataFlowCall extends DataFlowCall, TCilCall { override DataFlowCallable getARuntimeTarget() { // There is no dispatch library for CIL, so do not consider overrides for now - result = getCallableForDataFlow(call.getTarget()) + result.getUnderlyingCallable() = getCallableForDataFlow(call.getTarget()) } override ControlFlow::Nodes::ElementNode getControlFlowNode() { none() } override DataFlow::ExprNode getNode() { result.getExpr() = call } - override DataFlowCallable getEnclosingCallable() { result = call.getEnclosingCallable() } + override DataFlowCallable getEnclosingCallable() { + result.getUnderlyingCallable() = call.getEnclosingCallable() + } override string toString() { result = call.toString() } @@ -406,7 +460,7 @@ class CilDataFlowCall extends DataFlowCall, TCilCall { * the method `Select`. */ class SummaryCall extends DelegateDataFlowCall, TSummaryCall { - private FlowSummary::SummarizedCallable c; + private FlowSummaryImpl::Public::SummarizedCallable c; private Node receiver; SummaryCall() { this = TSummaryCall(c, receiver) } @@ -422,7 +476,7 @@ class SummaryCall extends DelegateDataFlowCall, TSummaryCall { override DataFlow::Node getNode() { none() } - override DataFlowCallable getEnclosingCallable() { result = c } + override DataFlowCallable getEnclosingCallable() { result.asSummarizedCallable() = c } override string toString() { result = "[summary] call to " + receiver + " in " + c } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index ed803907c39..fb773ea89f8 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index ed803907c39..fb773ea89f8 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index ed803907c39..fb773ea89f8 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index ed803907c39..fb773ea89f8 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index ed803907c39..fb773ea89f8 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -116,7 +116,7 @@ abstract class Configuration extends string { * Holds if an arbitrary number of implicit read steps of content `c` may be * taken at `node`. */ - predicate allowImplicitRead(Node node, Content c) { none() } + predicate allowImplicitRead(Node node, ContentSet c) { none() } /** * Gets the virtual dispatch branching limit when calculating field flow. @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -485,8 +493,9 @@ private predicate additionalJumpStateStep( ) } -private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { - read(node1.asNode(), c, node2.asNode()) and +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and stepFilter(node1, node2, config) or exists(Node n | @@ -496,6 +505,37 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf ) } +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config ) { @@ -573,9 +613,9 @@ private module Stage1 { ) or // read - exists(Content c | - fwdFlowRead(c, node, cc, config) and - fwdFlowConsCand(c, config) + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) ) or // flow into a callable @@ -599,10 +639,10 @@ private module Stage1 { private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } pragma[nomagic] - private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { exists(NodeEx mid | fwdFlow(mid, cc, config) and - read(mid, c, node, config) + readSet(mid, c, node, config) ) } @@ -620,6 +660,16 @@ private module Stage1 { ) } + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + pragma[nomagic] private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { exists(RetNodeEx ret | @@ -712,9 +762,9 @@ private module Stage1 { ) or // read - exists(NodeEx mid, Content c | - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and revFlow(mid, toReturn, pragma[only_bind_into](config)) ) or @@ -740,10 +790,10 @@ private module Stage1 { */ pragma[nomagic] private predicate revFlowConsCand(Content c, Configuration config) { - exists(NodeEx mid, NodeEx node | + exists(NodeEx mid, NodeEx node, ContentSet cs | fwdFlow(node, pragma[only_bind_into](config)) and - read(node, c, mid, config) and - fwdFlowConsCand(c, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) ) } @@ -762,7 +812,8 @@ private module Stage1 { * Holds if `c` is the target of both a read and a store in the flow covered * by `revFlow`. */ - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -861,8 +912,8 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and - revFlow(n2, pragma[only_bind_into](config)) and - read(n1, c, n2, pragma[only_bind_into](config)) + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) } pragma[nomagic] @@ -872,7 +923,10 @@ private module Stage1 { predicate revFlow( NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config ) { - revFlow(node, toReturn, config) and exists(state) and exists(returnAp) and exists(ap) + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) } private predicate throughFlowNodeCand(NodeEx node, Configuration config) { @@ -1147,11 +1201,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { - PrevStage::revFlowState(state, config) and + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1574,7 +1643,7 @@ private module Stage2 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -1612,10 +1681,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -1706,7 +1789,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1729,9 +1813,9 @@ private module LocalFlowBigStep { or node.asNode() instanceof OutNodeExt or - store(_, _, node, _, config) + Stage2::storeStepCand(_, _, _, node, _, config) or - read(_, _, node, config) + Stage2::readStepCand(_, _, node, config) or node instanceof FlowCheckNode or @@ -1752,8 +1836,8 @@ private module LocalFlowBigStep { additionalJumpStep(node, next, config) or flowIntoCallNodeCand1(_, node, next, config) or flowOutOfCallNodeCand1(_, node, next, config) or - store(node, _, next, _, config) or - read(node, _, next, config) + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) ) or exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | @@ -1926,7 +2010,34 @@ private module Stage3 { private predicate flowIntoCall = flowIntoCallNodeCand2/5; pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1935,8 +2046,13 @@ private module Stage3 { private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { exists(state) and exists(config) and - not clear(node, ap) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -2363,7 +2479,7 @@ private module Stage3 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -2401,10 +2517,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3190,7 +3320,7 @@ private module Stage4 { Configuration config ) { exists(Ap ap2, Content c | - store(node1, tc, node2, contentType, config) and + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and revFlowConsCand(ap2, c, ap1, config) ) @@ -3228,10 +3358,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3300,17 +3444,28 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { @@ -3506,7 +3661,7 @@ private newtype TPathNode = * of dereference operations needed to get from the value in the node to the * tracked object. The final type indicates the type of the tracked object. */ -abstract private class AccessPath extends TAccessPath { +private class AccessPath extends TAccessPath { /** Gets the head of this access path, if any. */ abstract TypedContent getHead(); @@ -3721,11 +3876,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { @@ -4202,10 +4360,16 @@ private module Subpaths { exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _, _) or store(n1, _, n2, _, _) or - read(n1, _, n2, _) + readSet(n1, _, n2, _) ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4213,15 +4377,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } @@ -4557,7 +4719,11 @@ private module FlowExploration { or exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and - not clearsContentCached(node.asNode(), ap.getHead()) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4573,7 +4739,11 @@ private module FlowExploration { partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and - not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll index 50dcb8901ea..95b34f15dad 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll @@ -216,10 +216,9 @@ private module LambdaFlow { or // jump step exists(Node mid, DataFlowType t0 | - revLambdaFlow(lambdaCall, kind, mid, t0, _, _, _) and + revLambdaFlow(lambdaCall, kind, mid, t0, _, _, lastCall) and toReturn = false and - toJump = true and - lastCall = TDataFlowCallNone() + toJump = true | jumpStepCached(node, mid) and t = t0 @@ -305,7 +304,7 @@ cached private module Cached { /** * If needed, call this predicate from `DataFlowImplSpecific.qll` in order to - * force a stage-dependency on the `DataFlowImplCommon.qll` stage and therby + * force a stage-dependency on the `DataFlowImplCommon.qll` stage and thereby * collapsing the two stages. */ cached @@ -326,7 +325,10 @@ private module Cached { predicate jumpStepCached(Node node1, Node node2) { jumpStep(node1, node2) } cached - predicate clearsContentCached(Node n, Content c) { clearsContent(n, c) } + predicate clearsContentCached(Node n, ContentSet c) { clearsContent(n, c) } + + cached + predicate expectsContentCached(Node n, ContentSet c) { expectsContent(n, c) } cached predicate isUnreachableInCallCached(Node n, DataFlowCall call) { isUnreachableInCall(n, call) } @@ -373,7 +375,7 @@ private module Cached { // For reads, `x.f`, we want to check that the tracked type after the read (which // is obtained by popping the head of the access path stack) is compatible with // the type of `x.f`. - read(_, _, n) + readSet(_, _, n) } cached @@ -469,7 +471,7 @@ private module Cached { // read exists(Node mid | parameterValueFlowCand(p, mid, false) and - read(mid, _, node) and + readSet(mid, _, node) and read = true ) or @@ -657,8 +659,10 @@ private module Cached { * Holds if `arg` flows to `out` through a call using only * value-preserving steps and a single read step, not taking call * contexts into account, thus representing a getter-step. + * + * This predicate is exposed for testing only. */ - predicate getterStep(ArgNode arg, Content c, Node out) { + predicate getterStep(ArgNode arg, ContentSet c, Node out) { argumentValueFlowsThrough(arg, TReadStepTypesSome(_, c, _), out) } @@ -781,8 +785,12 @@ private module Cached { parameterValueFlow(p, n.getPreUpdateNode(), TReadStepTypesNone()) } - private predicate store( - Node node1, Content c, Node node2, DataFlowType contentType, DataFlowType containerType + cached + predicate readSet(Node node1, ContentSet c, Node node2) { readStep(node1, c, node2) } + + cached + predicate storeSet( + Node node1, ContentSet c, Node node2, DataFlowType contentType, DataFlowType containerType ) { storeStep(node1, c, node2) and contentType = getNodeDataFlowType(node1) and @@ -794,14 +802,19 @@ private module Cached { | argumentValueFlowsThrough(n2, TReadStepTypesSome(containerType, c, contentType), n1) or - read(n2, c, n1) and + readSet(n2, c, n1) and contentType = getNodeDataFlowType(n1) and containerType = getNodeDataFlowType(n2) ) } - cached - predicate read(Node node1, Content c, Node node2) { readStep(node1, c, node2) } + private predicate store( + Node node1, Content c, Node node2, DataFlowType contentType, DataFlowType containerType + ) { + exists(ContentSet cs | + c = cs.getAStoreContent() and storeSet(node1, cs, node2, contentType, containerType) + ) + } /** * Holds if data can flow from `node1` to `node2` via a direct assignment to @@ -932,16 +945,16 @@ class CastingNode extends Node { } private predicate readStepWithTypes( - Node n1, DataFlowType container, Content c, Node n2, DataFlowType content + Node n1, DataFlowType container, ContentSet c, Node n2, DataFlowType content ) { - read(n1, c, n2) and + readSet(n1, c, n2) and container = getNodeDataFlowType(n1) and content = getNodeDataFlowType(n2) } private newtype TReadStepTypesOption = TReadStepTypesNone() or - TReadStepTypesSome(DataFlowType container, Content c, DataFlowType content) { + TReadStepTypesSome(DataFlowType container, ContentSet c, DataFlowType content) { readStepWithTypes(_, container, c, _, content) } @@ -950,7 +963,7 @@ private class ReadStepTypesOption extends TReadStepTypesOption { DataFlowType getContainerType() { this = TReadStepTypesSome(result, _, _) } - Content getContent() { this = TReadStepTypesSome(_, result, _) } + ContentSet getContent() { this = TReadStepTypesSome(_, result, _) } DataFlowType getContentType() { this = TReadStepTypesSome(_, _, result) } @@ -1325,8 +1338,6 @@ abstract class AccessPathFront extends TAccessPathFront { abstract boolean toBoolNonEmpty(); TypedContent getHead() { this = TFrontHead(result) } - - predicate isClearedAt(Node n) { clearsContentCached(n, this.getHead().getContent()) } } class AccessPathFrontNil extends AccessPathFront, TFrontNil { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplForContentDataFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplForContentDataFlow.qll new file mode 100644 index 00000000000..fb773ea89f8 --- /dev/null +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplForContentDataFlow.qll @@ -0,0 +1,5389 @@ +/** + * Provides an implementation of global (interprocedural) data flow. This file + * re-exports the local (intraprocedural) data flow analysis from + * `DataFlowImplSpecific::Public` and adds a global analysis, mainly exposed + * through the `Configuration` class. This file exists in several identical + * copies, allowing queries to use multiple `Configuration` classes that depend + * on each other without introducing mutual recursion among those configurations. + */ + +private import DataFlowImplCommon +private import DataFlowImplSpecific::Private +import DataFlowImplSpecific::Public +import DataFlowImplCommonPublic + +/** + * A configuration of interprocedural data flow analysis. This defines + * sources, sinks, and any other configurable aspect of the analysis. Each + * use of the global data flow library must define its own unique extension + * of this abstract class. To create a configuration, extend this class with + * a subclass whose characteristic predicate is a unique singleton string. + * For example, write + * + * ```ql + * class MyAnalysisConfiguration extends DataFlow::Configuration { + * MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" } + * // Override `isSource` and `isSink`. + * // Optionally override `isBarrier`. + * // Optionally override `isAdditionalFlowStep`. + * } + * ``` + * Conceptually, this defines a graph where the nodes are `DataFlow::Node`s and + * the edges are those data-flow steps that preserve the value of the node + * along with any additional edges defined by `isAdditionalFlowStep`. + * Specifying nodes in `isBarrier` will remove those nodes from the graph, and + * specifying nodes in `isBarrierIn` and/or `isBarrierOut` will remove in-going + * and/or out-going edges from those nodes, respectively. + * + * Then, to query whether there is flow between some `source` and `sink`, + * write + * + * ```ql + * exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink)) + * ``` + * + * Multiple configurations can coexist, but two classes extending + * `DataFlow::Configuration` should never depend on each other. One of them + * should instead depend on a `DataFlow2::Configuration`, a + * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. + */ +abstract class Configuration extends string { + bindingset[this] + Configuration() { any() } + + /** + * Holds if `source` is a relevant data flow source. + */ + predicate isSource(Node source) { none() } + + /** + * Holds if `source` is a relevant data flow source with the given initial + * `state`. + */ + predicate isSource(Node source, FlowState state) { none() } + + /** + * Holds if `sink` is a relevant data flow sink. + */ + predicate isSink(Node sink) { none() } + + /** + * Holds if `sink` is a relevant data flow sink accepting `state`. + */ + predicate isSink(Node source, FlowState state) { none() } + + /** + * Holds if data flow through `node` is prohibited. This completely removes + * `node` from the data flow graph. + */ + predicate isBarrier(Node node) { none() } + + /** + * Holds if data flow through `node` is prohibited when the flow state is + * `state`. + */ + predicate isBarrier(Node node, FlowState state) { none() } + + /** Holds if data flow into `node` is prohibited. */ + predicate isBarrierIn(Node node) { none() } + + /** Holds if data flow out of `node` is prohibited. */ + predicate isBarrierOut(Node node) { none() } + + /** Holds if data flow through nodes guarded by `guard` is prohibited. */ + predicate isBarrierGuard(BarrierGuard guard) { none() } + + /** + * Holds if data flow through nodes guarded by `guard` is prohibited when + * the flow state is `state` + */ + predicate isBarrierGuard(BarrierGuard guard, FlowState state) { none() } + + /** + * Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps. + */ + predicate isAdditionalFlowStep(Node node1, Node node2) { none() } + + /** + * Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps. + * This step is only applicable in `state1` and updates the flow state to `state2`. + */ + predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) { + none() + } + + /** + * Holds if an arbitrary number of implicit read steps of content `c` may be + * taken at `node`. + */ + predicate allowImplicitRead(Node node, ContentSet c) { none() } + + /** + * Gets the virtual dispatch branching limit when calculating field flow. + * This can be overridden to a smaller value to improve performance (a + * value of 0 disables field flow), or a larger value to get more results. + */ + int fieldFlowBranchLimit() { result = 2 } + + /** + * Gets a data flow configuration feature to add restrictions to the set of + * valid flow paths. + * + * - `FeatureHasSourceCallContext`: + * Assume that sources have some existing call context to disallow + * conflicting return-flow directly following the source. + * - `FeatureHasSinkCallContext`: + * Assume that sinks have some existing call context to disallow + * conflicting argument-to-parameter flow directly preceding the sink. + * - `FeatureEqualSourceSinkCallContext`: + * Implies both of the above and additionally ensures that the entire flow + * path preserves the call context. + */ + FlowFeature getAFeature() { none() } + + /** + * Holds if data may flow from `source` to `sink` for this configuration. + */ + predicate hasFlow(Node source, Node sink) { flowsTo(source, sink, this) } + + /** + * Holds if data may flow from `source` to `sink` for this configuration. + * + * The corresponding paths are generated from the end-points and the graph + * included in the module `PathGraph`. + */ + predicate hasFlowPath(PathNode source, PathNode sink) { flowsTo(source, sink, _, _, this) } + + /** + * Holds if data may flow from some source to `sink` for this configuration. + */ + predicate hasFlowTo(Node sink) { this.hasFlow(_, sink) } + + /** + * Holds if data may flow from some source to `sink` for this configuration. + */ + predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } + + /** + * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` + * measured in approximate number of interprocedural steps. + */ + int explorationLimit() { none() } + + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + + /** + * Holds if there is a partial data flow path from `source` to `node`. The + * approximate distance between `node` and the closest source is `dist` and + * is restricted to be less than or equal to `explorationLimit()`. This + * predicate completely disregards sink definitions. + * + * This predicate is intended for data-flow exploration and debugging and may + * perform poorly if the number of sources is too big and/or the exploration + * limit is set too high without using barriers. + * + * This predicate is disabled (has no results) by default. Override + * `explorationLimit()` with a suitable number to enable this predicate. + * + * To use this in a `path-problem` query, import the module `PartialPathGraph`. + */ + final predicate hasPartialFlow(PartialPathNode source, PartialPathNode node, int dist) { + partialFlow(source, node, this) and + dist = node.getSourceDistance() + } + + /** + * Holds if there is a partial data flow path from `node` to `sink`. The + * approximate distance between `node` and the closest sink is `dist` and + * is restricted to be less than or equal to `explorationLimit()`. This + * predicate completely disregards source definitions. + * + * This predicate is intended for data-flow exploration and debugging and may + * perform poorly if the number of sinks is too big and/or the exploration + * limit is set too high without using barriers. + * + * This predicate is disabled (has no results) by default. Override + * `explorationLimit()` with a suitable number to enable this predicate. + * + * To use this in a `path-problem` query, import the module `PartialPathGraph`. + * + * Note that reverse flow has slightly lower precision than the corresponding + * forward flow, as reverse flow disregards type pruning among other features. + */ + final predicate hasPartialFlowRev(PartialPathNode node, PartialPathNode sink, int dist) { + revPartialFlow(node, sink, this) and + dist = node.getSinkDistance() + } +} + +/** + * This class exists to prevent mutual recursion between the user-overridden + * member predicates of `Configuration` and the rest of the data-flow library. + * Good performance cannot be guaranteed in the presence of such recursion, so + * it should be replaced by using more than one copy of the data flow library. + */ +abstract private class ConfigurationRecursionPrevention extends Configuration { + bindingset[this] + ConfigurationRecursionPrevention() { any() } + + override predicate hasFlow(Node source, Node sink) { + strictcount(Node n | this.isSource(n)) < 0 + or + strictcount(Node n | this.isSource(n, _)) < 0 + or + strictcount(Node n | this.isSink(n)) < 0 + or + strictcount(Node n | this.isSink(n, _)) < 0 + or + strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0 + or + strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, _, n2, _)) < 0 + or + super.hasFlow(source, sink) + } +} + +private newtype TNodeEx = + TNodeNormal(Node n) or + TNodeImplicitRead(Node n, boolean hasRead) { + any(Configuration c).allowImplicitRead(n, _) and hasRead = [false, true] + } + +private class NodeEx extends TNodeEx { + string toString() { + result = this.asNode().toString() + or + exists(Node n | this.isImplicitReadNode(n, _) | result = n.toString() + " [Ext]") + } + + Node asNode() { this = TNodeNormal(result) } + + predicate isImplicitReadNode(Node n, boolean hasRead) { this = TNodeImplicitRead(n, hasRead) } + + Node projectToNode() { this = TNodeNormal(result) or this = TNodeImplicitRead(result, _) } + + pragma[nomagic] + private DataFlowCallable getEnclosingCallable0() { + nodeEnclosingCallable(this.projectToNode(), result) + } + + pragma[inline] + DataFlowCallable getEnclosingCallable() { + pragma[only_bind_out](this).getEnclosingCallable0() = pragma[only_bind_into](result) + } + + pragma[nomagic] + private DataFlowType getDataFlowType0() { nodeDataFlowType(this.asNode(), result) } + + pragma[inline] + DataFlowType getDataFlowType() { + pragma[only_bind_out](this).getDataFlowType0() = pragma[only_bind_into](result) + } + + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.projectToNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +private class ArgNodeEx extends NodeEx { + ArgNodeEx() { this.asNode() instanceof ArgNode } +} + +private class ParamNodeEx extends NodeEx { + ParamNodeEx() { this.asNode() instanceof ParamNode } + + predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { + this.asNode().(ParamNode).isParameterOf(c, pos) + } + + ParameterPosition getPosition() { this.isParameterOf(_, result) } + + predicate allowParameterReturnInSelf() { allowParameterReturnInSelfCached(this.asNode()) } +} + +private class RetNodeEx extends NodeEx { + RetNodeEx() { this.asNode() instanceof ReturnNodeExt } + + ReturnPosition getReturnPosition() { result = getReturnPosition(this.asNode()) } + + ReturnKindExt getKind() { result = this.asNode().(ReturnNodeExt).getKind() } +} + +private predicate inBarrier(NodeEx node, Configuration config) { + exists(Node n | + node.asNode() = n and + config.isBarrierIn(n) + | + config.isSource(n) or config.isSource(n, _) + ) +} + +private predicate outBarrier(NodeEx node, Configuration config) { + exists(Node n | + node.asNode() = n and + config.isBarrierOut(n) + | + config.isSink(n) or config.isSink(n, _) + ) +} + +pragma[nomagic] +private predicate fullBarrier(NodeEx node, Configuration config) { + exists(Node n | node.asNode() = n | + config.isBarrier(n) + or + config.isBarrierIn(n) and + not config.isSource(n) and + not config.isSource(n, _) + or + config.isBarrierOut(n) and + not config.isSink(n) and + not config.isSink(n, _) + or + exists(BarrierGuard g | + config.isBarrierGuard(g) and + n = g.getAGuardedNode() + ) + ) +} + +pragma[nomagic] +private predicate stateBarrier(NodeEx node, FlowState state, Configuration config) { + exists(Node n | node.asNode() = n | + config.isBarrier(n, state) + or + exists(BarrierGuard g | + config.isBarrierGuard(g, state) and + n = g.getAGuardedNode() + ) + ) +} + +pragma[nomagic] +private predicate sourceNode(NodeEx node, FlowState state, Configuration config) { + ( + config.isSource(node.asNode()) and state instanceof FlowStateEmpty + or + config.isSource(node.asNode(), state) + ) and + not fullBarrier(node, config) and + not stateBarrier(node, state, config) +} + +pragma[nomagic] +private predicate sinkNode(NodeEx node, FlowState state, Configuration config) { + ( + config.isSink(node.asNode()) and state instanceof FlowStateEmpty + or + config.isSink(node.asNode(), state) + ) and + not fullBarrier(node, config) and + not stateBarrier(node, state, config) +} + +/** Provides the relevant barriers for a step from `node1` to `node2`. */ +pragma[inline] +private predicate stepFilter(NodeEx node1, NodeEx node2, Configuration config) { + not outBarrier(node1, config) and + not inBarrier(node2, config) and + not fullBarrier(node1, config) and + not fullBarrier(node2, config) +} + +/** + * Holds if data can flow in one local step from `node1` to `node2`. + */ +private predicate localFlowStep(NodeEx node1, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + simpleLocalFlowStepExt(n1, n2) and + stepFilter(node1, node2, config) + ) + or + exists(Node n | + config.allowImplicitRead(n, _) and + node1.asNode() = n and + node2.isImplicitReadNode(n, false) and + not fullBarrier(node1, config) + ) +} + +/** + * Holds if the additional step from `node1` to `node2` does not jump between callables. + */ +private predicate additionalLocalFlowStep(NodeEx node1, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + config.isAdditionalFlowStep(n1, n2) and + getNodeEnclosingCallable(n1) = getNodeEnclosingCallable(n2) and + stepFilter(node1, node2, config) + ) + or + exists(Node n | + config.allowImplicitRead(n, _) and + node1.isImplicitReadNode(n, true) and + node2.asNode() = n and + not fullBarrier(node2, config) + ) +} + +private predicate additionalLocalStateStep( + NodeEx node1, FlowState s1, NodeEx node2, FlowState s2, Configuration config +) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + config.isAdditionalFlowStep(n1, s1, n2, s2) and + getNodeEnclosingCallable(n1) = getNodeEnclosingCallable(n2) and + stepFilter(node1, node2, config) and + not stateBarrier(node1, s1, config) and + not stateBarrier(node2, s2, config) + ) +} + +/** + * Holds if data can flow from `node1` to `node2` in a way that discards call contexts. + */ +private predicate jumpStep(NodeEx node1, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + jumpStepCached(n1, n2) and + stepFilter(node1, node2, config) and + not config.getAFeature() instanceof FeatureEqualSourceSinkCallContext + ) +} + +/** + * Holds if the additional step from `node1` to `node2` jumps between callables. + */ +private predicate additionalJumpStep(NodeEx node1, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + config.isAdditionalFlowStep(n1, n2) and + getNodeEnclosingCallable(n1) != getNodeEnclosingCallable(n2) and + stepFilter(node1, node2, config) and + not config.getAFeature() instanceof FeatureEqualSourceSinkCallContext + ) +} + +private predicate additionalJumpStateStep( + NodeEx node1, FlowState s1, NodeEx node2, FlowState s2, Configuration config +) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + config.isAdditionalFlowStep(n1, s1, n2, s2) and + getNodeEnclosingCallable(n1) != getNodeEnclosingCallable(n2) and + stepFilter(node1, node2, config) and + not stateBarrier(node1, s1, config) and + not stateBarrier(node2, s2, config) and + not config.getAFeature() instanceof FeatureEqualSourceSinkCallContext + ) +} + +pragma[nomagic] +private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuration config) { + readSet(node1.asNode(), c, node2.asNode()) and + stepFilter(node1, node2, config) + or + exists(Node n | + node2.isImplicitReadNode(n, true) and + node1.isImplicitReadNode(n, _) and + config.allowImplicitRead(n, c) + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(ContentSet cs | + readSet(node1, cs, node2, config) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +// inline to reduce fan-out via `getAReadContent` +bindingset[c] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + +pragma[nomagic] +private predicate store( + NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config +) { + store(node1.asNode(), tc, node2.asNode(), contentType) and + read(_, tc.getContent(), _, config) and + stepFilter(node1, node2, config) +} + +pragma[nomagic] +private predicate viableReturnPosOutEx(DataFlowCall call, ReturnPosition pos, NodeEx out) { + viableReturnPosOut(call, pos, out.asNode()) +} + +pragma[nomagic] +private predicate viableParamArgEx(DataFlowCall call, ParamNodeEx p, ArgNodeEx arg) { + viableParamArg(call, p.asNode(), arg.asNode()) +} + +/** + * Holds if field flow should be used for the given configuration. + */ +private predicate useFieldFlow(Configuration config) { config.fieldFlowBranchLimit() >= 1 } + +private predicate hasSourceCallCtx(Configuration config) { + exists(FlowFeature feature | feature = config.getAFeature() | + feature instanceof FeatureHasSourceCallContext or + feature instanceof FeatureEqualSourceSinkCallContext + ) +} + +private predicate hasSinkCallCtx(Configuration config) { + exists(FlowFeature feature | feature = config.getAFeature() | + feature instanceof FeatureHasSinkCallContext or + feature instanceof FeatureEqualSourceSinkCallContext + ) +} + +private module Stage1 { + class ApApprox = Unit; + + class Ap = Unit; + + class ApOption = Unit; + + class Cc = boolean; + + /* Begin: Stage 1 logic. */ + /** + * Holds if `node` is reachable from a source in the configuration `config`. + * + * The Boolean `cc` records whether the node is reached through an + * argument in a call. + */ + predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { + sourceNode(node, _, config) and + if hasSourceCallCtx(config) then cc = true else cc = false + or + exists(NodeEx mid | fwdFlow(mid, cc, config) | + localFlowStep(mid, node, config) or + additionalLocalFlowStep(mid, node, config) or + additionalLocalStateStep(mid, _, node, _, config) + ) + or + exists(NodeEx mid | fwdFlow(mid, _, config) and cc = false | + jumpStep(mid, node, config) or + additionalJumpStep(mid, node, config) or + additionalJumpStateStep(mid, _, node, _, config) + ) + or + // store + exists(NodeEx mid | + useFieldFlow(config) and + fwdFlow(mid, cc, config) and + store(mid, _, node, _, config) + ) + or + // read + exists(ContentSet c | + fwdFlowReadSet(c, node, cc, config) and + fwdFlowConsCandSet(c, _, config) + ) + or + // flow into a callable + exists(NodeEx arg | + fwdFlow(arg, _, config) and + viableParamArgEx(_, node, arg) and + cc = true and + not fullBarrier(node, config) + ) + or + // flow out of a callable + exists(DataFlowCall call | + fwdFlowOut(call, node, false, config) and + cc = false + or + fwdFlowOutFromArg(call, node, config) and + fwdFlowIsEntered(call, cc, config) + ) + } + + private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } + + pragma[nomagic] + private predicate fwdFlowReadSet(ContentSet c, NodeEx node, Cc cc, Configuration config) { + exists(NodeEx mid | + fwdFlow(mid, cc, config) and + readSet(mid, c, node, config) + ) + } + + /** + * Holds if `c` is the target of a store in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCand(Content c, Configuration config) { + exists(NodeEx mid, NodeEx node, TypedContent tc | + not fullBarrier(node, config) and + useFieldFlow(config) and + fwdFlow(mid, _, config) and + store(mid, tc, node, _, config) and + c = tc.getContent() + ) + } + + /** + * Holds if `cs` may be interpreted in a read as the target of some store + * into `c`, in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCandSet(ContentSet cs, Content c, Configuration config) { + fwdFlowConsCand(c, config) and + c = cs.getAReadContent() + } + + pragma[nomagic] + private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { + exists(RetNodeEx ret | + fwdFlow(ret, cc, config) and + ret.getReturnPosition() = pos + ) + } + + pragma[nomagic] + private predicate fwdFlowOut(DataFlowCall call, NodeEx out, Cc cc, Configuration config) { + exists(ReturnPosition pos | + fwdFlowReturnPosition(pos, cc, config) and + viableReturnPosOutEx(call, pos, out) and + not fullBarrier(out, config) + ) + } + + pragma[nomagic] + private predicate fwdFlowOutFromArg(DataFlowCall call, NodeEx out, Configuration config) { + fwdFlowOut(call, out, true, config) + } + + /** + * Holds if an argument to `call` is reached in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowIsEntered(DataFlowCall call, Cc cc, Configuration config) { + exists(ArgNodeEx arg | + fwdFlow(arg, cc, config) and + viableParamArgEx(call, _, arg) + ) + } + + private predicate stateStepFwd(FlowState state1, FlowState state2, Configuration config) { + exists(NodeEx node1 | + additionalLocalStateStep(node1, state1, _, state2, config) or + additionalJumpStateStep(node1, state1, _, state2, config) + | + fwdFlow(node1, config) + ) + } + + private predicate fwdFlowState(FlowState state, Configuration config) { + sourceNode(_, state, config) + or + exists(FlowState state0 | + fwdFlowState(state0, config) and + stateStepFwd(state0, state, config) + ) + } + + /** + * Holds if `node` is part of a path from a source to a sink in the + * configuration `config`. + * + * The Boolean `toReturn` records whether the node must be returned from + * the enclosing callable in order to reach a sink. + */ + pragma[nomagic] + predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { + revFlow0(node, toReturn, config) and + fwdFlow(node, config) + } + + pragma[nomagic] + private predicate revFlow0(NodeEx node, boolean toReturn, Configuration config) { + exists(FlowState state | + fwdFlow(node, pragma[only_bind_into](config)) and + sinkNode(node, state, config) and + fwdFlowState(state, pragma[only_bind_into](config)) and + if hasSinkCallCtx(config) then toReturn = true else toReturn = false + ) + or + exists(NodeEx mid | revFlow(mid, toReturn, config) | + localFlowStep(node, mid, config) or + additionalLocalFlowStep(node, mid, config) or + additionalLocalStateStep(node, _, mid, _, config) + ) + or + exists(NodeEx mid | revFlow(mid, _, config) and toReturn = false | + jumpStep(node, mid, config) or + additionalJumpStep(node, mid, config) or + additionalJumpStateStep(node, _, mid, _, config) + ) + or + // store + exists(Content c | + revFlowStore(c, node, toReturn, config) and + revFlowConsCand(c, config) + ) + or + // read + exists(NodeEx mid, ContentSet c | + readSet(node, c, mid, config) and + fwdFlowConsCandSet(c, _, pragma[only_bind_into](config)) and + revFlow(mid, toReturn, pragma[only_bind_into](config)) + ) + or + // flow into a callable + exists(DataFlowCall call | + revFlowIn(call, node, false, config) and + toReturn = false + or + revFlowInToReturn(call, node, config) and + revFlowIsReturned(call, toReturn, config) + ) + or + // flow out of a callable + exists(ReturnPosition pos | + revFlowOut(pos, config) and + node.(RetNodeEx).getReturnPosition() = pos and + toReturn = true + ) + } + + /** + * Holds if `c` is the target of a read in the flow covered by `revFlow`. + */ + pragma[nomagic] + private predicate revFlowConsCand(Content c, Configuration config) { + exists(NodeEx mid, NodeEx node, ContentSet cs | + fwdFlow(node, pragma[only_bind_into](config)) and + readSet(node, cs, mid, config) and + fwdFlowConsCandSet(cs, c, pragma[only_bind_into](config)) and + revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate revFlowStore(Content c, NodeEx node, boolean toReturn, Configuration config) { + exists(NodeEx mid, TypedContent tc | + revFlow(mid, toReturn, pragma[only_bind_into](config)) and + fwdFlowConsCand(c, pragma[only_bind_into](config)) and + store(node, tc, mid, _, config) and + c = tc.getContent() + ) + } + + /** + * Holds if `c` is the target of both a read and a store in the flow covered + * by `revFlow`. + */ + pragma[nomagic] + predicate revFlowIsReadAndStored(Content c, Configuration conf) { + revFlowConsCand(c, conf) and + revFlowStore(c, _, _, conf) + } + + pragma[nomagic] + predicate viableReturnPosOutNodeCandFwd1( + DataFlowCall call, ReturnPosition pos, NodeEx out, Configuration config + ) { + fwdFlowReturnPosition(pos, _, config) and + viableReturnPosOutEx(call, pos, out) + } + + pragma[nomagic] + private predicate revFlowOut(ReturnPosition pos, Configuration config) { + exists(DataFlowCall call, NodeEx out | + revFlow(out, _, config) and + viableReturnPosOutNodeCandFwd1(call, pos, out, config) + ) + } + + pragma[nomagic] + predicate viableParamArgNodeCandFwd1( + DataFlowCall call, ParamNodeEx p, ArgNodeEx arg, Configuration config + ) { + viableParamArgEx(call, p, arg) and + fwdFlow(arg, config) + } + + pragma[nomagic] + private predicate revFlowIn( + DataFlowCall call, ArgNodeEx arg, boolean toReturn, Configuration config + ) { + exists(ParamNodeEx p | + revFlow(p, toReturn, config) and + viableParamArgNodeCandFwd1(call, p, arg, config) + ) + } + + pragma[nomagic] + private predicate revFlowInToReturn(DataFlowCall call, ArgNodeEx arg, Configuration config) { + revFlowIn(call, arg, true, config) + } + + /** + * Holds if an output from `call` is reached in the flow covered by `revFlow` + * and data might flow through the target callable resulting in reverse flow + * reaching an argument of `call`. + */ + pragma[nomagic] + private predicate revFlowIsReturned(DataFlowCall call, boolean toReturn, Configuration config) { + exists(NodeEx out | + revFlow(out, toReturn, config) and + fwdFlowOutFromArg(call, out, config) + ) + } + + private predicate stateStepRev(FlowState state1, FlowState state2, Configuration config) { + exists(NodeEx node1, NodeEx node2 | + additionalLocalStateStep(node1, state1, node2, state2, config) or + additionalJumpStateStep(node1, state1, node2, state2, config) + | + revFlow(node1, _, pragma[only_bind_into](config)) and + revFlow(node2, _, pragma[only_bind_into](config)) and + fwdFlowState(state1, pragma[only_bind_into](config)) and + fwdFlowState(state2, pragma[only_bind_into](config)) + ) + } + + predicate revFlowState(FlowState state, Configuration config) { + exists(NodeEx node | + sinkNode(node, state, config) and + revFlow(node, _, pragma[only_bind_into](config)) and + fwdFlowState(state, pragma[only_bind_into](config)) + ) + or + exists(FlowState state0 | + revFlowState(state0, config) and + stateStepRev(state, state0, config) + ) + } + + pragma[nomagic] + predicate storeStepCand( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, DataFlowType contentType, + Configuration config + ) { + exists(Content c | + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + revFlow(node2, pragma[only_bind_into](config)) and + store(node1, tc, node2, contentType, config) and + c = tc.getContent() and + exists(ap1) + ) + } + + pragma[nomagic] + predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + read(n1, c, n2, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) + } + + pragma[nomagic] + predicate revFlow(NodeEx node, Configuration config) { revFlow(node, _, config) } + + bindingset[node, state, config] + predicate revFlow( + NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + revFlow(node, toReturn, pragma[only_bind_into](config)) and + exists(state) and + exists(returnAp) and + exists(ap) + } + + private predicate throughFlowNodeCand(NodeEx node, Configuration config) { + revFlow(node, true, config) and + fwdFlow(node, true, config) and + not inBarrier(node, config) and + not outBarrier(node, config) + } + + /** Holds if flow may return from `callable`. */ + pragma[nomagic] + private predicate returnFlowCallableNodeCand( + DataFlowCallable callable, ReturnKindExt kind, Configuration config + ) { + exists(RetNodeEx ret | + throughFlowNodeCand(ret, config) and + callable = ret.getEnclosingCallable() and + kind = ret.getKind() + ) + } + + /** + * Holds if flow may enter through `p` and reach a return node making `p` a + * candidate for the origin of a summary. + */ + pragma[nomagic] + predicate parameterMayFlowThrough(ParamNodeEx p, DataFlowCallable c, Ap ap, Configuration config) { + exists(ReturnKindExt kind | + throughFlowNodeCand(p, config) and + returnFlowCallableNodeCand(c, kind, config) and + p.getEnclosingCallable() = c and + exists(ap) and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = p.getPosition() + or + p.allowParameterReturnInSelf() + ) + ) + } + + pragma[nomagic] + predicate callMayFlowThroughRev(DataFlowCall call, Configuration config) { + exists(ArgNodeEx arg, boolean toReturn | + revFlow(arg, toReturn, config) and + revFlowInToReturn(call, arg, config) and + revFlowIsReturned(call, toReturn, config) + ) + } + + predicate stats( + boolean fwd, int nodes, int fields, int conscand, int states, int tuples, Configuration config + ) { + fwd = true and + nodes = count(NodeEx node | fwdFlow(node, config)) and + fields = count(Content f0 | fwdFlowConsCand(f0, config)) and + conscand = -1 and + states = count(FlowState state | fwdFlowState(state, config)) and + tuples = count(NodeEx n, boolean b | fwdFlow(n, b, config)) + or + fwd = false and + nodes = count(NodeEx node | revFlow(node, _, config)) and + fields = count(Content f0 | revFlowConsCand(f0, config)) and + conscand = -1 and + states = count(FlowState state | revFlowState(state, config)) and + tuples = count(NodeEx n, boolean b | revFlow(n, b, config)) + } + /* End: Stage 1 logic. */ +} + +pragma[noinline] +private predicate localFlowStepNodeCand1(NodeEx node1, NodeEx node2, Configuration config) { + Stage1::revFlow(node2, config) and + localFlowStep(node1, node2, config) +} + +pragma[noinline] +private predicate additionalLocalFlowStepNodeCand1(NodeEx node1, NodeEx node2, Configuration config) { + Stage1::revFlow(node2, config) and + additionalLocalFlowStep(node1, node2, config) +} + +pragma[nomagic] +private predicate viableReturnPosOutNodeCand1( + DataFlowCall call, ReturnPosition pos, NodeEx out, Configuration config +) { + Stage1::revFlow(out, config) and + Stage1::viableReturnPosOutNodeCandFwd1(call, pos, out, config) +} + +/** + * Holds if data can flow out of `call` from `ret` to `out`, either + * through a `ReturnNode` or through an argument that has been mutated, and + * that this step is part of a path from a source to a sink. + */ +pragma[nomagic] +private predicate flowOutOfCallNodeCand1( + DataFlowCall call, RetNodeEx ret, NodeEx out, Configuration config +) { + viableReturnPosOutNodeCand1(call, ret.getReturnPosition(), out, config) and + Stage1::revFlow(ret, config) and + not outBarrier(ret, config) and + not inBarrier(out, config) +} + +pragma[nomagic] +private predicate viableParamArgNodeCand1( + DataFlowCall call, ParamNodeEx p, ArgNodeEx arg, Configuration config +) { + Stage1::viableParamArgNodeCandFwd1(call, p, arg, config) and + Stage1::revFlow(arg, config) +} + +/** + * Holds if data can flow into `call` and that this step is part of a + * path from a source to a sink. + */ +pragma[nomagic] +private predicate flowIntoCallNodeCand1( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, Configuration config +) { + viableParamArgNodeCand1(call, p, arg, config) and + Stage1::revFlow(p, config) and + not outBarrier(arg, config) and + not inBarrier(p, config) +} + +/** + * Gets the amount of forward branching on the origin of a cross-call path + * edge in the graph of paths between sources and sinks that ignores call + * contexts. + */ +private int branch(NodeEx n1, Configuration conf) { + result = + strictcount(NodeEx n | + flowOutOfCallNodeCand1(_, n1, n, conf) or flowIntoCallNodeCand1(_, n1, n, conf) + ) +} + +/** + * Gets the amount of backward branching on the target of a cross-call path + * edge in the graph of paths between sources and sinks that ignores call + * contexts. + */ +private int join(NodeEx n2, Configuration conf) { + result = + strictcount(NodeEx n | + flowOutOfCallNodeCand1(_, n, n2, conf) or flowIntoCallNodeCand1(_, n, n2, conf) + ) +} + +/** + * Holds if data can flow out of `call` from `ret` to `out`, either + * through a `ReturnNode` or through an argument that has been mutated, and + * that this step is part of a path from a source to a sink. The + * `allowsFieldFlow` flag indicates whether the branching is within the limit + * specified by the configuration. + */ +pragma[nomagic] +private predicate flowOutOfCallNodeCand1( + DataFlowCall call, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, Configuration config +) { + flowOutOfCallNodeCand1(call, ret, out, config) and + exists(int b, int j | + b = branch(ret, config) and + j = join(out, config) and + if b.minimum(j) <= config.fieldFlowBranchLimit() + then allowsFieldFlow = true + else allowsFieldFlow = false + ) +} + +/** + * Holds if data can flow into `call` and that this step is part of a + * path from a source to a sink. The `allowsFieldFlow` flag indicates whether + * the branching is within the limit specified by the configuration. + */ +pragma[nomagic] +private predicate flowIntoCallNodeCand1( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, Configuration config +) { + flowIntoCallNodeCand1(call, arg, p, config) and + exists(int b, int j | + b = branch(arg, config) and + j = join(p, config) and + if b.minimum(j) <= config.fieldFlowBranchLimit() + then allowsFieldFlow = true + else allowsFieldFlow = false + ) +} + +private module Stage2 { + module PrevStage = Stage1; + + class ApApprox = PrevStage::Ap; + + class Ap = boolean; + + class ApNil extends Ap { + ApNil() { this = false } + } + + bindingset[result, ap] + private ApApprox getApprox(Ap ap) { any() } + + private ApNil getApNil(NodeEx node) { PrevStage::revFlow(node, _) and exists(result) } + + bindingset[tc, tail] + private Ap apCons(TypedContent tc, Ap tail) { result = true and exists(tc) and exists(tail) } + + pragma[inline] + private Content getHeadContent(Ap ap) { exists(result) and ap = true } + + class ApOption = BooleanOption; + + ApOption apNone() { result = TBooleanNone() } + + ApOption apSome(Ap ap) { result = TBooleanSome(ap) } + + class Cc = CallContext; + + class CcCall = CallContextCall; + + class CcNoCall = CallContextNoCall; + + Cc ccNone() { result instanceof CallContextAny } + + CcCall ccSomeCall() { result instanceof CallContextSomeCall } + + private class LocalCc = Unit; + + bindingset[call, c, outercc] + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } + + bindingset[call, c, innercc] + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } + + bindingset[node, cc] + private LocalCc getLocalCc(NodeEx node, Cc cc) { any() } + + bindingset[node1, state1, config] + bindingset[node2, state2, config] + private predicate localStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + ApNil ap, Configuration config, LocalCc lcc + ) { + ( + preservesValue = true and + localFlowStepNodeCand1(node1, node2, config) and + state1 = state2 + or + preservesValue = false and + additionalLocalFlowStepNodeCand1(node1, node2, config) and + state1 = state2 + or + preservesValue = false and + additionalLocalStateStep(node1, state1, node2, state2, config) + ) and + exists(ap) and + exists(lcc) + } + + private predicate flowOutOfCall = flowOutOfCallNodeCand1/5; + + private predicate flowIntoCall = flowIntoCallNodeCand1/5; + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + + bindingset[node, state, ap, config] + private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { + PrevStage::revFlowState(state, pragma[only_bind_into](config)) and + exists(ap) and + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) + } + + bindingset[ap, contentType] + private predicate typecheckStore(Ap ap, DataFlowType contentType) { any() } + + /* Begin: Stage 2 logic. */ + bindingset[node, state, config] + private predicate flowCand(NodeEx node, FlowState state, ApApprox apa, Configuration config) { + PrevStage::revFlow(node, state, _, _, apa, config) + } + + bindingset[result, apa] + private ApApprox unbindApa(ApApprox apa) { + pragma[only_bind_out](apa) = pragma[only_bind_out](result) + } + + pragma[nomagic] + private predicate flowThroughOutOfCall( + DataFlowCall call, CcCall ccc, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, + Configuration config + ) { + flowOutOfCall(call, ret, out, allowsFieldFlow, pragma[only_bind_into](config)) and + PrevStage::callMayFlowThroughRev(call, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(_, ret.getEnclosingCallable(), _, + pragma[only_bind_into](config)) and + ccc.matchesCall(call) + } + + /** + * Holds if `node` is reachable with access path `ap` from a source in the + * configuration `config`. + * + * The call context `cc` records whether the node is reached through an + * argument in a call, and if so, `argAp` records the access path of that + * argument. + */ + pragma[nomagic] + predicate fwdFlow(NodeEx node, FlowState state, Cc cc, ApOption argAp, Ap ap, Configuration config) { + fwdFlow0(node, state, cc, argAp, ap, config) and + flowCand(node, state, unbindApa(getApprox(ap)), config) and + filter(node, state, ap, config) + } + + pragma[nomagic] + private predicate fwdFlow0( + NodeEx node, FlowState state, Cc cc, ApOption argAp, Ap ap, Configuration config + ) { + sourceNode(node, state, config) and + (if hasSourceCallCtx(config) then cc = ccSomeCall() else cc = ccNone()) and + argAp = apNone() and + ap = getApNil(node) + or + exists(NodeEx mid, FlowState state0, Ap ap0, LocalCc localCc | + fwdFlow(mid, state0, cc, argAp, ap0, config) and + localCc = getLocalCc(mid, cc) + | + localStep(mid, state0, node, state, true, _, config, localCc) and + ap = ap0 + or + localStep(mid, state0, node, state, false, ap, config, localCc) and + ap0 instanceof ApNil + ) + or + exists(NodeEx mid | + fwdFlow(mid, pragma[only_bind_into](state), _, _, ap, pragma[only_bind_into](config)) and + jumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(mid, state, _, _, nil, pragma[only_bind_into](config)) and + additionalJumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() and + ap = getApNil(node) + ) + or + exists(NodeEx mid, FlowState state0, ApNil nil | + fwdFlow(mid, state0, _, _, nil, pragma[only_bind_into](config)) and + additionalJumpStateStep(mid, state0, node, state, config) and + cc = ccNone() and + argAp = apNone() and + ap = getApNil(node) + ) + or + // store + exists(TypedContent tc, Ap ap0 | + fwdFlowStore(_, ap0, tc, node, state, cc, argAp, config) and + ap = apCons(tc, ap0) + ) + or + // read + exists(Ap ap0, Content c | + fwdFlowRead(ap0, c, _, node, state, cc, argAp, config) and + fwdFlowConsCand(ap0, c, ap, config) + ) + or + // flow into a callable + exists(ApApprox apa | + fwdFlowIn(_, node, state, _, cc, _, ap, config) and + apa = getApprox(ap) and + if PrevStage::parameterMayFlowThrough(node, _, apa, config) + then argAp = apSome(ap) + else argAp = apNone() + ) + or + // flow out of a callable + fwdFlowOutNotFromArg(node, state, cc, argAp, ap, config) + or + exists(DataFlowCall call, Ap argAp0 | + fwdFlowOutFromArg(call, node, state, argAp0, ap, config) and + fwdFlowIsEntered(call, cc, argAp, argAp0, config) + ) + } + + pragma[nomagic] + private predicate fwdFlowStore( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, FlowState state, Cc cc, ApOption argAp, + Configuration config + ) { + exists(DataFlowType contentType | + fwdFlow(node1, state, cc, argAp, ap1, config) and + PrevStage::storeStepCand(node1, unbindApa(getApprox(ap1)), tc, node2, contentType, config) and + typecheckStore(ap1, contentType) + ) + } + + /** + * Holds if forward flow with access path `tail` reaches a store of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate fwdFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(TypedContent tc | + fwdFlowStore(_, tail, tc, _, _, _, _, config) and + tc.getContent() = c and + cons = apCons(tc, tail) + ) + } + + pragma[nomagic] + private predicate fwdFlowRead( + Ap ap, Content c, NodeEx node1, NodeEx node2, FlowState state, Cc cc, ApOption argAp, + Configuration config + ) { + fwdFlow(node1, state, cc, argAp, ap, config) and + PrevStage::readStepCand(node1, c, node2, config) and + getHeadContent(ap) = c + } + + pragma[nomagic] + private predicate fwdFlowIn( + DataFlowCall call, ParamNodeEx p, FlowState state, Cc outercc, Cc innercc, ApOption argAp, + Ap ap, Configuration config + ) { + exists(ArgNodeEx arg, boolean allowsFieldFlow | + fwdFlow(arg, state, outercc, argAp, ap, config) and + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + innercc = getCallContextCall(call, p.getEnclosingCallable(), outercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutNotFromArg( + NodeEx out, FlowState state, Cc ccOut, ApOption argAp, Ap ap, Configuration config + ) { + exists( + DataFlowCall call, RetNodeEx ret, boolean allowsFieldFlow, CcNoCall innercc, + DataFlowCallable inner + | + fwdFlow(ret, state, innercc, argAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + inner = ret.getEnclosingCallable() and + ccOut = getCallContextReturn(inner, call, innercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutFromArg( + DataFlowCall call, NodeEx out, FlowState state, Ap argAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, boolean allowsFieldFlow, CcCall ccc | + fwdFlow(ret, state, ccc, apSome(argAp), ap, config) and + flowThroughOutOfCall(call, ccc, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an argument to `call` is reached in the flow covered by `fwdFlow` + * and data might flow through the target callable and back out at `call`. + */ + pragma[nomagic] + private predicate fwdFlowIsEntered( + DataFlowCall call, Cc cc, ApOption argAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p | + fwdFlowIn(call, p, _, cc, _, argAp, ap, config) and + PrevStage::parameterMayFlowThrough(p, _, unbindApa(getApprox(ap)), config) + ) + } + + pragma[nomagic] + private predicate storeStepFwd( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Ap ap2, Configuration config + ) { + fwdFlowStore(node1, ap1, tc, node2, _, _, _, config) and + ap2 = apCons(tc, ap1) and + fwdFlowRead(ap2, tc.getContent(), _, _, _, _, _, config) + } + + private predicate readStepFwd( + NodeEx n1, Ap ap1, Content c, NodeEx n2, Ap ap2, Configuration config + ) { + fwdFlowRead(ap1, c, n1, n2, _, _, _, config) and + fwdFlowConsCand(ap1, c, ap2, config) + } + + pragma[nomagic] + private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { + exists(Ap argAp0, NodeEx out, FlowState state, Cc cc, ApOption argAp, Ap ap | + fwdFlow(out, state, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, + pragma[only_bind_into](config)) and + fwdFlowOutFromArg(call, out, state, argAp0, ap, config) and + fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc), + pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0), + pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate flowThroughIntoCall( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, Configuration config + ) { + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + fwdFlow(arg, _, _, _, _, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(p, _, _, pragma[only_bind_into](config)) and + callMayFlowThroughFwd(call, pragma[only_bind_into](config)) + } + + pragma[nomagic] + private predicate returnNodeMayFlowThrough( + RetNodeEx ret, FlowState state, Ap ap, Configuration config + ) { + fwdFlow(ret, state, any(CcCall ccc), apSome(_), ap, config) + } + + /** + * Holds if `node` with access path `ap` is part of a path from a source to a + * sink in the configuration `config`. + * + * The Boolean `toReturn` records whether the node must be returned from the + * enclosing callable in order to reach a sink, and if so, `returnAp` records + * the access path of the returned value. + */ + pragma[nomagic] + predicate revFlow( + NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + revFlow0(node, state, toReturn, returnAp, ap, config) and + fwdFlow(node, state, _, _, ap, config) + } + + pragma[nomagic] + private predicate revFlow0( + NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + fwdFlow(node, state, _, _, ap, config) and + sinkNode(node, state, config) and + (if hasSinkCallCtx(config) then toReturn = true else toReturn = false) and + returnAp = apNone() and + ap instanceof ApNil + or + exists(NodeEx mid, FlowState state0 | + localStep(node, state, mid, state0, true, _, config, _) and + revFlow(mid, state0, toReturn, returnAp, ap, config) + ) + or + exists(NodeEx mid, FlowState state0, ApNil nil | + fwdFlow(node, pragma[only_bind_into](state), _, _, ap, pragma[only_bind_into](config)) and + localStep(node, pragma[only_bind_into](state), mid, state0, false, _, config, _) and + revFlow(mid, state0, toReturn, returnAp, nil, pragma[only_bind_into](config)) and + ap instanceof ApNil + ) + or + exists(NodeEx mid | + jumpStep(node, mid, config) and + revFlow(mid, state, _, _, ap, config) and + toReturn = false and + returnAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, _, ap, pragma[only_bind_into](config)) and + additionalJumpStep(node, mid, config) and + revFlow(pragma[only_bind_into](mid), state, _, _, nil, pragma[only_bind_into](config)) and + toReturn = false and + returnAp = apNone() and + ap instanceof ApNil + ) + or + exists(NodeEx mid, FlowState state0, ApNil nil | + fwdFlow(node, _, _, _, ap, pragma[only_bind_into](config)) and + additionalJumpStateStep(node, state, mid, state0, config) and + revFlow(pragma[only_bind_into](mid), pragma[only_bind_into](state0), _, _, nil, + pragma[only_bind_into](config)) and + toReturn = false and + returnAp = apNone() and + ap instanceof ApNil + ) + or + // store + exists(Ap ap0, Content c | + revFlowStore(ap0, c, ap, node, state, _, _, toReturn, returnAp, config) and + revFlowConsCand(ap0, c, ap, config) + ) + or + // read + exists(NodeEx mid, Ap ap0 | + revFlow(mid, state, toReturn, returnAp, ap0, config) and + readStepFwd(node, ap, _, mid, ap0, config) + ) + or + // flow into a callable + revFlowInNotToReturn(node, state, returnAp, ap, config) and + toReturn = false + or + exists(DataFlowCall call, Ap returnAp0 | + revFlowInToReturn(call, node, state, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + or + // flow out of a callable + revFlowOut(_, node, state, _, _, ap, config) and + toReturn = true and + if returnNodeMayFlowThrough(node, state, ap, config) + then returnAp = apSome(ap) + else returnAp = apNone() + } + + pragma[nomagic] + private predicate revFlowStore( + Ap ap0, Content c, Ap ap, NodeEx node, FlowState state, TypedContent tc, NodeEx mid, + boolean toReturn, ApOption returnAp, Configuration config + ) { + revFlow(mid, state, toReturn, returnAp, ap0, config) and + storeStepFwd(node, ap, tc, mid, ap0, config) and + tc.getContent() = c + } + + /** + * Holds if reverse flow with access path `tail` reaches a read of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate revFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(NodeEx mid, Ap tail0 | + revFlow(mid, _, _, _, tail, config) and + tail = pragma[only_bind_into](tail0) and + readStepFwd(_, cons, c, mid, tail0, config) + ) + } + + pragma[nomagic] + private predicate revFlowOut( + DataFlowCall call, RetNodeEx ret, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, + Configuration config + ) { + exists(NodeEx out, boolean allowsFieldFlow | + revFlow(out, state, toReturn, returnAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInNotToReturn( + ArgNodeEx arg, FlowState state, ApOption returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, state, false, returnAp, ap, config) and + flowIntoCall(_, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInToReturn( + DataFlowCall call, ArgNodeEx arg, FlowState state, Ap returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, state, true, apSome(returnAp), ap, config) and + flowThroughIntoCall(call, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an output from `call` is reached in the flow covered by `revFlow` + * and data might flow through the target callable resulting in reverse flow + * reaching an argument of `call`. + */ + pragma[nomagic] + private predicate revFlowIsReturned( + DataFlowCall call, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, FlowState state, CcCall ccc | + revFlowOut(call, ret, state, toReturn, returnAp, ap, config) and + fwdFlow(ret, state, ccc, apSome(_), ap, config) and + ccc.matchesCall(call) + ) + } + + pragma[nomagic] + predicate storeStepCand( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, DataFlowType contentType, + Configuration config + ) { + exists(Ap ap2, Content c | + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and + revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and + revFlowConsCand(ap2, c, ap1, config) + ) + } + + predicate readStepCand(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(Ap ap1, Ap ap2 | + revFlow(node2, _, _, _, pragma[only_bind_into](ap2), pragma[only_bind_into](config)) and + readStepFwd(node1, ap1, c, node2, ap2, config) and + revFlowStore(ap1, c, pragma[only_bind_into](ap2), _, _, _, _, _, _, + pragma[only_bind_into](config)) + ) + } + + predicate revFlow(NodeEx node, FlowState state, Configuration config) { + revFlow(node, state, _, _, _, config) + } + + pragma[nomagic] + predicate revFlow(NodeEx node, Configuration config) { revFlow(node, _, _, _, _, config) } + + // use an alias as a workaround for bad functionality-induced joins + pragma[nomagic] + predicate revFlowAlias(NodeEx node, Configuration config) { revFlow(node, _, _, _, _, config) } + + // use an alias as a workaround for bad functionality-induced joins + pragma[nomagic] + predicate revFlowAlias( + NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + revFlow(node, state, toReturn, returnAp, ap, config) + } + + private predicate fwdConsCand(TypedContent tc, Ap ap, Configuration config) { + storeStepFwd(_, ap, tc, _, _, config) + } + + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { + storeStepCand(_, ap, tc, _, _, config) + } + + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + + pragma[noinline] + private predicate parameterFlow( + ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config + ) { + revFlow(p, _, true, apSome(ap0), ap, config) and + c = p.getEnclosingCallable() + } + + predicate parameterMayFlowThrough(ParamNodeEx p, DataFlowCallable c, Ap ap, Configuration config) { + exists(RetNodeEx ret, FlowState state, Ap ap0, ReturnKindExt kind, ParameterPosition pos | + parameterFlow(p, ap, ap0, c, config) and + c = ret.getEnclosingCallable() and + revFlow(pragma[only_bind_into](ret), pragma[only_bind_into](state), true, apSome(_), + pragma[only_bind_into](ap0), pragma[only_bind_into](config)) and + fwdFlow(ret, state, any(CcCall ccc), apSome(ap), ap0, config) and + kind = ret.getKind() and + p.getPosition() = pos and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = pos + or + p.allowParameterReturnInSelf() + ) + ) + } + + pragma[nomagic] + predicate callMayFlowThroughRev(DataFlowCall call, Configuration config) { + exists( + Ap returnAp0, ArgNodeEx arg, FlowState state, boolean toReturn, ApOption returnAp, Ap ap + | + revFlow(arg, state, toReturn, returnAp, ap, config) and + revFlowInToReturn(call, arg, state, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + } + + predicate stats( + boolean fwd, int nodes, int fields, int conscand, int states, int tuples, Configuration config + ) { + fwd = true and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, config)) and + fields = count(TypedContent f0 | fwdConsCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | fwdConsCand(f0, ap, config)) and + states = count(FlowState state | fwdFlow(_, state, _, _, _, config)) and + tuples = + count(NodeEx n, FlowState state, Cc cc, ApOption argAp, Ap ap | + fwdFlow(n, state, cc, argAp, ap, config) + ) + or + fwd = false and + nodes = count(NodeEx node | revFlow(node, _, _, _, _, config)) and + fields = count(TypedContent f0 | consCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | consCand(f0, ap, config)) and + states = count(FlowState state | revFlow(_, state, _, _, _, config)) and + tuples = + count(NodeEx n, FlowState state, boolean b, ApOption retAp, Ap ap | + revFlow(n, state, b, retAp, ap, config) + ) + } + /* End: Stage 2 logic. */ +} + +pragma[nomagic] +private predicate flowOutOfCallNodeCand2( + DataFlowCall call, RetNodeEx node1, NodeEx node2, boolean allowsFieldFlow, Configuration config +) { + flowOutOfCallNodeCand1(call, node1, node2, allowsFieldFlow, config) and + Stage2::revFlow(node2, pragma[only_bind_into](config)) and + Stage2::revFlowAlias(node1, pragma[only_bind_into](config)) +} + +pragma[nomagic] +private predicate flowIntoCallNodeCand2( + DataFlowCall call, ArgNodeEx node1, ParamNodeEx node2, boolean allowsFieldFlow, + Configuration config +) { + flowIntoCallNodeCand1(call, node1, node2, allowsFieldFlow, config) and + Stage2::revFlow(node2, pragma[only_bind_into](config)) and + Stage2::revFlowAlias(node1, pragma[only_bind_into](config)) +} + +private module LocalFlowBigStep { + /** + * A node where some checking is required, and hence the big-step relation + * is not allowed to step over. + */ + private class FlowCheckNode extends NodeEx { + FlowCheckNode() { + castNode(this.asNode()) or + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) + } + } + + /** + * Holds if `node` can be the first node in a maximal subsequence of local + * flow steps in a dataflow path. + */ + private predicate localFlowEntry(NodeEx node, FlowState state, Configuration config) { + Stage2::revFlow(node, state, config) and + ( + sourceNode(node, state, config) + or + jumpStep(_, node, config) + or + additionalJumpStep(_, node, config) + or + additionalJumpStateStep(_, _, node, state, config) + or + node instanceof ParamNodeEx + or + node.asNode() instanceof OutNodeExt + or + Stage2::storeStepCand(_, _, _, node, _, config) + or + Stage2::readStepCand(_, _, node, config) + or + node instanceof FlowCheckNode + or + exists(FlowState s | + additionalLocalStateStep(_, s, node, state, config) and + s != state + ) + ) + } + + /** + * Holds if `node` can be the last node in a maximal subsequence of local + * flow steps in a dataflow path. + */ + private predicate localFlowExit(NodeEx node, FlowState state, Configuration config) { + exists(NodeEx next | Stage2::revFlow(next, state, config) | + jumpStep(node, next, config) or + additionalJumpStep(node, next, config) or + flowIntoCallNodeCand1(_, node, next, config) or + flowOutOfCallNodeCand1(_, node, next, config) or + Stage2::storeStepCand(node, _, _, next, _, config) or + Stage2::readStepCand(node, _, next, config) + ) + or + exists(NodeEx next, FlowState s | Stage2::revFlow(next, s, config) | + additionalJumpStateStep(node, state, next, s, config) + or + additionalLocalStateStep(node, state, next, s, config) and + s != state + ) + or + Stage2::revFlow(node, state, config) and + node instanceof FlowCheckNode + or + sinkNode(node, state, config) + } + + pragma[noinline] + private predicate additionalLocalFlowStepNodeCand2( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, Configuration config + ) { + additionalLocalFlowStepNodeCand1(node1, node2, config) and + state1 = state2 and + Stage2::revFlow(node1, pragma[only_bind_into](state1), _, _, false, + pragma[only_bind_into](config)) and + Stage2::revFlowAlias(node2, pragma[only_bind_into](state2), _, _, false, + pragma[only_bind_into](config)) + or + additionalLocalStateStep(node1, state1, node2, state2, config) and + Stage2::revFlow(node1, state1, _, _, false, pragma[only_bind_into](config)) and + Stage2::revFlowAlias(node2, state2, _, _, false, pragma[only_bind_into](config)) + } + + /** + * Holds if the local path from `node1` to `node2` is a prefix of a maximal + * subsequence of local flow steps in a dataflow path. + * + * This is the transitive closure of `[additional]localFlowStep` beginning + * at `localFlowEntry`. + */ + pragma[nomagic] + private predicate localFlowStepPlus( + NodeEx node1, FlowState state, NodeEx node2, boolean preservesValue, DataFlowType t, + Configuration config, LocalCallContext cc + ) { + not isUnreachableInCallCached(node2.asNode(), cc.(LocalCallContextSpecificCall).getCall()) and + ( + localFlowEntry(node1, pragma[only_bind_into](state), pragma[only_bind_into](config)) and + ( + localFlowStepNodeCand1(node1, node2, config) and + preservesValue = true and + t = node1.getDataFlowType() and // irrelevant dummy value + Stage2::revFlow(node2, pragma[only_bind_into](state), pragma[only_bind_into](config)) + or + additionalLocalFlowStepNodeCand2(node1, state, node2, state, config) and + preservesValue = false and + t = node2.getDataFlowType() + ) and + node1 != node2 and + cc.relevantFor(node1.getEnclosingCallable()) and + not isUnreachableInCallCached(node1.asNode(), cc.(LocalCallContextSpecificCall).getCall()) + or + exists(NodeEx mid | + localFlowStepPlus(node1, pragma[only_bind_into](state), mid, preservesValue, t, + pragma[only_bind_into](config), cc) and + localFlowStepNodeCand1(mid, node2, config) and + not mid instanceof FlowCheckNode and + Stage2::revFlow(node2, pragma[only_bind_into](state), pragma[only_bind_into](config)) + ) + or + exists(NodeEx mid | + localFlowStepPlus(node1, state, mid, _, _, pragma[only_bind_into](config), cc) and + additionalLocalFlowStepNodeCand2(mid, state, node2, state, config) and + not mid instanceof FlowCheckNode and + preservesValue = false and + t = node2.getDataFlowType() + ) + ) + } + + /** + * Holds if `node1` can step to `node2` in one or more local steps and this + * path can occur as a maximal subsequence of local steps in a dataflow path. + */ + pragma[nomagic] + predicate localFlowBigStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + AccessPathFrontNil apf, Configuration config, LocalCallContext callContext + ) { + localFlowStepPlus(node1, state1, node2, preservesValue, apf.getType(), config, callContext) and + localFlowExit(node2, state1, config) and + state1 = state2 + or + additionalLocalFlowStepNodeCand2(node1, state1, node2, state2, config) and + state1 != state2 and + preservesValue = false and + apf = TFrontNil(node2.getDataFlowType()) and + callContext.relevantFor(node1.getEnclosingCallable()) and + not exists(DataFlowCall call | call = callContext.(LocalCallContextSpecificCall).getCall() | + isUnreachableInCallCached(node1.asNode(), call) or + isUnreachableInCallCached(node2.asNode(), call) + ) + } +} + +private import LocalFlowBigStep + +private module Stage3 { + module PrevStage = Stage2; + + class ApApprox = PrevStage::Ap; + + class Ap = AccessPathFront; + + class ApNil = AccessPathFrontNil; + + private ApApprox getApprox(Ap ap) { result = ap.toBoolNonEmpty() } + + private ApNil getApNil(NodeEx node) { + PrevStage::revFlow(node, _) and result = TFrontNil(node.getDataFlowType()) + } + + bindingset[tc, tail] + private Ap apCons(TypedContent tc, Ap tail) { result.getHead() = tc and exists(tail) } + + pragma[noinline] + private Content getHeadContent(Ap ap) { result = ap.getHead().getContent() } + + class ApOption = AccessPathFrontOption; + + ApOption apNone() { result = TAccessPathFrontNone() } + + ApOption apSome(Ap ap) { result = TAccessPathFrontSome(ap) } + + class Cc = boolean; + + class CcCall extends Cc { + CcCall() { this = true } + + /** Holds if this call context may be `call`. */ + predicate matchesCall(DataFlowCall call) { any() } + } + + class CcNoCall extends Cc { + CcNoCall() { this = false } + } + + Cc ccNone() { result = false } + + CcCall ccSomeCall() { result = true } + + private class LocalCc = Unit; + + bindingset[call, c, outercc] + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + + bindingset[call, c, innercc] + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + + bindingset[node, cc] + private LocalCc getLocalCc(NodeEx node, Cc cc) { any() } + + private predicate localStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + ApNil ap, Configuration config, LocalCc lcc + ) { + localFlowBigStep(node1, state1, node2, state2, preservesValue, ap, config, _) and exists(lcc) + } + + private predicate flowOutOfCall = flowOutOfCallNodeCand2/5; + + private predicate flowIntoCall = flowIntoCallNodeCand2/5; + + pragma[nomagic] + private predicate clearSet(NodeEx node, ContentSet c, Configuration config) { + PrevStage::revFlow(node, config) and + clearsContentCached(node.asNode(), c) + } + + pragma[nomagic] + private predicate clearContent(NodeEx node, Content c, Configuration config) { + exists(ContentSet cs | + PrevStage::readStepCand(_, pragma[only_bind_into](c), _, pragma[only_bind_into](config)) and + c = cs.getAReadContent() and + clearSet(node, cs, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap, Configuration config) { + clearContent(node, ap.getHead().getContent(), config) + } + + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + + pragma[nomagic] + private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } + + bindingset[node, state, ap, config] + private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { + exists(state) and + exists(config) and + not clear(node, ap, config) and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) + } + + bindingset[ap, contentType] + private predicate typecheckStore(Ap ap, DataFlowType contentType) { + // We need to typecheck stores here, since reverse flow through a getter + // might have a different type here compared to inside the getter. + compatibleTypes(ap.getType(), contentType) + } + + /* Begin: Stage 3 logic. */ + bindingset[node, state, config] + private predicate flowCand(NodeEx node, FlowState state, ApApprox apa, Configuration config) { + PrevStage::revFlow(node, state, _, _, apa, config) + } + + bindingset[result, apa] + private ApApprox unbindApa(ApApprox apa) { + pragma[only_bind_out](apa) = pragma[only_bind_out](result) + } + + pragma[nomagic] + private predicate flowThroughOutOfCall( + DataFlowCall call, CcCall ccc, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, + Configuration config + ) { + flowOutOfCall(call, ret, out, allowsFieldFlow, pragma[only_bind_into](config)) and + PrevStage::callMayFlowThroughRev(call, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(_, ret.getEnclosingCallable(), _, + pragma[only_bind_into](config)) and + ccc.matchesCall(call) + } + + /** + * Holds if `node` is reachable with access path `ap` from a source in the + * configuration `config`. + * + * The call context `cc` records whether the node is reached through an + * argument in a call, and if so, `argAp` records the access path of that + * argument. + */ + pragma[nomagic] + predicate fwdFlow(NodeEx node, FlowState state, Cc cc, ApOption argAp, Ap ap, Configuration config) { + fwdFlow0(node, state, cc, argAp, ap, config) and + flowCand(node, state, unbindApa(getApprox(ap)), config) and + filter(node, state, ap, config) + } + + pragma[nomagic] + private predicate fwdFlow0( + NodeEx node, FlowState state, Cc cc, ApOption argAp, Ap ap, Configuration config + ) { + sourceNode(node, state, config) and + (if hasSourceCallCtx(config) then cc = ccSomeCall() else cc = ccNone()) and + argAp = apNone() and + ap = getApNil(node) + or + exists(NodeEx mid, FlowState state0, Ap ap0, LocalCc localCc | + fwdFlow(mid, state0, cc, argAp, ap0, config) and + localCc = getLocalCc(mid, cc) + | + localStep(mid, state0, node, state, true, _, config, localCc) and + ap = ap0 + or + localStep(mid, state0, node, state, false, ap, config, localCc) and + ap0 instanceof ApNil + ) + or + exists(NodeEx mid | + fwdFlow(mid, pragma[only_bind_into](state), _, _, ap, pragma[only_bind_into](config)) and + jumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(mid, state, _, _, nil, pragma[only_bind_into](config)) and + additionalJumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() and + ap = getApNil(node) + ) + or + exists(NodeEx mid, FlowState state0, ApNil nil | + fwdFlow(mid, state0, _, _, nil, pragma[only_bind_into](config)) and + additionalJumpStateStep(mid, state0, node, state, config) and + cc = ccNone() and + argAp = apNone() and + ap = getApNil(node) + ) + or + // store + exists(TypedContent tc, Ap ap0 | + fwdFlowStore(_, ap0, tc, node, state, cc, argAp, config) and + ap = apCons(tc, ap0) + ) + or + // read + exists(Ap ap0, Content c | + fwdFlowRead(ap0, c, _, node, state, cc, argAp, config) and + fwdFlowConsCand(ap0, c, ap, config) + ) + or + // flow into a callable + exists(ApApprox apa | + fwdFlowIn(_, node, state, _, cc, _, ap, config) and + apa = getApprox(ap) and + if PrevStage::parameterMayFlowThrough(node, _, apa, config) + then argAp = apSome(ap) + else argAp = apNone() + ) + or + // flow out of a callable + fwdFlowOutNotFromArg(node, state, cc, argAp, ap, config) + or + exists(DataFlowCall call, Ap argAp0 | + fwdFlowOutFromArg(call, node, state, argAp0, ap, config) and + fwdFlowIsEntered(call, cc, argAp, argAp0, config) + ) + } + + pragma[nomagic] + private predicate fwdFlowStore( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, FlowState state, Cc cc, ApOption argAp, + Configuration config + ) { + exists(DataFlowType contentType | + fwdFlow(node1, state, cc, argAp, ap1, config) and + PrevStage::storeStepCand(node1, unbindApa(getApprox(ap1)), tc, node2, contentType, config) and + typecheckStore(ap1, contentType) + ) + } + + /** + * Holds if forward flow with access path `tail` reaches a store of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate fwdFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(TypedContent tc | + fwdFlowStore(_, tail, tc, _, _, _, _, config) and + tc.getContent() = c and + cons = apCons(tc, tail) + ) + } + + pragma[nomagic] + private predicate fwdFlowRead( + Ap ap, Content c, NodeEx node1, NodeEx node2, FlowState state, Cc cc, ApOption argAp, + Configuration config + ) { + fwdFlow(node1, state, cc, argAp, ap, config) and + PrevStage::readStepCand(node1, c, node2, config) and + getHeadContent(ap) = c + } + + pragma[nomagic] + private predicate fwdFlowIn( + DataFlowCall call, ParamNodeEx p, FlowState state, Cc outercc, Cc innercc, ApOption argAp, + Ap ap, Configuration config + ) { + exists(ArgNodeEx arg, boolean allowsFieldFlow | + fwdFlow(arg, state, outercc, argAp, ap, config) and + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + innercc = getCallContextCall(call, p.getEnclosingCallable(), outercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutNotFromArg( + NodeEx out, FlowState state, Cc ccOut, ApOption argAp, Ap ap, Configuration config + ) { + exists( + DataFlowCall call, RetNodeEx ret, boolean allowsFieldFlow, CcNoCall innercc, + DataFlowCallable inner + | + fwdFlow(ret, state, innercc, argAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + inner = ret.getEnclosingCallable() and + ccOut = getCallContextReturn(inner, call, innercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutFromArg( + DataFlowCall call, NodeEx out, FlowState state, Ap argAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, boolean allowsFieldFlow, CcCall ccc | + fwdFlow(ret, state, ccc, apSome(argAp), ap, config) and + flowThroughOutOfCall(call, ccc, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an argument to `call` is reached in the flow covered by `fwdFlow` + * and data might flow through the target callable and back out at `call`. + */ + pragma[nomagic] + private predicate fwdFlowIsEntered( + DataFlowCall call, Cc cc, ApOption argAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p | + fwdFlowIn(call, p, _, cc, _, argAp, ap, config) and + PrevStage::parameterMayFlowThrough(p, _, unbindApa(getApprox(ap)), config) + ) + } + + pragma[nomagic] + private predicate storeStepFwd( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Ap ap2, Configuration config + ) { + fwdFlowStore(node1, ap1, tc, node2, _, _, _, config) and + ap2 = apCons(tc, ap1) and + fwdFlowRead(ap2, tc.getContent(), _, _, _, _, _, config) + } + + private predicate readStepFwd( + NodeEx n1, Ap ap1, Content c, NodeEx n2, Ap ap2, Configuration config + ) { + fwdFlowRead(ap1, c, n1, n2, _, _, _, config) and + fwdFlowConsCand(ap1, c, ap2, config) + } + + pragma[nomagic] + private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { + exists(Ap argAp0, NodeEx out, FlowState state, Cc cc, ApOption argAp, Ap ap | + fwdFlow(out, state, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, + pragma[only_bind_into](config)) and + fwdFlowOutFromArg(call, out, state, argAp0, ap, config) and + fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc), + pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0), + pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate flowThroughIntoCall( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, Configuration config + ) { + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + fwdFlow(arg, _, _, _, _, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(p, _, _, pragma[only_bind_into](config)) and + callMayFlowThroughFwd(call, pragma[only_bind_into](config)) + } + + pragma[nomagic] + private predicate returnNodeMayFlowThrough( + RetNodeEx ret, FlowState state, Ap ap, Configuration config + ) { + fwdFlow(ret, state, any(CcCall ccc), apSome(_), ap, config) + } + + /** + * Holds if `node` with access path `ap` is part of a path from a source to a + * sink in the configuration `config`. + * + * The Boolean `toReturn` records whether the node must be returned from the + * enclosing callable in order to reach a sink, and if so, `returnAp` records + * the access path of the returned value. + */ + pragma[nomagic] + predicate revFlow( + NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + revFlow0(node, state, toReturn, returnAp, ap, config) and + fwdFlow(node, state, _, _, ap, config) + } + + pragma[nomagic] + private predicate revFlow0( + NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + fwdFlow(node, state, _, _, ap, config) and + sinkNode(node, state, config) and + (if hasSinkCallCtx(config) then toReturn = true else toReturn = false) and + returnAp = apNone() and + ap instanceof ApNil + or + exists(NodeEx mid, FlowState state0 | + localStep(node, state, mid, state0, true, _, config, _) and + revFlow(mid, state0, toReturn, returnAp, ap, config) + ) + or + exists(NodeEx mid, FlowState state0, ApNil nil | + fwdFlow(node, pragma[only_bind_into](state), _, _, ap, pragma[only_bind_into](config)) and + localStep(node, pragma[only_bind_into](state), mid, state0, false, _, config, _) and + revFlow(mid, state0, toReturn, returnAp, nil, pragma[only_bind_into](config)) and + ap instanceof ApNil + ) + or + exists(NodeEx mid | + jumpStep(node, mid, config) and + revFlow(mid, state, _, _, ap, config) and + toReturn = false and + returnAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, _, ap, pragma[only_bind_into](config)) and + additionalJumpStep(node, mid, config) and + revFlow(pragma[only_bind_into](mid), state, _, _, nil, pragma[only_bind_into](config)) and + toReturn = false and + returnAp = apNone() and + ap instanceof ApNil + ) + or + exists(NodeEx mid, FlowState state0, ApNil nil | + fwdFlow(node, _, _, _, ap, pragma[only_bind_into](config)) and + additionalJumpStateStep(node, state, mid, state0, config) and + revFlow(pragma[only_bind_into](mid), pragma[only_bind_into](state0), _, _, nil, + pragma[only_bind_into](config)) and + toReturn = false and + returnAp = apNone() and + ap instanceof ApNil + ) + or + // store + exists(Ap ap0, Content c | + revFlowStore(ap0, c, ap, node, state, _, _, toReturn, returnAp, config) and + revFlowConsCand(ap0, c, ap, config) + ) + or + // read + exists(NodeEx mid, Ap ap0 | + revFlow(mid, state, toReturn, returnAp, ap0, config) and + readStepFwd(node, ap, _, mid, ap0, config) + ) + or + // flow into a callable + revFlowInNotToReturn(node, state, returnAp, ap, config) and + toReturn = false + or + exists(DataFlowCall call, Ap returnAp0 | + revFlowInToReturn(call, node, state, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + or + // flow out of a callable + revFlowOut(_, node, state, _, _, ap, config) and + toReturn = true and + if returnNodeMayFlowThrough(node, state, ap, config) + then returnAp = apSome(ap) + else returnAp = apNone() + } + + pragma[nomagic] + private predicate revFlowStore( + Ap ap0, Content c, Ap ap, NodeEx node, FlowState state, TypedContent tc, NodeEx mid, + boolean toReturn, ApOption returnAp, Configuration config + ) { + revFlow(mid, state, toReturn, returnAp, ap0, config) and + storeStepFwd(node, ap, tc, mid, ap0, config) and + tc.getContent() = c + } + + /** + * Holds if reverse flow with access path `tail` reaches a read of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate revFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(NodeEx mid, Ap tail0 | + revFlow(mid, _, _, _, tail, config) and + tail = pragma[only_bind_into](tail0) and + readStepFwd(_, cons, c, mid, tail0, config) + ) + } + + pragma[nomagic] + private predicate revFlowOut( + DataFlowCall call, RetNodeEx ret, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, + Configuration config + ) { + exists(NodeEx out, boolean allowsFieldFlow | + revFlow(out, state, toReturn, returnAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInNotToReturn( + ArgNodeEx arg, FlowState state, ApOption returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, state, false, returnAp, ap, config) and + flowIntoCall(_, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInToReturn( + DataFlowCall call, ArgNodeEx arg, FlowState state, Ap returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, state, true, apSome(returnAp), ap, config) and + flowThroughIntoCall(call, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an output from `call` is reached in the flow covered by `revFlow` + * and data might flow through the target callable resulting in reverse flow + * reaching an argument of `call`. + */ + pragma[nomagic] + private predicate revFlowIsReturned( + DataFlowCall call, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, FlowState state, CcCall ccc | + revFlowOut(call, ret, state, toReturn, returnAp, ap, config) and + fwdFlow(ret, state, ccc, apSome(_), ap, config) and + ccc.matchesCall(call) + ) + } + + pragma[nomagic] + predicate storeStepCand( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, DataFlowType contentType, + Configuration config + ) { + exists(Ap ap2, Content c | + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and + revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and + revFlowConsCand(ap2, c, ap1, config) + ) + } + + predicate readStepCand(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(Ap ap1, Ap ap2 | + revFlow(node2, _, _, _, pragma[only_bind_into](ap2), pragma[only_bind_into](config)) and + readStepFwd(node1, ap1, c, node2, ap2, config) and + revFlowStore(ap1, c, pragma[only_bind_into](ap2), _, _, _, _, _, _, + pragma[only_bind_into](config)) + ) + } + + predicate revFlow(NodeEx node, FlowState state, Configuration config) { + revFlow(node, state, _, _, _, config) + } + + pragma[nomagic] + predicate revFlow(NodeEx node, Configuration config) { revFlow(node, _, _, _, _, config) } + + // use an alias as a workaround for bad functionality-induced joins + pragma[nomagic] + predicate revFlowAlias(NodeEx node, Configuration config) { revFlow(node, _, _, _, _, config) } + + // use an alias as a workaround for bad functionality-induced joins + pragma[nomagic] + predicate revFlowAlias( + NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + revFlow(node, state, toReturn, returnAp, ap, config) + } + + private predicate fwdConsCand(TypedContent tc, Ap ap, Configuration config) { + storeStepFwd(_, ap, tc, _, _, config) + } + + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { + storeStepCand(_, ap, tc, _, _, config) + } + + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + + pragma[noinline] + private predicate parameterFlow( + ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config + ) { + revFlow(p, _, true, apSome(ap0), ap, config) and + c = p.getEnclosingCallable() + } + + predicate parameterMayFlowThrough(ParamNodeEx p, DataFlowCallable c, Ap ap, Configuration config) { + exists(RetNodeEx ret, FlowState state, Ap ap0, ReturnKindExt kind, ParameterPosition pos | + parameterFlow(p, ap, ap0, c, config) and + c = ret.getEnclosingCallable() and + revFlow(pragma[only_bind_into](ret), pragma[only_bind_into](state), true, apSome(_), + pragma[only_bind_into](ap0), pragma[only_bind_into](config)) and + fwdFlow(ret, state, any(CcCall ccc), apSome(ap), ap0, config) and + kind = ret.getKind() and + p.getPosition() = pos and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = pos + or + p.allowParameterReturnInSelf() + ) + ) + } + + pragma[nomagic] + predicate callMayFlowThroughRev(DataFlowCall call, Configuration config) { + exists( + Ap returnAp0, ArgNodeEx arg, FlowState state, boolean toReturn, ApOption returnAp, Ap ap + | + revFlow(arg, state, toReturn, returnAp, ap, config) and + revFlowInToReturn(call, arg, state, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + } + + predicate stats( + boolean fwd, int nodes, int fields, int conscand, int states, int tuples, Configuration config + ) { + fwd = true and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, config)) and + fields = count(TypedContent f0 | fwdConsCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | fwdConsCand(f0, ap, config)) and + states = count(FlowState state | fwdFlow(_, state, _, _, _, config)) and + tuples = + count(NodeEx n, FlowState state, Cc cc, ApOption argAp, Ap ap | + fwdFlow(n, state, cc, argAp, ap, config) + ) + or + fwd = false and + nodes = count(NodeEx node | revFlow(node, _, _, _, _, config)) and + fields = count(TypedContent f0 | consCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | consCand(f0, ap, config)) and + states = count(FlowState state | revFlow(_, state, _, _, _, config)) and + tuples = + count(NodeEx n, FlowState state, boolean b, ApOption retAp, Ap ap | + revFlow(n, state, b, retAp, ap, config) + ) + } + /* End: Stage 3 logic. */ +} + +/** + * Holds if `argApf` is recorded as the summary context for flow reaching `node` + * and remains relevant for the following pruning stage. + */ +private predicate flowCandSummaryCtx( + NodeEx node, FlowState state, AccessPathFront argApf, Configuration config +) { + exists(AccessPathFront apf | + Stage3::revFlow(node, state, true, _, apf, config) and + Stage3::fwdFlow(node, state, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) + ) +} + +/** + * Holds if a length 2 access path approximation with the head `tc` is expected + * to be expensive. + */ +private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) { + exists(int tails, int nodes, int apLimit, int tupleLimit | + tails = strictcount(AccessPathFront apf | Stage3::consCand(tc, apf, config)) and + nodes = + strictcount(NodeEx n, FlowState state | + Stage3::revFlow(n, state, _, _, any(AccessPathFrontHead apf | apf.getHead() = tc), config) + or + flowCandSummaryCtx(n, state, any(AccessPathFrontHead apf | apf.getHead() = tc), config) + ) and + accessPathApproxCostLimits(apLimit, tupleLimit) and + apLimit < tails and + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() + ) +} + +private newtype TAccessPathApprox = + TNil(DataFlowType t) or + TConsNil(TypedContent tc, DataFlowType t) { + Stage3::consCand(tc, TFrontNil(t), _) and + not expensiveLen2unfolding(tc, _) + } or + TConsCons(TypedContent tc1, TypedContent tc2, int len) { + Stage3::consCand(tc1, TFrontHead(tc2), _) and + len in [2 .. accessPathLimit()] and + not expensiveLen2unfolding(tc1, _) + } or + TCons1(TypedContent tc, int len) { + len in [1 .. accessPathLimit()] and + expensiveLen2unfolding(tc, _) + } + +/** + * Conceptually a list of `TypedContent`s followed by a `DataFlowType`, but only + * the first two elements of the list and its length are tracked. If data flows + * from a source to a given node with a given `AccessPathApprox`, this indicates + * the sequence of dereference operations needed to get from the value in the node + * to the tracked object. The final type indicates the type of the tracked object. + */ +abstract private class AccessPathApprox extends TAccessPathApprox { + abstract string toString(); + + abstract TypedContent getHead(); + + abstract int len(); + + abstract DataFlowType getType(); + + abstract AccessPathFront getFront(); + + /** Gets the access path obtained by popping `head` from this path, if any. */ + abstract AccessPathApprox pop(TypedContent head); +} + +private class AccessPathApproxNil extends AccessPathApprox, TNil { + private DataFlowType t; + + AccessPathApproxNil() { this = TNil(t) } + + override string toString() { result = concat(": " + ppReprType(t)) } + + override TypedContent getHead() { none() } + + override int len() { result = 0 } + + override DataFlowType getType() { result = t } + + override AccessPathFront getFront() { result = TFrontNil(t) } + + override AccessPathApprox pop(TypedContent head) { none() } +} + +abstract private class AccessPathApproxCons extends AccessPathApprox { } + +private class AccessPathApproxConsNil extends AccessPathApproxCons, TConsNil { + private TypedContent tc; + private DataFlowType t; + + AccessPathApproxConsNil() { this = TConsNil(tc, t) } + + override string toString() { + // The `concat` becomes "" if `ppReprType` has no result. + result = "[" + tc.toString() + "]" + concat(" : " + ppReprType(t)) + } + + override TypedContent getHead() { result = tc } + + override int len() { result = 1 } + + override DataFlowType getType() { result = tc.getContainerType() } + + override AccessPathFront getFront() { result = TFrontHead(tc) } + + override AccessPathApprox pop(TypedContent head) { head = tc and result = TNil(t) } +} + +private class AccessPathApproxConsCons extends AccessPathApproxCons, TConsCons { + private TypedContent tc1; + private TypedContent tc2; + private int len; + + AccessPathApproxConsCons() { this = TConsCons(tc1, tc2, len) } + + override string toString() { + if len = 2 + then result = "[" + tc1.toString() + ", " + tc2.toString() + "]" + else result = "[" + tc1.toString() + ", " + tc2.toString() + ", ... (" + len.toString() + ")]" + } + + override TypedContent getHead() { result = tc1 } + + override int len() { result = len } + + override DataFlowType getType() { result = tc1.getContainerType() } + + override AccessPathFront getFront() { result = TFrontHead(tc1) } + + override AccessPathApprox pop(TypedContent head) { + head = tc1 and + ( + result = TConsCons(tc2, _, len - 1) + or + len = 2 and + result = TConsNil(tc2, _) + or + result = TCons1(tc2, len - 1) + ) + } +} + +private class AccessPathApproxCons1 extends AccessPathApproxCons, TCons1 { + private TypedContent tc; + private int len; + + AccessPathApproxCons1() { this = TCons1(tc, len) } + + override string toString() { + if len = 1 + then result = "[" + tc.toString() + "]" + else result = "[" + tc.toString() + ", ... (" + len.toString() + ")]" + } + + override TypedContent getHead() { result = tc } + + override int len() { result = len } + + override DataFlowType getType() { result = tc.getContainerType() } + + override AccessPathFront getFront() { result = TFrontHead(tc) } + + override AccessPathApprox pop(TypedContent head) { + head = tc and + ( + exists(TypedContent tc2 | Stage3::consCand(tc, TFrontHead(tc2), _) | + result = TConsCons(tc2, _, len - 1) + or + len = 2 and + result = TConsNil(tc2, _) + or + result = TCons1(tc2, len - 1) + ) + or + exists(DataFlowType t | + len = 1 and + Stage3::consCand(tc, TFrontNil(t), _) and + result = TNil(t) + ) + ) + } +} + +/** Gets the access path obtained by popping `tc` from `ap`, if any. */ +private AccessPathApprox pop(TypedContent tc, AccessPathApprox apa) { result = apa.pop(tc) } + +/** Gets the access path obtained by pushing `tc` onto `ap`. */ +private AccessPathApprox push(TypedContent tc, AccessPathApprox apa) { apa = pop(tc, result) } + +private newtype TAccessPathApproxOption = + TAccessPathApproxNone() or + TAccessPathApproxSome(AccessPathApprox apa) + +private class AccessPathApproxOption extends TAccessPathApproxOption { + string toString() { + this = TAccessPathApproxNone() and result = "" + or + this = TAccessPathApproxSome(any(AccessPathApprox apa | result = apa.toString())) + } +} + +private module Stage4 { + module PrevStage = Stage3; + + class ApApprox = PrevStage::Ap; + + class Ap = AccessPathApprox; + + class ApNil = AccessPathApproxNil; + + private ApApprox getApprox(Ap ap) { result = ap.getFront() } + + private ApNil getApNil(NodeEx node) { + PrevStage::revFlow(node, _) and result = TNil(node.getDataFlowType()) + } + + bindingset[tc, tail] + private Ap apCons(TypedContent tc, Ap tail) { result = push(tc, tail) } + + pragma[noinline] + private Content getHeadContent(Ap ap) { result = ap.getHead().getContent() } + + class ApOption = AccessPathApproxOption; + + ApOption apNone() { result = TAccessPathApproxNone() } + + ApOption apSome(Ap ap) { result = TAccessPathApproxSome(ap) } + + class Cc = CallContext; + + class CcCall = CallContextCall; + + class CcNoCall = CallContextNoCall; + + Cc ccNone() { result instanceof CallContextAny } + + CcCall ccSomeCall() { result instanceof CallContextSomeCall } + + private class LocalCc = LocalCallContext; + + bindingset[call, c, outercc] + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSite(call, c) then result = TSpecificCall(call) else result = TSomeCall() + } + + bindingset[call, c, innercc] + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } + + bindingset[node, cc] + private LocalCc getLocalCc(NodeEx node, Cc cc) { + result = + getLocalCallContext(pragma[only_bind_into](pragma[only_bind_out](cc)), + node.getEnclosingCallable()) + } + + private predicate localStep( + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, + ApNil ap, Configuration config, LocalCc lcc + ) { + localFlowBigStep(node1, state1, node2, state2, preservesValue, ap.getFront(), config, lcc) + } + + pragma[nomagic] + private predicate flowOutOfCall( + DataFlowCall call, RetNodeEx node1, NodeEx node2, boolean allowsFieldFlow, Configuration config + ) { + exists(FlowState state | + flowOutOfCallNodeCand2(call, node1, node2, allowsFieldFlow, config) and + PrevStage::revFlow(node2, pragma[only_bind_into](state), _, _, _, + pragma[only_bind_into](config)) and + PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _, _, _, + pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate flowIntoCall( + DataFlowCall call, ArgNodeEx node1, ParamNodeEx node2, boolean allowsFieldFlow, + Configuration config + ) { + exists(FlowState state | + flowIntoCallNodeCand2(call, node1, node2, allowsFieldFlow, config) and + PrevStage::revFlow(node2, pragma[only_bind_into](state), _, _, _, + pragma[only_bind_into](config)) and + PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _, _, _, + pragma[only_bind_into](config)) + ) + } + + bindingset[node, state, ap, config] + private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { any() } + + // Type checking is not necessary here as it has already been done in stage 3. + bindingset[ap, contentType] + private predicate typecheckStore(Ap ap, DataFlowType contentType) { any() } + + /* Begin: Stage 4 logic. */ + bindingset[node, state, config] + private predicate flowCand(NodeEx node, FlowState state, ApApprox apa, Configuration config) { + PrevStage::revFlow(node, state, _, _, apa, config) + } + + bindingset[result, apa] + private ApApprox unbindApa(ApApprox apa) { + pragma[only_bind_out](apa) = pragma[only_bind_out](result) + } + + pragma[nomagic] + private predicate flowThroughOutOfCall( + DataFlowCall call, CcCall ccc, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, + Configuration config + ) { + flowOutOfCall(call, ret, out, allowsFieldFlow, pragma[only_bind_into](config)) and + PrevStage::callMayFlowThroughRev(call, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(_, ret.getEnclosingCallable(), _, + pragma[only_bind_into](config)) and + ccc.matchesCall(call) + } + + /** + * Holds if `node` is reachable with access path `ap` from a source in the + * configuration `config`. + * + * The call context `cc` records whether the node is reached through an + * argument in a call, and if so, `argAp` records the access path of that + * argument. + */ + pragma[nomagic] + predicate fwdFlow(NodeEx node, FlowState state, Cc cc, ApOption argAp, Ap ap, Configuration config) { + fwdFlow0(node, state, cc, argAp, ap, config) and + flowCand(node, state, unbindApa(getApprox(ap)), config) and + filter(node, state, ap, config) + } + + pragma[nomagic] + private predicate fwdFlow0( + NodeEx node, FlowState state, Cc cc, ApOption argAp, Ap ap, Configuration config + ) { + sourceNode(node, state, config) and + (if hasSourceCallCtx(config) then cc = ccSomeCall() else cc = ccNone()) and + argAp = apNone() and + ap = getApNil(node) + or + exists(NodeEx mid, FlowState state0, Ap ap0, LocalCc localCc | + fwdFlow(mid, state0, cc, argAp, ap0, config) and + localCc = getLocalCc(mid, cc) + | + localStep(mid, state0, node, state, true, _, config, localCc) and + ap = ap0 + or + localStep(mid, state0, node, state, false, ap, config, localCc) and + ap0 instanceof ApNil + ) + or + exists(NodeEx mid | + fwdFlow(mid, pragma[only_bind_into](state), _, _, ap, pragma[only_bind_into](config)) and + jumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(mid, state, _, _, nil, pragma[only_bind_into](config)) and + additionalJumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() and + ap = getApNil(node) + ) + or + exists(NodeEx mid, FlowState state0, ApNil nil | + fwdFlow(mid, state0, _, _, nil, pragma[only_bind_into](config)) and + additionalJumpStateStep(mid, state0, node, state, config) and + cc = ccNone() and + argAp = apNone() and + ap = getApNil(node) + ) + or + // store + exists(TypedContent tc, Ap ap0 | + fwdFlowStore(_, ap0, tc, node, state, cc, argAp, config) and + ap = apCons(tc, ap0) + ) + or + // read + exists(Ap ap0, Content c | + fwdFlowRead(ap0, c, _, node, state, cc, argAp, config) and + fwdFlowConsCand(ap0, c, ap, config) + ) + or + // flow into a callable + exists(ApApprox apa | + fwdFlowIn(_, node, state, _, cc, _, ap, config) and + apa = getApprox(ap) and + if PrevStage::parameterMayFlowThrough(node, _, apa, config) + then argAp = apSome(ap) + else argAp = apNone() + ) + or + // flow out of a callable + fwdFlowOutNotFromArg(node, state, cc, argAp, ap, config) + or + exists(DataFlowCall call, Ap argAp0 | + fwdFlowOutFromArg(call, node, state, argAp0, ap, config) and + fwdFlowIsEntered(call, cc, argAp, argAp0, config) + ) + } + + pragma[nomagic] + private predicate fwdFlowStore( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, FlowState state, Cc cc, ApOption argAp, + Configuration config + ) { + exists(DataFlowType contentType | + fwdFlow(node1, state, cc, argAp, ap1, config) and + PrevStage::storeStepCand(node1, unbindApa(getApprox(ap1)), tc, node2, contentType, config) and + typecheckStore(ap1, contentType) + ) + } + + /** + * Holds if forward flow with access path `tail` reaches a store of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate fwdFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(TypedContent tc | + fwdFlowStore(_, tail, tc, _, _, _, _, config) and + tc.getContent() = c and + cons = apCons(tc, tail) + ) + } + + pragma[nomagic] + private predicate fwdFlowRead( + Ap ap, Content c, NodeEx node1, NodeEx node2, FlowState state, Cc cc, ApOption argAp, + Configuration config + ) { + fwdFlow(node1, state, cc, argAp, ap, config) and + PrevStage::readStepCand(node1, c, node2, config) and + getHeadContent(ap) = c + } + + pragma[nomagic] + private predicate fwdFlowIn( + DataFlowCall call, ParamNodeEx p, FlowState state, Cc outercc, Cc innercc, ApOption argAp, + Ap ap, Configuration config + ) { + exists(ArgNodeEx arg, boolean allowsFieldFlow | + fwdFlow(arg, state, outercc, argAp, ap, config) and + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + innercc = getCallContextCall(call, p.getEnclosingCallable(), outercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutNotFromArg( + NodeEx out, FlowState state, Cc ccOut, ApOption argAp, Ap ap, Configuration config + ) { + exists( + DataFlowCall call, RetNodeEx ret, boolean allowsFieldFlow, CcNoCall innercc, + DataFlowCallable inner + | + fwdFlow(ret, state, innercc, argAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + inner = ret.getEnclosingCallable() and + ccOut = getCallContextReturn(inner, call, innercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutFromArg( + DataFlowCall call, NodeEx out, FlowState state, Ap argAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, boolean allowsFieldFlow, CcCall ccc | + fwdFlow(ret, state, ccc, apSome(argAp), ap, config) and + flowThroughOutOfCall(call, ccc, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an argument to `call` is reached in the flow covered by `fwdFlow` + * and data might flow through the target callable and back out at `call`. + */ + pragma[nomagic] + private predicate fwdFlowIsEntered( + DataFlowCall call, Cc cc, ApOption argAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p | + fwdFlowIn(call, p, _, cc, _, argAp, ap, config) and + PrevStage::parameterMayFlowThrough(p, _, unbindApa(getApprox(ap)), config) + ) + } + + pragma[nomagic] + private predicate storeStepFwd( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Ap ap2, Configuration config + ) { + fwdFlowStore(node1, ap1, tc, node2, _, _, _, config) and + ap2 = apCons(tc, ap1) and + fwdFlowRead(ap2, tc.getContent(), _, _, _, _, _, config) + } + + private predicate readStepFwd( + NodeEx n1, Ap ap1, Content c, NodeEx n2, Ap ap2, Configuration config + ) { + fwdFlowRead(ap1, c, n1, n2, _, _, _, config) and + fwdFlowConsCand(ap1, c, ap2, config) + } + + pragma[nomagic] + private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { + exists(Ap argAp0, NodeEx out, FlowState state, Cc cc, ApOption argAp, Ap ap | + fwdFlow(out, state, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, + pragma[only_bind_into](config)) and + fwdFlowOutFromArg(call, out, state, argAp0, ap, config) and + fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc), + pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0), + pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate flowThroughIntoCall( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, Configuration config + ) { + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + fwdFlow(arg, _, _, _, _, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(p, _, _, pragma[only_bind_into](config)) and + callMayFlowThroughFwd(call, pragma[only_bind_into](config)) + } + + pragma[nomagic] + private predicate returnNodeMayFlowThrough( + RetNodeEx ret, FlowState state, Ap ap, Configuration config + ) { + fwdFlow(ret, state, any(CcCall ccc), apSome(_), ap, config) + } + + /** + * Holds if `node` with access path `ap` is part of a path from a source to a + * sink in the configuration `config`. + * + * The Boolean `toReturn` records whether the node must be returned from the + * enclosing callable in order to reach a sink, and if so, `returnAp` records + * the access path of the returned value. + */ + pragma[nomagic] + predicate revFlow( + NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + revFlow0(node, state, toReturn, returnAp, ap, config) and + fwdFlow(node, state, _, _, ap, config) + } + + pragma[nomagic] + private predicate revFlow0( + NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + fwdFlow(node, state, _, _, ap, config) and + sinkNode(node, state, config) and + (if hasSinkCallCtx(config) then toReturn = true else toReturn = false) and + returnAp = apNone() and + ap instanceof ApNil + or + exists(NodeEx mid, FlowState state0 | + localStep(node, state, mid, state0, true, _, config, _) and + revFlow(mid, state0, toReturn, returnAp, ap, config) + ) + or + exists(NodeEx mid, FlowState state0, ApNil nil | + fwdFlow(node, pragma[only_bind_into](state), _, _, ap, pragma[only_bind_into](config)) and + localStep(node, pragma[only_bind_into](state), mid, state0, false, _, config, _) and + revFlow(mid, state0, toReturn, returnAp, nil, pragma[only_bind_into](config)) and + ap instanceof ApNil + ) + or + exists(NodeEx mid | + jumpStep(node, mid, config) and + revFlow(mid, state, _, _, ap, config) and + toReturn = false and + returnAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, _, ap, pragma[only_bind_into](config)) and + additionalJumpStep(node, mid, config) and + revFlow(pragma[only_bind_into](mid), state, _, _, nil, pragma[only_bind_into](config)) and + toReturn = false and + returnAp = apNone() and + ap instanceof ApNil + ) + or + exists(NodeEx mid, FlowState state0, ApNil nil | + fwdFlow(node, _, _, _, ap, pragma[only_bind_into](config)) and + additionalJumpStateStep(node, state, mid, state0, config) and + revFlow(pragma[only_bind_into](mid), pragma[only_bind_into](state0), _, _, nil, + pragma[only_bind_into](config)) and + toReturn = false and + returnAp = apNone() and + ap instanceof ApNil + ) + or + // store + exists(Ap ap0, Content c | + revFlowStore(ap0, c, ap, node, state, _, _, toReturn, returnAp, config) and + revFlowConsCand(ap0, c, ap, config) + ) + or + // read + exists(NodeEx mid, Ap ap0 | + revFlow(mid, state, toReturn, returnAp, ap0, config) and + readStepFwd(node, ap, _, mid, ap0, config) + ) + or + // flow into a callable + revFlowInNotToReturn(node, state, returnAp, ap, config) and + toReturn = false + or + exists(DataFlowCall call, Ap returnAp0 | + revFlowInToReturn(call, node, state, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + or + // flow out of a callable + revFlowOut(_, node, state, _, _, ap, config) and + toReturn = true and + if returnNodeMayFlowThrough(node, state, ap, config) + then returnAp = apSome(ap) + else returnAp = apNone() + } + + pragma[nomagic] + private predicate revFlowStore( + Ap ap0, Content c, Ap ap, NodeEx node, FlowState state, TypedContent tc, NodeEx mid, + boolean toReturn, ApOption returnAp, Configuration config + ) { + revFlow(mid, state, toReturn, returnAp, ap0, config) and + storeStepFwd(node, ap, tc, mid, ap0, config) and + tc.getContent() = c + } + + /** + * Holds if reverse flow with access path `tail` reaches a read of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate revFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(NodeEx mid, Ap tail0 | + revFlow(mid, _, _, _, tail, config) and + tail = pragma[only_bind_into](tail0) and + readStepFwd(_, cons, c, mid, tail0, config) + ) + } + + pragma[nomagic] + private predicate revFlowOut( + DataFlowCall call, RetNodeEx ret, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, + Configuration config + ) { + exists(NodeEx out, boolean allowsFieldFlow | + revFlow(out, state, toReturn, returnAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInNotToReturn( + ArgNodeEx arg, FlowState state, ApOption returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, state, false, returnAp, ap, config) and + flowIntoCall(_, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInToReturn( + DataFlowCall call, ArgNodeEx arg, FlowState state, Ap returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, state, true, apSome(returnAp), ap, config) and + flowThroughIntoCall(call, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an output from `call` is reached in the flow covered by `revFlow` + * and data might flow through the target callable resulting in reverse flow + * reaching an argument of `call`. + */ + pragma[nomagic] + private predicate revFlowIsReturned( + DataFlowCall call, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, FlowState state, CcCall ccc | + revFlowOut(call, ret, state, toReturn, returnAp, ap, config) and + fwdFlow(ret, state, ccc, apSome(_), ap, config) and + ccc.matchesCall(call) + ) + } + + pragma[nomagic] + predicate storeStepCand( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, DataFlowType contentType, + Configuration config + ) { + exists(Ap ap2, Content c | + PrevStage::storeStepCand(node1, _, tc, node2, contentType, config) and + revFlowStore(ap2, c, ap1, node1, _, tc, node2, _, _, config) and + revFlowConsCand(ap2, c, ap1, config) + ) + } + + predicate readStepCand(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(Ap ap1, Ap ap2 | + revFlow(node2, _, _, _, pragma[only_bind_into](ap2), pragma[only_bind_into](config)) and + readStepFwd(node1, ap1, c, node2, ap2, config) and + revFlowStore(ap1, c, pragma[only_bind_into](ap2), _, _, _, _, _, _, + pragma[only_bind_into](config)) + ) + } + + predicate revFlow(NodeEx node, FlowState state, Configuration config) { + revFlow(node, state, _, _, _, config) + } + + pragma[nomagic] + predicate revFlow(NodeEx node, Configuration config) { revFlow(node, _, _, _, _, config) } + + // use an alias as a workaround for bad functionality-induced joins + pragma[nomagic] + predicate revFlowAlias(NodeEx node, Configuration config) { revFlow(node, _, _, _, _, config) } + + // use an alias as a workaround for bad functionality-induced joins + pragma[nomagic] + predicate revFlowAlias( + NodeEx node, FlowState state, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + revFlow(node, state, toReturn, returnAp, ap, config) + } + + private predicate fwdConsCand(TypedContent tc, Ap ap, Configuration config) { + storeStepFwd(_, ap, tc, _, _, config) + } + + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { + storeStepCand(_, ap, tc, _, _, config) + } + + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + + pragma[noinline] + private predicate parameterFlow( + ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config + ) { + revFlow(p, _, true, apSome(ap0), ap, config) and + c = p.getEnclosingCallable() + } + + predicate parameterMayFlowThrough(ParamNodeEx p, DataFlowCallable c, Ap ap, Configuration config) { + exists(RetNodeEx ret, FlowState state, Ap ap0, ReturnKindExt kind, ParameterPosition pos | + parameterFlow(p, ap, ap0, c, config) and + c = ret.getEnclosingCallable() and + revFlow(pragma[only_bind_into](ret), pragma[only_bind_into](state), true, apSome(_), + pragma[only_bind_into](ap0), pragma[only_bind_into](config)) and + fwdFlow(ret, state, any(CcCall ccc), apSome(ap), ap0, config) and + kind = ret.getKind() and + p.getPosition() = pos and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = pos + or + p.allowParameterReturnInSelf() + ) + ) + } + + pragma[nomagic] + predicate callMayFlowThroughRev(DataFlowCall call, Configuration config) { + exists( + Ap returnAp0, ArgNodeEx arg, FlowState state, boolean toReturn, ApOption returnAp, Ap ap + | + revFlow(arg, state, toReturn, returnAp, ap, config) and + revFlowInToReturn(call, arg, state, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + } + + predicate stats( + boolean fwd, int nodes, int fields, int conscand, int states, int tuples, Configuration config + ) { + fwd = true and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, config)) and + fields = count(TypedContent f0 | fwdConsCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | fwdConsCand(f0, ap, config)) and + states = count(FlowState state | fwdFlow(_, state, _, _, _, config)) and + tuples = + count(NodeEx n, FlowState state, Cc cc, ApOption argAp, Ap ap | + fwdFlow(n, state, cc, argAp, ap, config) + ) + or + fwd = false and + nodes = count(NodeEx node | revFlow(node, _, _, _, _, config)) and + fields = count(TypedContent f0 | consCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | consCand(f0, ap, config)) and + states = count(FlowState state | revFlow(_, state, _, _, _, config)) and + tuples = + count(NodeEx n, FlowState state, boolean b, ApOption retAp, Ap ap | + revFlow(n, state, b, retAp, ap, config) + ) + } + /* End: Stage 4 logic. */ +} + +bindingset[conf, result] +private Configuration unbindConf(Configuration conf) { + exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) +} + +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and + Stage4::revFlow(n, state, true, _, apa0, config) and + Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and + n.getEnclosingCallable() = c + ) +} + +pragma[nomagic] +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, config) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + +private newtype TSummaryCtx = + TSummaryCtxNone() or + TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { + exists(Configuration config | + Stage4::parameterMayFlowThrough(p, _, ap.getApprox(), config) and + Stage4::revFlow(p, state, _, _, _, config) + ) + } + +/** + * A context for generating flow summaries. This represents flow entry through + * a specific parameter with an access path of a specific shape. + * + * Summaries are only created for parameters that may flow through. + */ +abstract private class SummaryCtx extends TSummaryCtx { + abstract string toString(); +} + +/** A summary context from which no flow summary can be generated. */ +private class SummaryCtxNone extends SummaryCtx, TSummaryCtxNone { + override string toString() { result = "" } +} + +/** A summary context from which a flow summary can be generated. */ +private class SummaryCtxSome extends SummaryCtx, TSummaryCtxSome { + private ParamNodeEx p; + private FlowState s; + private AccessPath ap; + + SummaryCtxSome() { this = TSummaryCtxSome(p, s, ap) } + + ParameterPosition getParameterPos() { p.isParameterOf(_, result) } + + ParamNodeEx getParamNode() { result = p } + + override string toString() { result = p + ": " + ap } + + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + p.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +/** + * Gets the number of length 2 access path approximations that correspond to `apa`. + */ +private int count1to2unfold(AccessPathApproxCons1 apa, Configuration config) { + exists(TypedContent tc, int len | + tc = apa.getHead() and + len = apa.len() and + result = + strictcount(AccessPathFront apf | + Stage4::consCand(tc, any(AccessPathApprox ap | ap.getFront() = apf and ap.len() = len - 1), + config) + ) + ) +} + +private int countNodesUsingAccessPath(AccessPathApprox apa, Configuration config) { + result = + strictcount(NodeEx n, FlowState state | + Stage4::revFlow(n, state, _, _, apa, config) or nodeMayUseSummary(n, state, apa, config) + ) +} + +/** + * Holds if a length 2 access path approximation matching `apa` is expected + * to be expensive. + */ +private predicate expensiveLen1to2unfolding(AccessPathApproxCons1 apa, Configuration config) { + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = count1to2unfold(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + apLimit < aps and + tupleLimit < (aps - 1) * nodes + ) +} + +private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { + exists(TypedContent head | + apa.pop(head) = result and + Stage4::consCand(head, result, config) + ) +} + +/** + * Holds with `unfold = false` if a precise head-tail representation of `apa` is + * expected to be expensive. Holds with `unfold = true` otherwise. + */ +private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) +} + +/** + * Gets the number of `AccessPath`s that correspond to `apa`. + */ +private int countAps(AccessPathApprox apa, Configuration config) { + evalUnfold(apa, false, config) and + result = 1 and + (not apa instanceof AccessPathApproxCons1 or expensiveLen1to2unfolding(apa, config)) + or + evalUnfold(apa, false, config) and + result = count1to2unfold(apa, config) and + not expensiveLen1to2unfolding(apa, config) + or + evalUnfold(apa, true, config) and + result = countPotentialAps(apa, config) +} + +/** + * Gets the number of `AccessPath`s that would correspond to `apa` assuming + * that it is expanded to a precise head-tail representation. + */ +language[monotonicAggregates] +private int countPotentialAps(AccessPathApprox apa, Configuration config) { + apa instanceof AccessPathApproxNil and result = 1 + or + result = strictsum(AccessPathApprox tail | tail = getATail(apa, config) | countAps(tail, config)) +} + +private newtype TAccessPath = + TAccessPathNil(DataFlowType t) or + TAccessPathCons(TypedContent head, AccessPath tail) { + exists(AccessPathApproxCons apa | + not evalUnfold(apa, false, _) and + head = apa.getHead() and + tail.getApprox() = getATail(apa, _) + ) + } or + TAccessPathCons2(TypedContent head1, TypedContent head2, int len) { + exists(AccessPathApproxCons apa | + evalUnfold(apa, false, _) and + not expensiveLen1to2unfolding(apa, _) and + apa.len() = len and + head1 = apa.getHead() and + head2 = getATail(apa, _).getHead() + ) + } or + TAccessPathCons1(TypedContent head, int len) { + exists(AccessPathApproxCons apa | + evalUnfold(apa, false, _) and + expensiveLen1to2unfolding(apa, _) and + apa.len() = len and + head = apa.getHead() + ) + } + +private newtype TPathNode = + TPathNodeMid( + NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, AccessPath ap, Configuration config + ) { + // A PathNode is introduced by a source ... + Stage4::revFlow(node, state, config) and + sourceNode(node, state, config) and + ( + if hasSourceCallCtx(config) + then cc instanceof CallContextSomeCall + else cc instanceof CallContextAny + ) and + sc instanceof SummaryCtxNone and + ap = TAccessPathNil(node.getDataFlowType()) + or + // ... or a step from an existing PathNode to another node. + exists(PathNodeMid mid | + pathStep(mid, node, state, cc, sc, ap) and + pragma[only_bind_into](config) = mid.getConfiguration() and + Stage4::revFlow(node, state, _, _, ap.getApprox(), pragma[only_bind_into](config)) + ) + } or + TPathNodeSink(NodeEx node, FlowState state, Configuration config) { + exists(PathNodeMid sink | + sink.isAtSink() and + node = sink.getNodeEx() and + state = sink.getState() and + config = sink.getConfiguration() + ) + } + +/** + * A list of `TypedContent`s followed by a `DataFlowType`. If data flows from a + * source to a given node with a given `AccessPath`, this indicates the sequence + * of dereference operations needed to get from the value in the node to the + * tracked object. The final type indicates the type of the tracked object. + */ +private class AccessPath extends TAccessPath { + /** Gets the head of this access path, if any. */ + abstract TypedContent getHead(); + + /** Gets the tail of this access path, if any. */ + abstract AccessPath getTail(); + + /** Gets the front of this access path. */ + abstract AccessPathFront getFront(); + + /** Gets the approximation of this access path. */ + abstract AccessPathApprox getApprox(); + + /** Gets the length of this access path. */ + abstract int length(); + + /** Gets a textual representation of this access path. */ + abstract string toString(); + + /** Gets the access path obtained by popping `tc` from this access path, if any. */ + final AccessPath pop(TypedContent tc) { + result = this.getTail() and + tc = this.getHead() + } + + /** Gets the access path obtained by pushing `tc` onto this access path. */ + final AccessPath push(TypedContent tc) { this = result.pop(tc) } +} + +private class AccessPathNil extends AccessPath, TAccessPathNil { + private DataFlowType t; + + AccessPathNil() { this = TAccessPathNil(t) } + + DataFlowType getType() { result = t } + + override TypedContent getHead() { none() } + + override AccessPath getTail() { none() } + + override AccessPathFrontNil getFront() { result = TFrontNil(t) } + + override AccessPathApproxNil getApprox() { result = TNil(t) } + + override int length() { result = 0 } + + override string toString() { result = concat(": " + ppReprType(t)) } +} + +private class AccessPathCons extends AccessPath, TAccessPathCons { + private TypedContent head; + private AccessPath tail; + + AccessPathCons() { this = TAccessPathCons(head, tail) } + + override TypedContent getHead() { result = head } + + override AccessPath getTail() { result = tail } + + override AccessPathFrontHead getFront() { result = TFrontHead(head) } + + override AccessPathApproxCons getApprox() { + result = TConsNil(head, tail.(AccessPathNil).getType()) + or + result = TConsCons(head, tail.getHead(), this.length()) + or + result = TCons1(head, this.length()) + } + + override int length() { result = 1 + tail.length() } + + private string toStringImpl(boolean needsSuffix) { + exists(DataFlowType t | + tail = TAccessPathNil(t) and + needsSuffix = false and + result = head.toString() + "]" + concat(" : " + ppReprType(t)) + ) + or + result = head + ", " + tail.(AccessPathCons).toStringImpl(needsSuffix) + or + exists(TypedContent tc2, TypedContent tc3, int len | tail = TAccessPathCons2(tc2, tc3, len) | + result = head + ", " + tc2 + ", " + tc3 + ", ... (" and len > 2 and needsSuffix = true + or + result = head + ", " + tc2 + ", " + tc3 + "]" and len = 2 and needsSuffix = false + ) + or + exists(TypedContent tc2, int len | tail = TAccessPathCons1(tc2, len) | + result = head + ", " + tc2 + ", ... (" and len > 1 and needsSuffix = true + or + result = head + ", " + tc2 + "]" and len = 1 and needsSuffix = false + ) + } + + override string toString() { + result = "[" + this.toStringImpl(true) + this.length().toString() + ")]" + or + result = "[" + this.toStringImpl(false) + } +} + +private class AccessPathCons2 extends AccessPath, TAccessPathCons2 { + private TypedContent head1; + private TypedContent head2; + private int len; + + AccessPathCons2() { this = TAccessPathCons2(head1, head2, len) } + + override TypedContent getHead() { result = head1 } + + override AccessPath getTail() { + Stage4::consCand(head1, result.getApprox(), _) and + result.getHead() = head2 and + result.length() = len - 1 + } + + override AccessPathFrontHead getFront() { result = TFrontHead(head1) } + + override AccessPathApproxCons getApprox() { + result = TConsCons(head1, head2, len) or + result = TCons1(head1, len) + } + + override int length() { result = len } + + override string toString() { + if len = 2 + then result = "[" + head1.toString() + ", " + head2.toString() + "]" + else + result = "[" + head1.toString() + ", " + head2.toString() + ", ... (" + len.toString() + ")]" + } +} + +private class AccessPathCons1 extends AccessPath, TAccessPathCons1 { + private TypedContent head; + private int len; + + AccessPathCons1() { this = TAccessPathCons1(head, len) } + + override TypedContent getHead() { result = head } + + override AccessPath getTail() { + Stage4::consCand(head, result.getApprox(), _) and result.length() = len - 1 + } + + override AccessPathFrontHead getFront() { result = TFrontHead(head) } + + override AccessPathApproxCons getApprox() { result = TCons1(head, len) } + + override int length() { result = len } + + override string toString() { + if len = 1 + then result = "[" + head.toString() + "]" + else result = "[" + head.toString() + ", ... (" + len.toString() + ")]" + } +} + +/** + * A `Node` augmented with a call context (except for sinks), an access path, and a configuration. + * Only those `PathNode`s that are reachable from a source are generated. + */ +class PathNode extends TPathNode { + /** Gets a textual representation of this element. */ + string toString() { none() } + + /** + * Gets a textual representation of this element, including a textual + * representation of the call context. + */ + string toStringWithContext() { none() } + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + none() + } + + /** Gets the underlying `Node`. */ + final Node getNode() { this.(PathNodeImpl).getNodeEx().projectToNode() = result } + + /** Gets the `FlowState` of this node. */ + FlowState getState() { none() } + + /** Gets the associated configuration. */ + Configuration getConfiguration() { none() } + + private PathNode getASuccessorIfHidden() { + this.(PathNodeImpl).isHidden() and + result = this.(PathNodeImpl).getASuccessorImpl() + } + + /** Gets a successor of this node, if any. */ + final PathNode getASuccessor() { + result = this.(PathNodeImpl).getASuccessorImpl().getASuccessorIfHidden*() and + not this.(PathNodeImpl).isHidden() and + not result.(PathNodeImpl).isHidden() + } + + /** Holds if this node is a source. */ + predicate isSource() { none() } +} + +abstract private class PathNodeImpl extends PathNode { + abstract PathNode getASuccessorImpl(); + + abstract NodeEx getNodeEx(); + + predicate isHidden() { + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) + } + + private string ppAp() { + this instanceof PathNodeSink and result = "" + or + exists(string s | s = this.(PathNodeMid).getAp().toString() | + if s = "" then result = "" else result = " " + s + ) + } + + private string ppCtx() { + this instanceof PathNodeSink and result = "" + or + result = " <" + this.(PathNodeMid).getCallContext().toString() + ">" + } + + override string toString() { result = this.getNodeEx().toString() + this.ppAp() } + + override string toStringWithContext() { + result = this.getNodeEx().toString() + this.ppAp() + this.ppCtx() + } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getNodeEx().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +/** Holds if `n` can reach a sink. */ +private predicate directReach(PathNode n) { + n instanceof PathNodeSink or directReach(n.getASuccessor()) +} + +/** Holds if `n` can reach a sink or is used in a subpath that can reach a sink. */ +private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) } + +/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */ +private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) } + +private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2) + +/** + * Provides the query predicates needed to include a graph in a path-problem query. + */ +module PathGraph { + /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ + query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(a) and reach(b) } + + /** Holds if `n` is a node in the graph of data flow path explanations. */ + query predicate nodes(PathNode n, string key, string val) { + reach(n) and key = "semmle.label" and val = n.toString() + } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through + * a subpath between `par` and `ret` with the connecting edges `arg -> par` and + * `ret -> out` is summarized as the edge `arg -> out`. + */ + query predicate subpaths(PathNode arg, PathNode par, PathNode ret, PathNode out) { + Subpaths::subpaths(arg, par, ret, out) and + reach(arg) and + reach(par) and + reach(ret) and + reach(out) + } +} + +/** + * An intermediate flow graph node. This is a triple consisting of a `Node`, + * a `CallContext`, and a `Configuration`. + */ +private class PathNodeMid extends PathNodeImpl, TPathNodeMid { + NodeEx node; + FlowState state; + CallContext cc; + SummaryCtx sc; + AccessPath ap; + Configuration config; + + PathNodeMid() { this = TPathNodeMid(node, state, cc, sc, ap, config) } + + override NodeEx getNodeEx() { result = node } + + override FlowState getState() { result = state } + + CallContext getCallContext() { result = cc } + + SummaryCtx getSummaryCtx() { result = sc } + + AccessPath getAp() { result = ap } + + override Configuration getConfiguration() { result = config } + + private PathNodeMid getSuccMid() { + pathStep(this, result.getNodeEx(), result.getState(), result.getCallContext(), + result.getSummaryCtx(), result.getAp()) and + result.getConfiguration() = unbindConf(this.getConfiguration()) + } + + override PathNodeImpl getASuccessorImpl() { + // an intermediate step to another intermediate node + result = this.getSuccMid() + or + // a final step to a sink + result = this.getSuccMid().projectToSink() + } + + override predicate isSource() { + sourceNode(node, state, config) and + ( + if hasSourceCallCtx(config) + then cc instanceof CallContextSomeCall + else cc instanceof CallContextAny + ) and + sc instanceof SummaryCtxNone and + ap instanceof AccessPathNil + } + + predicate isAtSink() { + sinkNode(node, state, config) and + ap instanceof AccessPathNil and + if hasSinkCallCtx(config) + then + // For `FeatureHasSinkCallContext` the condition `cc instanceof CallContextNoCall` + // is exactly what we need to check. This also implies + // `sc instanceof SummaryCtxNone`. + // For `FeatureEqualSourceSinkCallContext` the initial call context was + // set to `CallContextSomeCall` and jumps are disallowed, so + // `cc instanceof CallContextNoCall` never holds. On the other hand, + // in this case there's never any need to enter a call except to identify + // a summary, so the condition in `pathIntoCallable` enforces this, which + // means that `sc instanceof SummaryCtxNone` holds if and only if we are + // in the call context of the source. + sc instanceof SummaryCtxNone or + cc instanceof CallContextNoCall + else any() + } + + PathNodeSink projectToSink() { + this.isAtSink() and + result.getNodeEx() = node and + result.getState() = state and + result.getConfiguration() = unbindConf(config) + } +} + +/** + * A flow graph node corresponding to a sink. This is disjoint from the + * intermediate nodes in order to uniquely correspond to a given sink by + * excluding the `CallContext`. + */ +private class PathNodeSink extends PathNodeImpl, TPathNodeSink { + NodeEx node; + FlowState state; + Configuration config; + + PathNodeSink() { this = TPathNodeSink(node, state, config) } + + override NodeEx getNodeEx() { result = node } + + override FlowState getState() { result = state } + + override Configuration getConfiguration() { result = config } + + override PathNode getASuccessorImpl() { none() } + + override predicate isSource() { sourceNode(node, state, config) } +} + +private predicate pathNode( + PathNodeMid mid, NodeEx midnode, FlowState state, CallContext cc, SummaryCtx sc, AccessPath ap, + Configuration conf, LocalCallContext localCC +) { + midnode = mid.getNodeEx() and + state = mid.getState() and + conf = mid.getConfiguration() and + cc = mid.getCallContext() and + sc = mid.getSummaryCtx() and + localCC = + getLocalCallContext(pragma[only_bind_into](pragma[only_bind_out](cc)), + midnode.getEnclosingCallable()) and + ap = mid.getAp() +} + +/** + * Holds if data may flow from `mid` to `node`. The last step in or out of + * a callable is recorded by `cc`. + */ +pragma[nomagic] +private predicate pathStep( + PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, AccessPath ap +) { + exists(NodeEx midnode, FlowState state0, Configuration conf, LocalCallContext localCC | + pathNode(mid, midnode, state0, cc, sc, ap, conf, localCC) and + localFlowBigStep(midnode, state0, node, state, true, _, conf, localCC) + ) + or + exists( + AccessPath ap0, NodeEx midnode, FlowState state0, Configuration conf, LocalCallContext localCC + | + pathNode(mid, midnode, state0, cc, sc, ap0, conf, localCC) and + localFlowBigStep(midnode, state0, node, state, false, ap.getFront(), conf, localCC) and + ap0 instanceof AccessPathNil + ) + or + jumpStep(mid.getNodeEx(), node, mid.getConfiguration()) and + state = mid.getState() and + cc instanceof CallContextAny and + sc instanceof SummaryCtxNone and + ap = mid.getAp() + or + additionalJumpStep(mid.getNodeEx(), node, mid.getConfiguration()) and + state = mid.getState() and + cc instanceof CallContextAny and + sc instanceof SummaryCtxNone and + mid.getAp() instanceof AccessPathNil and + ap = TAccessPathNil(node.getDataFlowType()) + or + additionalJumpStateStep(mid.getNodeEx(), mid.getState(), node, state, mid.getConfiguration()) and + cc instanceof CallContextAny and + sc instanceof SummaryCtxNone and + mid.getAp() instanceof AccessPathNil and + ap = TAccessPathNil(node.getDataFlowType()) + or + exists(TypedContent tc | pathStoreStep(mid, node, state, ap.pop(tc), tc, cc)) and + sc = mid.getSummaryCtx() + or + exists(TypedContent tc | pathReadStep(mid, node, state, ap.push(tc), tc, cc)) and + sc = mid.getSummaryCtx() + or + pathIntoCallable(mid, node, state, _, cc, sc, _, _) and ap = mid.getAp() + or + pathOutOfCallable(mid, node, state, cc) and ap = mid.getAp() and sc instanceof SummaryCtxNone + or + pathThroughCallable(mid, node, state, cc, ap) and sc = mid.getSummaryCtx() +} + +pragma[nomagic] +private predicate pathReadStep( + PathNodeMid mid, NodeEx node, FlowState state, AccessPath ap0, TypedContent tc, CallContext cc +) { + ap0 = mid.getAp() and + tc = ap0.getHead() and + Stage4::readStepCand(mid.getNodeEx(), tc.getContent(), node, mid.getConfiguration()) and + state = mid.getState() and + cc = mid.getCallContext() +} + +pragma[nomagic] +private predicate pathStoreStep( + PathNodeMid mid, NodeEx node, FlowState state, AccessPath ap0, TypedContent tc, CallContext cc +) { + ap0 = mid.getAp() and + Stage4::storeStepCand(mid.getNodeEx(), _, tc, node, _, mid.getConfiguration()) and + state = mid.getState() and + cc = mid.getCallContext() +} + +private predicate pathOutOfCallable0( + PathNodeMid mid, ReturnPosition pos, FlowState state, CallContext innercc, AccessPathApprox apa, + Configuration config +) { + pos = mid.getNodeEx().(RetNodeEx).getReturnPosition() and + state = mid.getState() and + innercc = mid.getCallContext() and + innercc instanceof CallContextNoCall and + apa = mid.getAp().getApprox() and + config = mid.getConfiguration() +} + +pragma[nomagic] +private predicate pathOutOfCallable1( + PathNodeMid mid, DataFlowCall call, ReturnKindExt kind, FlowState state, CallContext cc, + AccessPathApprox apa, Configuration config +) { + exists(ReturnPosition pos, DataFlowCallable c, CallContext innercc | + pathOutOfCallable0(mid, pos, state, innercc, apa, config) and + c = pos.getCallable() and + kind = pos.getKind() and + resolveReturn(innercc, c, call) + | + if reducedViableImplInReturn(c, call) then cc = TReturn(c, call) else cc = TAnyCallContext() + ) +} + +pragma[noinline] +private NodeEx getAnOutNodeFlow( + ReturnKindExt kind, DataFlowCall call, AccessPathApprox apa, Configuration config +) { + result.asNode() = kind.getAnOutNode(call) and + Stage4::revFlow(result, _, _, _, apa, config) +} + +/** + * Holds if data may flow from `mid` to `out`. The last step of this path + * is a return from a callable and is recorded by `cc`, if needed. + */ +pragma[noinline] +private predicate pathOutOfCallable(PathNodeMid mid, NodeEx out, FlowState state, CallContext cc) { + exists(ReturnKindExt kind, DataFlowCall call, AccessPathApprox apa, Configuration config | + pathOutOfCallable1(mid, call, kind, state, cc, apa, config) and + out = getAnOutNodeFlow(kind, call, apa, config) + ) +} + +/** + * Holds if data may flow from `mid` to the `i`th argument of `call` in `cc`. + */ +pragma[noinline] +private predicate pathIntoArg( + PathNodeMid mid, ParameterPosition ppos, FlowState state, CallContext cc, DataFlowCall call, + AccessPath ap, AccessPathApprox apa, Configuration config +) { + exists(ArgNodeEx arg, ArgumentPosition apos | + pathNode(mid, arg, state, cc, _, ap, config, _) and + arg.asNode().(ArgNode).argumentOf(call, apos) and + apa = ap.getApprox() and + parameterMatch(ppos, apos) + ) +} + +pragma[nomagic] +private predicate parameterCand( + DataFlowCallable callable, ParameterPosition pos, AccessPathApprox apa, Configuration config +) { + exists(ParamNodeEx p | + Stage4::revFlow(p, _, _, _, apa, config) and + p.isParameterOf(callable, pos) + ) +} + +pragma[nomagic] +private predicate pathIntoCallable0( + PathNodeMid mid, DataFlowCallable callable, ParameterPosition pos, FlowState state, + CallContext outercc, DataFlowCall call, AccessPath ap, Configuration config +) { + exists(AccessPathApprox apa | + pathIntoArg(mid, pragma[only_bind_into](pos), state, outercc, call, ap, + pragma[only_bind_into](apa), pragma[only_bind_into](config)) and + callable = resolveCall(call, outercc) and + parameterCand(callable, pragma[only_bind_into](pos), pragma[only_bind_into](apa), + pragma[only_bind_into](config)) + ) +} + +/** + * Holds if data may flow from `mid` to `p` through `call`. The contexts + * before and after entering the callable are `outercc` and `innercc`, + * respectively. + */ +pragma[nomagic] +private predicate pathIntoCallable( + PathNodeMid mid, ParamNodeEx p, FlowState state, CallContext outercc, CallContextCall innercc, + SummaryCtx sc, DataFlowCall call, Configuration config +) { + exists(ParameterPosition pos, DataFlowCallable callable, AccessPath ap | + pathIntoCallable0(mid, callable, pos, state, outercc, call, ap, config) and + p.isParameterOf(callable, pos) and + ( + sc = TSummaryCtxSome(p, state, ap) + or + not exists(TSummaryCtxSome(p, state, ap)) and + sc = TSummaryCtxNone() and + // When the call contexts of source and sink needs to match then there's + // never any reason to enter a callable except to find a summary. See also + // the comment in `PathNodeMid::isAtSink`. + not config.getAFeature() instanceof FeatureEqualSourceSinkCallContext + ) + | + if recordDataFlowCallSite(call, callable) + then innercc = TSpecificCall(call) + else innercc = TSomeCall() + ) +} + +/** Holds if data may flow from a parameter given by `sc` to a return of kind `kind`. */ +pragma[nomagic] +private predicate paramFlowsThrough( + ReturnKindExt kind, FlowState state, CallContextCall cc, SummaryCtxSome sc, AccessPath ap, + AccessPathApprox apa, Configuration config +) { + exists(PathNodeMid mid, RetNodeEx ret, ParameterPosition pos | + pathNode(mid, ret, state, cc, sc, ap, config, _) and + kind = ret.getKind() and + apa = ap.getApprox() and + pos = sc.getParameterPos() and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = pos + or + sc.getParamNode().allowParameterReturnInSelf() + ) + ) +} + +pragma[nomagic] +private predicate pathThroughCallable0( + DataFlowCall call, PathNodeMid mid, ReturnKindExt kind, FlowState state, CallContext cc, + AccessPath ap, AccessPathApprox apa, Configuration config +) { + exists(CallContext innercc, SummaryCtx sc | + pathIntoCallable(mid, _, _, cc, innercc, sc, call, config) and + paramFlowsThrough(kind, state, innercc, sc, ap, apa, config) + ) +} + +/** + * Holds if data may flow from `mid` through a callable to the node `out`. + * The context `cc` is restored to its value prior to entering the callable. + */ +pragma[noinline] +private predicate pathThroughCallable( + PathNodeMid mid, NodeEx out, FlowState state, CallContext cc, AccessPath ap +) { + exists(DataFlowCall call, ReturnKindExt kind, AccessPathApprox apa, Configuration config | + pathThroughCallable0(call, mid, kind, state, cc, ap, apa, config) and + out = getAnOutNodeFlow(kind, call, apa, config) + ) +} + +private module Subpaths { + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple and `ret` is determined by + * `kind`, `sc`, `apout`, and `innercc`. + */ + pragma[nomagic] + private predicate subpaths01( + PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, + NodeEx out, FlowState sout, AccessPath apout + ) { + exists(Configuration config | + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and + paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, + pragma[only_bind_into](apout), _, unbindConf(config)) and + not arg.isHidden() + ) + } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple and `ret` is determined by + * `kind`, `sc`, `sout`, `apout`, and `innercc`. + */ + pragma[nomagic] + private predicate subpaths02( + PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, + NodeEx out, FlowState sout, AccessPath apout + ) { + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) + } + + pragma[nomagic] + private Configuration getPathNodeConf(PathNode n) { result = n.getConfiguration() } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple. + */ + pragma[nomagic] + private predicate subpaths03( + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + ) { + exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() + ) + } + + private PathNodeImpl localStepToHidden(PathNodeImpl n) { + n.getASuccessorImpl() = result and + result.isHidden() and + exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | + localFlowBigStep(n1, _, n2, _, _, _, _, _) or + store(n1, _, n2, _, _) or + readSet(n1, _, n2, _) + ) + } + + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through + * a subpath between `par` and `ret` with the connecting edges `arg -> par` and + * `ret -> out` is summarized as the edge `arg -> out`. + */ + predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and + not ret.isHidden() and + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() + ) + } + + /** + * Holds if `n` can reach a return node in a summarized subpath that can reach a sink. + */ + predicate retReach(PathNode n) { + exists(PathNode out | subpaths(_, _, n, out) | directReach(out) or retReach(out)) + or + exists(PathNode mid | + retReach(mid) and + n.getASuccessor() = mid and + not subpaths(_, mid, _, _) + ) + } +} + +/** + * Holds if data can flow (inter-procedurally) from `source` to `sink`. + * + * Will only have results if `configuration` has non-empty sources and + * sinks. + */ +private predicate flowsTo( + PathNode flowsource, PathNodeSink flowsink, Node source, Node sink, Configuration configuration +) { + flowsource.isSource() and + flowsource.getConfiguration() = configuration and + flowsource.(PathNodeImpl).getNodeEx().asNode() = source and + (flowsource = flowsink or pathSuccPlus(flowsource, flowsink)) and + flowsink.getNodeEx().asNode() = sink +} + +/** + * Holds if data can flow (inter-procedurally) from `source` to `sink`. + * + * Will only have results if `configuration` has non-empty sources and + * sinks. + */ +predicate flowsTo(Node source, Node sink, Configuration configuration) { + flowsTo(_, _, source, sink, configuration) +} + +private predicate finalStats( + boolean fwd, int nodes, int fields, int conscand, int states, int tuples +) { + fwd = true and + nodes = count(NodeEx n0 | exists(PathNodeImpl pn | pn.getNodeEx() = n0)) and + fields = count(TypedContent f0 | exists(PathNodeMid pn | pn.getAp().getHead() = f0)) and + conscand = count(AccessPath ap | exists(PathNodeMid pn | pn.getAp() = ap)) and + states = count(FlowState state | exists(PathNodeMid pn | pn.getState() = state)) and + tuples = count(PathNode pn) + or + fwd = false and + nodes = count(NodeEx n0 | exists(PathNodeImpl pn | pn.getNodeEx() = n0 and reach(pn))) and + fields = count(TypedContent f0 | exists(PathNodeMid pn | pn.getAp().getHead() = f0 and reach(pn))) and + conscand = count(AccessPath ap | exists(PathNodeMid pn | pn.getAp() = ap and reach(pn))) and + states = count(FlowState state | exists(PathNodeMid pn | pn.getState() = state and reach(pn))) and + tuples = count(PathNode pn | reach(pn)) +} + +/** + * INTERNAL: Only for debugging. + * + * Calculates per-stage metrics for data flow. + */ +predicate stageStats( + int n, string stage, int nodes, int fields, int conscand, int states, int tuples, + Configuration config +) { + stage = "1 Fwd" and + n = 10 and + Stage1::stats(true, nodes, fields, conscand, states, tuples, config) + or + stage = "1 Rev" and + n = 15 and + Stage1::stats(false, nodes, fields, conscand, states, tuples, config) + or + stage = "2 Fwd" and + n = 20 and + Stage2::stats(true, nodes, fields, conscand, states, tuples, config) + or + stage = "2 Rev" and + n = 25 and + Stage2::stats(false, nodes, fields, conscand, states, tuples, config) + or + stage = "3 Fwd" and + n = 30 and + Stage3::stats(true, nodes, fields, conscand, states, tuples, config) + or + stage = "3 Rev" and + n = 35 and + Stage3::stats(false, nodes, fields, conscand, states, tuples, config) + or + stage = "4 Fwd" and + n = 40 and + Stage4::stats(true, nodes, fields, conscand, states, tuples, config) + or + stage = "4 Rev" and + n = 45 and + Stage4::stats(false, nodes, fields, conscand, states, tuples, config) + or + stage = "5 Fwd" and n = 50 and finalStats(true, nodes, fields, conscand, states, tuples) + or + stage = "5 Rev" and n = 55 and finalStats(false, nodes, fields, conscand, states, tuples) +} + +private module FlowExploration { + private predicate callableStep(DataFlowCallable c1, DataFlowCallable c2, Configuration config) { + exists(NodeEx node1, NodeEx node2 | + jumpStep(node1, node2, config) + or + additionalJumpStep(node1, node2, config) + or + additionalJumpStateStep(node1, _, node2, _, config) + or + // flow into callable + viableParamArgEx(_, node2, node1) + or + // flow out of a callable + viableReturnPosOutEx(_, node1.(RetNodeEx).getReturnPosition(), node2) + | + c1 = node1.getEnclosingCallable() and + c2 = node2.getEnclosingCallable() and + c1 != c2 + ) + } + + private predicate interestingCallableSrc(DataFlowCallable c, Configuration config) { + exists(Node n | config.isSource(n) or config.isSource(n, _) | c = getNodeEnclosingCallable(n)) + or + exists(DataFlowCallable mid | + interestingCallableSrc(mid, config) and callableStep(mid, c, config) + ) + } + + private predicate interestingCallableSink(DataFlowCallable c, Configuration config) { + exists(Node n | config.isSink(n) or config.isSink(n, _) | c = getNodeEnclosingCallable(n)) + or + exists(DataFlowCallable mid | + interestingCallableSink(mid, config) and callableStep(c, mid, config) + ) + } + + private newtype TCallableExt = + TCallable(DataFlowCallable c, Configuration config) { + interestingCallableSrc(c, config) or + interestingCallableSink(c, config) + } or + TCallableSrc() or + TCallableSink() + + private predicate callableExtSrc(TCallableSrc src) { any() } + + private predicate callableExtSink(TCallableSink sink) { any() } + + private predicate callableExtStepFwd(TCallableExt ce1, TCallableExt ce2) { + exists(DataFlowCallable c1, DataFlowCallable c2, Configuration config | + callableStep(c1, c2, config) and + ce1 = TCallable(c1, pragma[only_bind_into](config)) and + ce2 = TCallable(c2, pragma[only_bind_into](config)) + ) + or + exists(Node n, Configuration config | + ce1 = TCallableSrc() and + (config.isSource(n) or config.isSource(n, _)) and + ce2 = TCallable(getNodeEnclosingCallable(n), config) + ) + or + exists(Node n, Configuration config | + ce2 = TCallableSink() and + (config.isSink(n) or config.isSink(n, _)) and + ce1 = TCallable(getNodeEnclosingCallable(n), config) + ) + } + + private predicate callableExtStepRev(TCallableExt ce1, TCallableExt ce2) { + callableExtStepFwd(ce2, ce1) + } + + private int distSrcExt(TCallableExt c) = + shortestDistances(callableExtSrc/1, callableExtStepFwd/2)(_, c, result) + + private int distSinkExt(TCallableExt c) = + shortestDistances(callableExtSink/1, callableExtStepRev/2)(_, c, result) + + private int distSrc(DataFlowCallable c, Configuration config) { + result = distSrcExt(TCallable(c, config)) - 1 + } + + private int distSink(DataFlowCallable c, Configuration config) { + result = distSinkExt(TCallable(c, config)) - 1 + } + + private newtype TPartialAccessPath = + TPartialNil(DataFlowType t) or + TPartialCons(TypedContent tc, int len) { len in [1 .. accessPathLimit()] } + + /** + * Conceptually a list of `TypedContent`s followed by a `Type`, but only the first + * element of the list and its length are tracked. If data flows from a source to + * a given node with a given `AccessPath`, this indicates the sequence of + * dereference operations needed to get from the value in the node to the + * tracked object. The final type indicates the type of the tracked object. + */ + private class PartialAccessPath extends TPartialAccessPath { + abstract string toString(); + + TypedContent getHead() { this = TPartialCons(result, _) } + + int len() { + this = TPartialNil(_) and result = 0 + or + this = TPartialCons(_, result) + } + + DataFlowType getType() { + this = TPartialNil(result) + or + exists(TypedContent head | this = TPartialCons(head, _) | result = head.getContainerType()) + } + } + + private class PartialAccessPathNil extends PartialAccessPath, TPartialNil { + override string toString() { + exists(DataFlowType t | this = TPartialNil(t) | result = concat(": " + ppReprType(t))) + } + } + + private class PartialAccessPathCons extends PartialAccessPath, TPartialCons { + override string toString() { + exists(TypedContent tc, int len | this = TPartialCons(tc, len) | + if len = 1 + then result = "[" + tc.toString() + "]" + else result = "[" + tc.toString() + ", ... (" + len.toString() + ")]" + ) + } + } + + private newtype TRevPartialAccessPath = + TRevPartialNil() or + TRevPartialCons(Content c, int len) { len in [1 .. accessPathLimit()] } + + /** + * Conceptually a list of `Content`s, but only the first + * element of the list and its length are tracked. + */ + private class RevPartialAccessPath extends TRevPartialAccessPath { + abstract string toString(); + + Content getHead() { this = TRevPartialCons(result, _) } + + int len() { + this = TRevPartialNil() and result = 0 + or + this = TRevPartialCons(_, result) + } + } + + private class RevPartialAccessPathNil extends RevPartialAccessPath, TRevPartialNil { + override string toString() { result = "" } + } + + private class RevPartialAccessPathCons extends RevPartialAccessPath, TRevPartialCons { + override string toString() { + exists(Content c, int len | this = TRevPartialCons(c, len) | + if len = 1 + then result = "[" + c.toString() + "]" + else result = "[" + c.toString() + ", ... (" + len.toString() + ")]" + ) + } + } + + private predicate relevantState(FlowState state) { + sourceNode(_, state, _) or + sinkNode(_, state, _) or + additionalLocalStateStep(_, state, _, _, _) or + additionalLocalStateStep(_, _, _, state, _) or + additionalJumpStateStep(_, state, _, _, _) or + additionalJumpStateStep(_, _, _, state, _) + } + + private newtype TSummaryCtx1 = + TSummaryCtx1None() or + TSummaryCtx1Param(ParamNodeEx p) + + private newtype TSummaryCtx2 = + TSummaryCtx2None() or + TSummaryCtx2Some(FlowState s) { relevantState(s) } + + private newtype TSummaryCtx3 = + TSummaryCtx3None() or + TSummaryCtx3Some(PartialAccessPath ap) + + private newtype TRevSummaryCtx1 = + TRevSummaryCtx1None() or + TRevSummaryCtx1Some(ReturnPosition pos) + + private newtype TRevSummaryCtx2 = + TRevSummaryCtx2None() or + TRevSummaryCtx2Some(FlowState s) { relevantState(s) } + + private newtype TRevSummaryCtx3 = + TRevSummaryCtx3None() or + TRevSummaryCtx3Some(RevPartialAccessPath ap) + + private newtype TPartialPathNode = + TPartialPathNodeFwd( + NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, + TSummaryCtx3 sc3, PartialAccessPath ap, Configuration config + ) { + sourceNode(node, state, config) and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + sc3 = TSummaryCtx3None() and + ap = TPartialNil(node.getDataFlowType()) and + exists(config.explorationLimit()) + or + partialPathNodeMk0(node, state, cc, sc1, sc2, sc3, ap, config) and + distSrc(node.getEnclosingCallable(), config) <= config.explorationLimit() + } or + TPartialPathNodeRev( + NodeEx node, FlowState state, TRevSummaryCtx1 sc1, TRevSummaryCtx2 sc2, TRevSummaryCtx3 sc3, + RevPartialAccessPath ap, Configuration config + ) { + sinkNode(node, state, config) and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + sc3 = TRevSummaryCtx3None() and + ap = TRevPartialNil() and + exists(config.explorationLimit()) + or + exists(PartialPathNodeRev mid | + revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and + not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and + not fullBarrier(node, config) and + not stateBarrier(node, state, config) and + distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() + ) + } + + pragma[nomagic] + private predicate partialPathNodeMk0( + NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, + TSummaryCtx3 sc3, PartialAccessPath ap, Configuration config + ) { + exists(PartialPathNodeFwd mid | + partialPathStep(mid, node, state, cc, sc1, sc2, sc3, ap, config) and + not fullBarrier(node, config) and + not stateBarrier(node, state, config) and + not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and + if node.asNode() instanceof CastingNode + then compatibleTypes(node.getDataFlowType(), ap.getType()) + else any() + ) + } + + /** + * A `Node` augmented with a call context, an access path, and a configuration. + */ + class PartialPathNode extends TPartialPathNode { + /** Gets a textual representation of this element. */ + string toString() { result = this.getNodeEx().toString() + this.ppAp() } + + /** + * Gets a textual representation of this element, including a textual + * representation of the call context. + */ + string toStringWithContext() { + result = this.getNodeEx().toString() + this.ppAp() + this.ppCtx() + } + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getNodeEx().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + + /** Gets the underlying `Node`. */ + final Node getNode() { this.getNodeEx().projectToNode() = result } + + FlowState getState() { none() } + + private NodeEx getNodeEx() { + result = this.(PartialPathNodeFwd).getNodeEx() or + result = this.(PartialPathNodeRev).getNodeEx() + } + + /** Gets the associated configuration. */ + Configuration getConfiguration() { none() } + + /** Gets a successor of this node, if any. */ + PartialPathNode getASuccessor() { none() } + + /** + * Gets the approximate distance to the nearest source measured in number + * of interprocedural steps. + */ + int getSourceDistance() { + result = distSrc(this.getNodeEx().getEnclosingCallable(), this.getConfiguration()) + } + + /** + * Gets the approximate distance to the nearest sink measured in number + * of interprocedural steps. + */ + int getSinkDistance() { + result = distSink(this.getNodeEx().getEnclosingCallable(), this.getConfiguration()) + } + + private string ppAp() { + exists(string s | + s = this.(PartialPathNodeFwd).getAp().toString() or + s = this.(PartialPathNodeRev).getAp().toString() + | + if s = "" then result = "" else result = " " + s + ) + } + + private string ppCtx() { + result = " <" + this.(PartialPathNodeFwd).getCallContext().toString() + ">" + } + + /** Holds if this is a source in a forward-flow path. */ + predicate isFwdSource() { this.(PartialPathNodeFwd).isSource() } + + /** Holds if this is a sink in a reverse-flow path. */ + predicate isRevSink() { this.(PartialPathNodeRev).isSink() } + } + + /** + * Provides the query predicates needed to include a graph in a path-problem query. + */ + module PartialPathGraph { + /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ + query predicate edges(PartialPathNode a, PartialPathNode b) { a.getASuccessor() = b } + } + + private class PartialPathNodeFwd extends PartialPathNode, TPartialPathNodeFwd { + NodeEx node; + FlowState state; + CallContext cc; + TSummaryCtx1 sc1; + TSummaryCtx2 sc2; + TSummaryCtx3 sc3; + PartialAccessPath ap; + Configuration config; + + PartialPathNodeFwd() { this = TPartialPathNodeFwd(node, state, cc, sc1, sc2, sc3, ap, config) } + + NodeEx getNodeEx() { result = node } + + override FlowState getState() { result = state } + + CallContext getCallContext() { result = cc } + + TSummaryCtx1 getSummaryCtx1() { result = sc1 } + + TSummaryCtx2 getSummaryCtx2() { result = sc2 } + + TSummaryCtx3 getSummaryCtx3() { result = sc3 } + + PartialAccessPath getAp() { result = ap } + + override Configuration getConfiguration() { result = config } + + override PartialPathNodeFwd getASuccessor() { + partialPathStep(this, result.getNodeEx(), result.getState(), result.getCallContext(), + result.getSummaryCtx1(), result.getSummaryCtx2(), result.getSummaryCtx3(), result.getAp(), + result.getConfiguration()) + } + + predicate isSource() { + sourceNode(node, state, config) and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + sc3 = TSummaryCtx3None() and + ap instanceof TPartialNil + } + } + + private class PartialPathNodeRev extends PartialPathNode, TPartialPathNodeRev { + NodeEx node; + FlowState state; + TRevSummaryCtx1 sc1; + TRevSummaryCtx2 sc2; + TRevSummaryCtx3 sc3; + RevPartialAccessPath ap; + Configuration config; + + PartialPathNodeRev() { this = TPartialPathNodeRev(node, state, sc1, sc2, sc3, ap, config) } + + NodeEx getNodeEx() { result = node } + + override FlowState getState() { result = state } + + TRevSummaryCtx1 getSummaryCtx1() { result = sc1 } + + TRevSummaryCtx2 getSummaryCtx2() { result = sc2 } + + TRevSummaryCtx3 getSummaryCtx3() { result = sc3 } + + RevPartialAccessPath getAp() { result = ap } + + override Configuration getConfiguration() { result = config } + + override PartialPathNodeRev getASuccessor() { + revPartialPathStep(result, this.getNodeEx(), this.getState(), this.getSummaryCtx1(), + this.getSummaryCtx2(), this.getSummaryCtx3(), this.getAp(), this.getConfiguration()) + } + + predicate isSink() { + sinkNode(node, state, config) and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + sc3 = TRevSummaryCtx3None() and + ap = TRevPartialNil() + } + } + + private predicate partialPathStep( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, PartialAccessPath ap, Configuration config + ) { + not isUnreachableInCallCached(node.asNode(), cc.(CallContextSpecificCall).getCall()) and + ( + localFlowStep(mid.getNodeEx(), node, config) and + state = mid.getState() and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + ap = mid.getAp() and + config = mid.getConfiguration() + or + additionalLocalFlowStep(mid.getNodeEx(), node, config) and + state = mid.getState() and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + mid.getAp() instanceof PartialAccessPathNil and + ap = TPartialNil(node.getDataFlowType()) and + config = mid.getConfiguration() + or + additionalLocalStateStep(mid.getNodeEx(), mid.getState(), node, state, config) and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + mid.getAp() instanceof PartialAccessPathNil and + ap = TPartialNil(node.getDataFlowType()) and + config = mid.getConfiguration() + ) + or + jumpStep(mid.getNodeEx(), node, config) and + state = mid.getState() and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + sc3 = TSummaryCtx3None() and + ap = mid.getAp() and + config = mid.getConfiguration() + or + additionalJumpStep(mid.getNodeEx(), node, config) and + state = mid.getState() and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + sc3 = TSummaryCtx3None() and + mid.getAp() instanceof PartialAccessPathNil and + ap = TPartialNil(node.getDataFlowType()) and + config = mid.getConfiguration() + or + additionalJumpStateStep(mid.getNodeEx(), mid.getState(), node, state, config) and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + sc3 = TSummaryCtx3None() and + mid.getAp() instanceof PartialAccessPathNil and + ap = TPartialNil(node.getDataFlowType()) and + config = mid.getConfiguration() + or + partialPathStoreStep(mid, _, _, node, ap) and + state = mid.getState() and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + config = mid.getConfiguration() + or + exists(PartialAccessPath ap0, TypedContent tc | + partialPathReadStep(mid, ap0, tc, node, cc, config) and + state = mid.getState() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + apConsFwd(ap, tc, ap0, config) + ) + or + partialPathIntoCallable(mid, node, state, _, cc, sc1, sc2, sc3, _, ap, config) + or + partialPathOutOfCallable(mid, node, state, cc, ap, config) and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + sc3 = TSummaryCtx3None() + or + partialPathThroughCallable(mid, node, state, cc, ap, config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() + } + + bindingset[result, i] + private int unbindInt(int i) { pragma[only_bind_out](i) = pragma[only_bind_out](result) } + + pragma[inline] + private predicate partialPathStoreStep( + PartialPathNodeFwd mid, PartialAccessPath ap1, TypedContent tc, NodeEx node, + PartialAccessPath ap2 + ) { + exists(NodeEx midNode, DataFlowType contentType | + midNode = mid.getNodeEx() and + ap1 = mid.getAp() and + store(midNode, tc, node, contentType, mid.getConfiguration()) and + ap2.getHead() = tc and + ap2.len() = unbindInt(ap1.len() + 1) and + compatibleTypes(ap1.getType(), contentType) + ) + } + + pragma[nomagic] + private predicate apConsFwd( + PartialAccessPath ap1, TypedContent tc, PartialAccessPath ap2, Configuration config + ) { + exists(PartialPathNodeFwd mid | + partialPathStoreStep(mid, ap1, tc, _, ap2) and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate partialPathReadStep( + PartialPathNodeFwd mid, PartialAccessPath ap, TypedContent tc, NodeEx node, CallContext cc, + Configuration config + ) { + exists(NodeEx midNode | + midNode = mid.getNodeEx() and + ap = mid.getAp() and + read(midNode, tc.getContent(), node, pragma[only_bind_into](config)) and + ap.getHead() = tc and + pragma[only_bind_into](config) = mid.getConfiguration() and + cc = mid.getCallContext() + ) + } + + private predicate partialPathOutOfCallable0( + PartialPathNodeFwd mid, ReturnPosition pos, FlowState state, CallContext innercc, + PartialAccessPath ap, Configuration config + ) { + pos = mid.getNodeEx().(RetNodeEx).getReturnPosition() and + state = mid.getState() and + innercc = mid.getCallContext() and + innercc instanceof CallContextNoCall and + ap = mid.getAp() and + config = mid.getConfiguration() + } + + pragma[nomagic] + private predicate partialPathOutOfCallable1( + PartialPathNodeFwd mid, DataFlowCall call, ReturnKindExt kind, FlowState state, CallContext cc, + PartialAccessPath ap, Configuration config + ) { + exists(ReturnPosition pos, DataFlowCallable c, CallContext innercc | + partialPathOutOfCallable0(mid, pos, state, innercc, ap, config) and + c = pos.getCallable() and + kind = pos.getKind() and + resolveReturn(innercc, c, call) + | + if reducedViableImplInReturn(c, call) then cc = TReturn(c, call) else cc = TAnyCallContext() + ) + } + + private predicate partialPathOutOfCallable( + PartialPathNodeFwd mid, NodeEx out, FlowState state, CallContext cc, PartialAccessPath ap, + Configuration config + ) { + exists(ReturnKindExt kind, DataFlowCall call | + partialPathOutOfCallable1(mid, call, kind, state, cc, ap, config) + | + out.asNode() = kind.getAnOutNode(call) + ) + } + + pragma[noinline] + private predicate partialPathIntoArg( + PartialPathNodeFwd mid, ParameterPosition ppos, FlowState state, CallContext cc, + DataFlowCall call, PartialAccessPath ap, Configuration config + ) { + exists(ArgNode arg, ArgumentPosition apos | + arg = mid.getNodeEx().asNode() and + state = mid.getState() and + cc = mid.getCallContext() and + arg.argumentOf(call, apos) and + ap = mid.getAp() and + config = mid.getConfiguration() and + parameterMatch(ppos, apos) + ) + } + + pragma[nomagic] + private predicate partialPathIntoCallable0( + PartialPathNodeFwd mid, DataFlowCallable callable, ParameterPosition pos, FlowState state, + CallContext outercc, DataFlowCall call, PartialAccessPath ap, Configuration config + ) { + partialPathIntoArg(mid, pos, state, outercc, call, ap, config) and + callable = resolveCall(call, outercc) + } + + private predicate partialPathIntoCallable( + PartialPathNodeFwd mid, ParamNodeEx p, FlowState state, CallContext outercc, + CallContextCall innercc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, TSummaryCtx3 sc3, + DataFlowCall call, PartialAccessPath ap, Configuration config + ) { + exists(ParameterPosition pos, DataFlowCallable callable | + partialPathIntoCallable0(mid, callable, pos, state, outercc, call, ap, config) and + p.isParameterOf(callable, pos) and + sc1 = TSummaryCtx1Param(p) and + sc2 = TSummaryCtx2Some(state) and + sc3 = TSummaryCtx3Some(ap) + | + if recordDataFlowCallSite(call, callable) + then innercc = TSpecificCall(call) + else innercc = TSomeCall() + ) + } + + pragma[nomagic] + private predicate paramFlowsThroughInPartialPath( + ReturnKindExt kind, FlowState state, CallContextCall cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, + TSummaryCtx3 sc3, PartialAccessPath ap, Configuration config + ) { + exists(PartialPathNodeFwd mid, RetNodeEx ret | + mid.getNodeEx() = ret and + kind = ret.getKind() and + state = mid.getState() and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + config = mid.getConfiguration() and + ap = mid.getAp() + ) + } + + pragma[noinline] + private predicate partialPathThroughCallable0( + DataFlowCall call, PartialPathNodeFwd mid, ReturnKindExt kind, FlowState state, CallContext cc, + PartialAccessPath ap, Configuration config + ) { + exists(CallContext innercc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, TSummaryCtx3 sc3 | + partialPathIntoCallable(mid, _, _, cc, innercc, sc1, sc2, sc3, call, _, config) and + paramFlowsThroughInPartialPath(kind, state, innercc, sc1, sc2, sc3, ap, config) + ) + } + + private predicate partialPathThroughCallable( + PartialPathNodeFwd mid, NodeEx out, FlowState state, CallContext cc, PartialAccessPath ap, + Configuration config + ) { + exists(DataFlowCall call, ReturnKindExt kind | + partialPathThroughCallable0(call, mid, kind, state, cc, ap, config) and + out.asNode() = kind.getAnOutNode(call) + ) + } + + pragma[nomagic] + private predicate revPartialPathStep( + PartialPathNodeRev mid, NodeEx node, FlowState state, TRevSummaryCtx1 sc1, TRevSummaryCtx2 sc2, + TRevSummaryCtx3 sc3, RevPartialAccessPath ap, Configuration config + ) { + localFlowStep(node, mid.getNodeEx(), config) and + state = mid.getState() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + ap = mid.getAp() and + config = mid.getConfiguration() + or + additionalLocalFlowStep(node, mid.getNodeEx(), config) and + state = mid.getState() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + mid.getAp() instanceof RevPartialAccessPathNil and + ap = TRevPartialNil() and + config = mid.getConfiguration() + or + additionalLocalStateStep(node, state, mid.getNodeEx(), mid.getState(), config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + mid.getAp() instanceof RevPartialAccessPathNil and + ap = TRevPartialNil() and + config = mid.getConfiguration() + or + jumpStep(node, mid.getNodeEx(), config) and + state = mid.getState() and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + sc3 = TRevSummaryCtx3None() and + ap = mid.getAp() and + config = mid.getConfiguration() + or + additionalJumpStep(node, mid.getNodeEx(), config) and + state = mid.getState() and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + sc3 = TRevSummaryCtx3None() and + mid.getAp() instanceof RevPartialAccessPathNil and + ap = TRevPartialNil() and + config = mid.getConfiguration() + or + additionalJumpStateStep(node, state, mid.getNodeEx(), mid.getState(), config) and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + sc3 = TRevSummaryCtx3None() and + mid.getAp() instanceof RevPartialAccessPathNil and + ap = TRevPartialNil() and + config = mid.getConfiguration() + or + revPartialPathReadStep(mid, _, _, node, ap) and + state = mid.getState() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + config = mid.getConfiguration() + or + exists(RevPartialAccessPath ap0, Content c | + revPartialPathStoreStep(mid, ap0, c, node, config) and + state = mid.getState() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + apConsRev(ap, c, ap0, config) + ) + or + exists(ParamNodeEx p | + mid.getNodeEx() = p and + viableParamArgEx(_, p, node) and + state = mid.getState() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + sc3 = TRevSummaryCtx3None() and + ap = mid.getAp() and + config = mid.getConfiguration() + ) + or + exists(ReturnPosition pos | + revPartialPathIntoReturn(mid, pos, state, sc1, sc2, sc3, _, ap, config) and + pos = getReturnPosition(node.asNode()) + ) + or + revPartialPathThroughCallable(mid, node, state, ap, config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() + } + + pragma[inline] + private predicate revPartialPathReadStep( + PartialPathNodeRev mid, RevPartialAccessPath ap1, Content c, NodeEx node, + RevPartialAccessPath ap2 + ) { + exists(NodeEx midNode | + midNode = mid.getNodeEx() and + ap1 = mid.getAp() and + read(node, c, midNode, mid.getConfiguration()) and + ap2.getHead() = c and + ap2.len() = unbindInt(ap1.len() + 1) + ) + } + + pragma[nomagic] + private predicate apConsRev( + RevPartialAccessPath ap1, Content c, RevPartialAccessPath ap2, Configuration config + ) { + exists(PartialPathNodeRev mid | + revPartialPathReadStep(mid, ap1, c, _, ap2) and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate revPartialPathStoreStep( + PartialPathNodeRev mid, RevPartialAccessPath ap, Content c, NodeEx node, Configuration config + ) { + exists(NodeEx midNode, TypedContent tc | + midNode = mid.getNodeEx() and + ap = mid.getAp() and + store(node, tc, midNode, _, config) and + ap.getHead() = c and + config = mid.getConfiguration() and + tc.getContent() = c + ) + } + + pragma[nomagic] + private predicate revPartialPathIntoReturn( + PartialPathNodeRev mid, ReturnPosition pos, FlowState state, TRevSummaryCtx1Some sc1, + TRevSummaryCtx2Some sc2, TRevSummaryCtx3Some sc3, DataFlowCall call, RevPartialAccessPath ap, + Configuration config + ) { + exists(NodeEx out | + mid.getNodeEx() = out and + mid.getState() = state and + viableReturnPosOutEx(call, pos, out) and + sc1 = TRevSummaryCtx1Some(pos) and + sc2 = TRevSummaryCtx2Some(state) and + sc3 = TRevSummaryCtx3Some(ap) and + ap = mid.getAp() and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate revPartialPathFlowsThrough( + ArgumentPosition apos, FlowState state, TRevSummaryCtx1Some sc1, TRevSummaryCtx2Some sc2, + TRevSummaryCtx3Some sc3, RevPartialAccessPath ap, Configuration config + ) { + exists(PartialPathNodeRev mid, ParamNodeEx p, ParameterPosition ppos | + mid.getNodeEx() = p and + mid.getState() = state and + p.getPosition() = ppos and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc3 = mid.getSummaryCtx3() and + ap = mid.getAp() and + config = mid.getConfiguration() and + parameterMatch(ppos, apos) + ) + } + + pragma[nomagic] + private predicate revPartialPathThroughCallable0( + DataFlowCall call, PartialPathNodeRev mid, ArgumentPosition pos, FlowState state, + RevPartialAccessPath ap, Configuration config + ) { + exists(TRevSummaryCtx1Some sc1, TRevSummaryCtx2Some sc2, TRevSummaryCtx3Some sc3 | + revPartialPathIntoReturn(mid, _, _, sc1, sc2, sc3, call, _, config) and + revPartialPathFlowsThrough(pos, state, sc1, sc2, sc3, ap, config) + ) + } + + pragma[nomagic] + private predicate revPartialPathThroughCallable( + PartialPathNodeRev mid, ArgNodeEx node, FlowState state, RevPartialAccessPath ap, + Configuration config + ) { + exists(DataFlowCall call, ArgumentPosition pos | + revPartialPathThroughCallable0(call, mid, pos, state, ap, config) and + node.asNode().(ArgNode).argumentOf(call, pos) + ) + } +} + +import FlowExploration + +private predicate partialFlow( + PartialPathNode source, PartialPathNode node, Configuration configuration +) { + source.getConfiguration() = configuration and + source.isFwdSource() and + node = source.getASuccessor+() +} + +private predicate revPartialFlow( + PartialPathNode node, PartialPathNode sink, Configuration configuration +) { + sink.getConfiguration() = configuration and + sink.isRevSink() and + node.getASuccessor+() = sink +} 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 60825ea4667..3d013a504c5 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -19,7 +19,7 @@ private import semmle.code.csharp.frameworks.system.Collections private import semmle.code.csharp.frameworks.system.threading.Tasks /** Gets the callable in which this node occurs. */ -DataFlowCallable nodeGetEnclosingCallable(Node n) { result = n.getEnclosingCallable() } +DataFlowCallable nodeGetEnclosingCallable(NodeImpl n) { result = n.getEnclosingCallableImpl() } /** Holds if `p` is a `ParameterNode` of `c` with position `pos`. */ predicate isParameterNode(ParameterNodeImpl p, DataFlowCallable c, ParameterPosition pos) { @@ -65,9 +65,9 @@ abstract class NodeImpl extends Node { private class ExprNodeImpl extends ExprNode, NodeImpl { override DataFlowCallable getEnclosingCallableImpl() { - result = this.getExpr().(CIL::Expr).getEnclosingCallable() + result.getUnderlyingCallable() = this.getExpr().(CIL::Expr).getEnclosingCallable() or - result = this.getControlFlowNodeImpl().getEnclosingCallable() + result.getUnderlyingCallable() = this.getControlFlowNodeImpl().getEnclosingCallable() } override DotNet::Type getTypeImpl() { @@ -421,7 +421,8 @@ predicate simpleLocalFlowStep(Node nodeFrom, Node nodeTo) { or exists(Ssa::Definition def | LocalFlow::localSsaFlowStepUseUse(def, nodeFrom, nodeTo) and - not FlowSummaryImpl::Private::Steps::summaryClearsContentArg(nodeFrom, _) and + not FlowSummaryImpl::Private::Steps::prohibitsUseUseFlow(nodeFrom, + any(DataFlowSummarizedCallable sc)) and not LocalFlow::usesInstanceField(def) ) or @@ -506,10 +507,10 @@ private predicate fieldOrPropertyStore(Expr e, Content c, Expr src, Expr q, bool f instanceof InstanceFieldOrProperty or exists( - FlowSummary::SummarizedCallable callable, + FlowSummaryImpl::Public::SummarizedCallable sc, FlowSummaryImpl::Public::SummaryComponentStack input | - callable.propagatesFlow(input, _, _) and + sc.propagatesFlow(input, _, _) and input.contains(FlowSummary::SummaryComponent::content(f.getContent())) ) ) @@ -693,9 +694,12 @@ private module Cached { not def.(Ssa::ExplicitDefinition).getADefinition() instanceof AssignableDefinitions::ImplicitParameterDefinition } or - TExplicitParameterNode(DotNet::Parameter p) { p = any(DataFlowCallable c).getAParameter() } or + TExplicitParameterNode(DotNet::Parameter p) { + p = any(DataFlowCallable dfc).asCallable().getAParameter() + } or TInstanceParameterNode(Callable c) { - c.isUnboundDeclaration() and not c.(Modifiable).isStatic() + c = any(DataFlowCallable dfc).asCallable() and + not c.(Modifiable).isStatic() } or TYieldReturnNode(ControlFlow::Nodes::ElementNode cfn) { any(Callable c).canYieldReturn(cfn.getElement()) @@ -736,9 +740,12 @@ private module Cached { ) ) } or - TSummaryNode(FlowSummary::SummarizedCallable c, FlowSummaryImpl::Private::SummaryNodeState state) { + TSummaryNode(DataFlowSummarizedCallable c, FlowSummaryImpl::Private::SummaryNodeState state) { FlowSummaryImpl::Private::summaryNodeRange(c, state) } or + TSummaryParameterNode(DataFlowSummarizedCallable c, ParameterPosition pos) { + FlowSummaryImpl::Private::summaryParameterNodeRange(c, pos) + } or TParamsArgumentNode(ControlFlow::Node callCfn) { callCfn = any(Call c | isParamsArg(c, _, _)).getAControlFlowNode() } @@ -760,7 +767,8 @@ private module Cached { or // Simple flow through library code is included in the exposed local // step relation, even though flow is technically inter-procedural - FlowSummaryImpl::Private::Steps::summaryThroughStep(nodeFrom, nodeTo, true) + FlowSummaryImpl::Private::Steps::summaryThroughStepValue(nodeFrom, nodeTo, + any(DataFlowSummarizedCallable sc)) } cached @@ -810,11 +818,7 @@ predicate nodeIsHidden(Node n) { def instanceof Ssa::ImplicitCallDefinition ) or - exists(Parameter p | p = n.(ParameterNode).getParameter() | - not p.fromSource() - or - p.getCallable() instanceof FlowSummary::SummarizedCallable - ) + exists(Parameter p | p = n.(ParameterNode).getParameter() | not p.fromSource()) or n = TInstanceParameterNode(any(Callable c | @@ -831,6 +835,8 @@ predicate nodeIsHidden(Node n) { or n instanceof SummaryNode or + n instanceof SummaryParameterNode + or n instanceof ParamsArgumentNode or n.asExpr() = any(WithExpr we).getInitializer() @@ -845,7 +851,9 @@ class SsaDefinitionNode extends NodeImpl, TSsaDefinitionNode { /** Gets the underlying SSA definition. */ Ssa::Definition getDefinition() { result = def } - override DataFlowCallable getEnclosingCallableImpl() { result = def.getEnclosingCallable() } + override DataFlowCallable getEnclosingCallableImpl() { + result.getUnderlyingCallable() = def.getEnclosingCallable() + } override Type getTypeImpl() { result = def.getSourceVariable().getType() } @@ -877,10 +885,12 @@ private module ParameterNodes { } override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { - c.getParameter(pos.getPosition()) = parameter + c.asCallable().getParameter(pos.getPosition()) = parameter } - override DataFlowCallable getEnclosingCallableImpl() { result = parameter.getCallable() } + override DataFlowCallable getEnclosingCallableImpl() { + result.asCallable() = parameter.getCallable() + } override DotNet::Type getTypeImpl() { result = parameter.getType() } @@ -901,10 +911,12 @@ private module ParameterNodes { Callable getCallable() { result = callable } override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { - callable = c and pos.isThisParameter() + callable = c.asCallable() and pos.isThisParameter() } - override DataFlowCallable getEnclosingCallableImpl() { result = callable } + override DataFlowCallable getEnclosingCallableImpl() { + result.getUnderlyingCallable() = callable + } override Type getTypeImpl() { result = callable.getDeclaringType() } @@ -951,9 +963,35 @@ private module ParameterNodes { override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { pos.isImplicitCapturedParameterPosition(def.getSourceVariable().getAssignable()) and - c = this.getEnclosingCallable() + c.getUnderlyingCallable() = this.getEnclosingCallable() } } + + /** A parameter for a library callable with a flow summary. */ + class SummaryParameterNode extends ParameterNodeImpl, TSummaryParameterNode { + private FlowSummaryImpl::Public::SummarizedCallable sc; + private ParameterPosition pos_; + + SummaryParameterNode() { this = TSummaryParameterNode(sc, pos_) } + + override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { + sc = c.asSummarizedCallable() and pos = pos_ + } + + override DataFlowCallable getEnclosingCallableImpl() { result.asSummarizedCallable() = sc } + + override Type getTypeImpl() { + exists(int i | pos_.getPosition() = i and result = sc.getParameter(i).getType()) + or + pos_.isThisParameter() and result = sc.getDeclaringType() + } + + override ControlFlow::Node getControlFlowNodeImpl() { none() } + + override EmptyLocation getLocationImpl() { any() } + + override string toStringImpl() { result = "parameter " + pos_ + " of " + sc } + } } import ParameterNodes @@ -1039,7 +1077,9 @@ private module ArgumentNodes { call.getControlFlowNode() = cfn } - override DataFlowCallable getEnclosingCallableImpl() { result = cfn.getEnclosingCallable() } + override DataFlowCallable getEnclosingCallableImpl() { + result.getUnderlyingCallable() = cfn.getEnclosingCallable() + } override Type getTypeImpl() { result = v.getType() } @@ -1066,7 +1106,9 @@ private module ArgumentNodes { override ControlFlow::Node getControlFlowNodeImpl() { result = cfn } - override DataFlowCallable getEnclosingCallableImpl() { result = cfn.getEnclosingCallable() } + override DataFlowCallable getEnclosingCallableImpl() { + result.getUnderlyingCallable() = cfn.getEnclosingCallable() + } override Type getTypeImpl() { result = cfn.getElement().(Expr).getType() } @@ -1103,7 +1145,9 @@ private module ArgumentNodes { pos.getPosition() = this.getParameter().getPosition() } - override DataFlowCallable getEnclosingCallableImpl() { result = callCfn.getEnclosingCallable() } + override DataFlowCallable getEnclosingCallableImpl() { + result.getUnderlyingCallable() = callCfn.getEnclosingCallable() + } override Type getTypeImpl() { result = this.getParameter().getType() } @@ -1182,7 +1226,9 @@ private module ReturnNodes { override NormalReturnKind getKind() { any() } - override DataFlowCallable getEnclosingCallableImpl() { result = yrs.getEnclosingCallable() } + override DataFlowCallable getEnclosingCallableImpl() { + result.getUnderlyingCallable() = yrs.getEnclosingCallable() + } override Type getTypeImpl() { result = yrs.getEnclosingCallable().getReturnType() } @@ -1206,7 +1252,9 @@ private module ReturnNodes { override NormalReturnKind getKind() { any() } - override DataFlowCallable getEnclosingCallableImpl() { result = expr.getEnclosingCallable() } + override DataFlowCallable getEnclosingCallableImpl() { + result.getUnderlyingCallable() = expr.getEnclosingCallable() + } override Type getTypeImpl() { result = expr.getEnclosingCallable().getReturnType() } @@ -1408,12 +1456,12 @@ import OutNodes /** A data-flow node used to model flow summaries. */ class SummaryNode extends NodeImpl, TSummaryNode { - private FlowSummary::SummarizedCallable c; + private FlowSummaryImpl::Public::SummarizedCallable c; private FlowSummaryImpl::Private::SummaryNodeState state; SummaryNode() { this = TSummaryNode(c, state) } - override DataFlowCallable getEnclosingCallableImpl() { result = c } + override DataFlowCallable getEnclosingCallableImpl() { result.asSummarizedCallable() = c } override DataFlowType getDataFlowType() { result = FlowSummaryImpl::Private::summaryNodeType(this) @@ -1504,9 +1552,9 @@ predicate jumpStep(Node pred, Node succ) { flr.hasNonlocalValue() ) or - exists(JumpReturnKind jrk, DataFlowCall call | + exists(JumpReturnKind jrk, NonDelegateDataFlowCall call | FlowSummaryImpl::Private::summaryReturnNode(pred, jrk) and - viableCallable(call) = jrk.getTarget() and + jrk.getTarget() = call.getATarget(_) and succ = getAnOutNode(call, jrk.getTargetReturnKind()) ) } @@ -1714,6 +1762,14 @@ predicate clearsContent(Node n, Content c) { ) } +/** + * Holds if the value that is being tracked is expected to be stored inside content `c` + * at node `n`. + */ +predicate expectsContent(Node n, ContentSet c) { + FlowSummaryImpl::Private::Steps::summaryExpectsContent(n, c) +} + /** * Holds if the node `n` is unreachable when the call context is `call`. */ @@ -1846,7 +1902,9 @@ private module PostUpdateNodes { .hasExprPath(_, cfn, _, call.getControlFlowNode()) } - override DataFlowCallable getEnclosingCallableImpl() { result = cfn.getEnclosingCallable() } + override DataFlowCallable getEnclosingCallableImpl() { + result.getUnderlyingCallable() = cfn.getEnclosingCallable() + } override DotNet::Type getTypeImpl() { result = oc.getType() } @@ -1864,7 +1922,9 @@ private module PostUpdateNodes { override ExprNode getPreUpdateNode() { cfn = result.getControlFlowNode() } - override DataFlowCallable getEnclosingCallableImpl() { result = cfn.getEnclosingCallable() } + override DataFlowCallable getEnclosingCallableImpl() { + result.getUnderlyingCallable() = cfn.getEnclosingCallable() + } override Type getTypeImpl() { result = cfn.getElement().(Expr).getType() } @@ -1952,11 +2012,12 @@ class LambdaCallKind = Unit; /** Holds if `creation` is an expression that creates a delegate for `c`. */ predicate lambdaCreation(ExprNode creation, LambdaCallKind kind, DataFlowCallable c) { exists(Expr e | e = creation.getExpr() | - c = e.(AnonymousFunctionExpr) + c.getUnderlyingCallable() = e.(AnonymousFunctionExpr) or - c = e.(CallableAccess).getTarget().getUnboundDeclaration() + c.getUnderlyingCallable() = e.(CallableAccess).getTarget().getUnboundDeclaration() or - c = e.(AddressOfExpr).getOperand().(CallableAccess).getTarget().getUnboundDeclaration() + c.getUnderlyingCallable() = + e.(AddressOfExpr).getOperand().(CallableAccess).getTarget().getUnboundDeclaration() ) and kind = TMkUnit() } @@ -2039,7 +2100,7 @@ abstract class SyntheticField extends string { predicate containerContent(DataFlow::Content c) { c instanceof DataFlow::ElementContent } /** Gets the string representation of the parameters of `c`. */ -string parameterQualifiedTypeNamesToString(DataFlowCallable c) { +string parameterQualifiedTypeNamesToString(DotNet::Callable c) { result = concat(Parameter p, int i | p = c.getParameter(i) @@ -2053,7 +2114,7 @@ string parameterQualifiedTypeNamesToString(DataFlowCallable c) { */ module Csv { /** Holds if the summary should apply for all overrides of `c`. */ - predicate isBaseCallableOrPrototype(DataFlowCallable c) { + predicate isBaseCallableOrPrototype(DotNet::Callable c) { c.getDeclaringType() instanceof Interface or exists(Modifiable m | m = [c.(Modifiable), c.(Accessor).getDeclaration()] | @@ -2064,12 +2125,12 @@ module Csv { } /** Gets a string representing whether the summary should apply for all overrides of `c`. */ - private string getCallableOverride(DataFlowCallable c) { + private string getCallableOverride(DotNet::Callable c) { if isBaseCallableOrPrototype(c) then result = "true" else result = "false" } /** Computes the first 6 columns for CSV rows of `c`. */ - string asPartialModel(DataFlowCallable c) { + string asPartialModel(DotNet::Callable c) { exists(string namespace, string type, string name | c.getDeclaringType().hasQualifiedName(namespace, type) and c.hasQualifiedName(_, name) and 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 7151b5cb29f..388179eeb8e 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -40,8 +40,8 @@ class Node extends TNode { final DotNet::Type getType() { result = this.(NodeImpl).getTypeImpl() } /** Gets the enclosing callable of this node. */ - final DataFlowCallable getEnclosingCallable() { - result = this.(NodeImpl).getEnclosingCallableImpl() + final Callable getEnclosingCallable() { + result = this.(NodeImpl).getEnclosingCallableImpl().getUnderlyingCallable() } /** Gets the control flow node corresponding to this node, if any. */ @@ -103,7 +103,7 @@ class ParameterNode extends Node instanceof ParameterNodeImpl { DotNet::Parameter getParameter() { exists(DataFlowCallable c, ParameterPosition ppos | super.isParameterOf(c, ppos) and - result = c.getParameter(ppos.getPosition()) + result = c.getUnderlyingCallable().getParameter(ppos.getPosition()) ) } @@ -252,3 +252,23 @@ class ElementContent extends Content, TElementContent { override Location getLocation() { result instanceof EmptyLocation } } + +/** + * An entity that represents a set of `Content`s. + * + * The set may be interpreted differently depending on whether it is + * stored into (`getAStoreContent`) or read from (`getAReadContent`). + */ +class ContentSet instanceof Content { + /** Gets a content that may be stored into when storing into this set. */ + Content getAStoreContent() { result = this } + + /** Gets a content that may be read from when reading from this set. */ + Content getAReadContent() { result = this } + + /** Gets a textual representation of this content set. */ + string toString() { result = super.toString() } + + /** Gets the location of this content set. */ + Location getLocation() { result = super.getLocation() } +} 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 52701d1a118..d907032547d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -24,7 +24,11 @@ module Public { class SummaryComponent extends TSummaryComponent { /** Gets a textual representation of this summary component. */ string toString() { - exists(Content c | this = TContentSummaryComponent(c) and result = c.toString()) + exists(ContentSet c | this = TContentSummaryComponent(c) and result = c.toString()) + or + exists(ContentSet c | this = TWithoutContentSummaryComponent(c) and result = "without " + c) + or + exists(ContentSet c | this = TWithContentSummaryComponent(c) and result = "with " + c) or exists(ArgumentPosition pos | this = TParameterSummaryComponent(pos) and result = "parameter " + pos @@ -41,7 +45,13 @@ module Public { /** Provides predicates for constructing summary components. */ module SummaryComponent { /** Gets a summary component for content `c`. */ - SummaryComponent content(Content c) { result = TContentSummaryComponent(c) } + SummaryComponent content(ContentSet c) { result = TContentSummaryComponent(c) } + + /** Gets a summary component where data is not allowed to be stored in `c`. */ + SummaryComponent withoutContent(ContentSet c) { result = TWithoutContentSummaryComponent(c) } + + /** Gets a summary component where data must be stored in `c`. */ + SummaryComponent withContent(ContentSet c) { result = TWithContentSummaryComponent(c) } /** Gets a summary component for a parameter at position `pos`. */ SummaryComponent parameter(ArgumentPosition pos) { result = TParameterSummaryComponent(pos) } @@ -185,7 +195,10 @@ module Public { } /** A callable with a flow summary. */ - abstract class SummarizedCallable extends DataFlowCallable { + abstract class SummarizedCallable extends SummarizedCallableBase { + bindingset[this] + SummarizedCallable() { any() } + /** * Holds if data may flow from `input` to `output` through this callable. * @@ -216,9 +229,16 @@ module Public { /** * Holds if values stored inside `content` are cleared on objects passed as * arguments at position `pos` to this callable. + * + * TODO: Remove once all languages support `WithoutContent` tokens. */ pragma[nomagic] - predicate clearsContent(ParameterPosition pos, Content content) { none() } + predicate clearsContent(ParameterPosition pos, ContentSet content) { none() } + + /** + * Holds if the summary is auto generated. + */ + predicate isAutoGenerated() { none() } } } @@ -231,10 +251,12 @@ module Private { import AccessPathSyntax newtype TSummaryComponent = - TContentSummaryComponent(Content c) or + TContentSummaryComponent(ContentSet c) or TParameterSummaryComponent(ArgumentPosition pos) or TArgumentSummaryComponent(ParameterPosition pos) or - TReturnSummaryComponent(ReturnKind rk) + TReturnSummaryComponent(ReturnKind rk) or + TWithoutContentSummaryComponent(ContentSet c) or + TWithContentSummaryComponent(ContentSet c) private TParameterSummaryComponent thisParam() { result = TParameterSummaryComponent(instanceParameterPosition()) @@ -296,6 +318,23 @@ module Private { SummaryComponentStack::singleton(TArgumentSummaryComponent(_))) and preservesValue = preservesValue1.booleanAnd(preservesValue2) ) + or + exists(ParameterPosition ppos, ContentSet cs | + c.clearsContent(ppos, cs) and + input = SummaryComponentStack::push(SummaryComponent::withoutContent(cs), output) and + output = SummaryComponentStack::argument(ppos) and + preservesValue = true + ) + } + + private class MkClearStack extends RequiredSummaryComponentStack { + override predicate required(SummaryComponent head, SummaryComponentStack tail) { + exists(SummarizedCallable sc, ParameterPosition ppos, ContentSet cs | + sc.clearsContent(ppos, cs) and + head = SummaryComponent::withoutContent(cs) and + tail = SummaryComponentStack::argument(ppos) + ) + } } /** @@ -378,10 +417,7 @@ module Private { private newtype TSummaryNodeState = TSummaryNodeInputState(SummaryComponentStack s) { inputState(_, s) } or - TSummaryNodeOutputState(SummaryComponentStack s) { outputState(_, s) } or - TSummaryNodeClearsContentState(ParameterPosition pos, boolean post) { - any(SummarizedCallable sc).clearsContent(pos, _) and post in [false, true] - } + TSummaryNodeOutputState(SummaryComponentStack s) { outputState(_, s) } /** * A state used to break up (complex) flow summaries into atomic flow steps. @@ -428,12 +464,6 @@ module Private { this = TSummaryNodeOutputState(s) and result = "to write: " + s ) - or - exists(ParameterPosition pos, boolean post, string postStr | - this = TSummaryNodeClearsContentState(pos, post) and - (if post = true then postStr = " (post)" else postStr = "") and - result = "clear: " + pos + postStr - ) } } @@ -457,11 +487,6 @@ module Private { not parameterReadState(c, state, _) or state.isOutputState(c, _) - or - exists(ParameterPosition pos | - c.clearsContent(pos, _) and - state = TSummaryNodeClearsContentState(pos, _) - ) } pragma[noinline] @@ -471,7 +496,7 @@ module Private { or exists(ParameterPosition pos | parameterReadState(c, state, pos) and - result.(ParamNode).isParameterOf(c, pos) + result.(ParamNode).isParameterOf(inject(c), pos) ) ) } @@ -497,8 +522,6 @@ module Private { parameterReadState(c, _, pos) or isParameterPostUpdate(_, c, pos) - or - c.clearsContent(pos, _) } private predicate callbackOutput( @@ -506,7 +529,7 @@ module Private { ) { any(SummaryNodeState state).isInputState(c, s) and s.head() = TReturnSummaryComponent(rk) and - receiver = summaryNodeInputState(c, s.drop(1)) + receiver = summaryNodeInputState(c, s.tail()) } private predicate callbackInput( @@ -514,7 +537,7 @@ module Private { ) { any(SummaryNodeState state).isOutputState(c, s) and s.head() = TParameterSummaryComponent(pos) and - receiver = summaryNodeInputState(c, s.drop(1)) + receiver = summaryNodeInputState(c, s.tail()) } /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ @@ -540,21 +563,27 @@ module Private { exists(SummarizedCallable c, SummaryComponentStack s, SummaryComponent head | head = s.head() | n = summaryNodeInputState(c, s) and ( - exists(Content cont | - head = TContentSummaryComponent(cont) and result = getContentType(cont) + exists(ContentSet cont | result = getContentType(cont) | + head = TContentSummaryComponent(cont) or + head = TWithContentSummaryComponent(cont) + ) + or + exists(ContentSet cont | + head = TWithoutContentSummaryComponent(cont) and + result = getNodeType(summaryNodeInputState(c, s.tail())) ) or exists(ReturnKind rk | head = TReturnSummaryComponent(rk) and result = getCallbackReturnType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), - s.drop(1))), rk) + s.tail())), rk) ) ) or n = summaryNodeOutputState(c, s) and ( - exists(Content cont | + exists(ContentSet cont | head = TContentSummaryComponent(cont) and result = getContentType(cont) ) or @@ -567,16 +596,10 @@ module Private { exists(ArgumentPosition pos | head = TParameterSummaryComponent(pos) | result = getCallbackParameterType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), - s.drop(1))), pos) + s.tail())), pos) ) ) ) - or - exists(SummarizedCallable c, ParameterPosition pos, ParamNode p | - n = summaryNode(c, TSummaryNodeClearsContentState(pos, false)) and - p.isParameterOf(c, pos) and - result = getNodeType(p) - ) } /** Holds if summary node `out` contains output of kind `rk` from call `c`. */ @@ -601,10 +624,7 @@ module Private { predicate summaryPostUpdateNode(Node post, Node pre) { exists(SummarizedCallable c, ParameterPosition pos | isParameterPostUpdate(post, c, pos) and - pre.(ParamNode).isParameterOf(c, pos) - or - pre = summaryNode(c, TSummaryNodeClearsContentState(pos, false)) and - post = summaryNode(c, TSummaryNodeClearsContentState(pos, true)) + pre.(ParamNode).isParameterOf(inject(c), pos) ) or exists(SummarizedCallable callable, SummaryComponentStack s | @@ -627,9 +647,7 @@ module Private { * node, and back out to `p`. */ predicate summaryAllowParameterReturnInSelf(ParamNode p) { - exists(SummarizedCallable c, ParameterPosition ppos | p.isParameterOf(c, ppos) | - c.clearsContent(ppos, _) - or + exists(SummarizedCallable c, ParameterPosition ppos | p.isParameterOf(inject(c), ppos) | exists(SummaryComponentStack inputContents, SummaryComponentStack outputContents | summary(c, inputContents, outputContents, _) and inputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) and @@ -658,9 +676,10 @@ module Private { preservesValue = false and not summary(c, inputContents, outputContents, true) ) or - exists(SummarizedCallable c, ParameterPosition pos | - pred.(ParamNode).isParameterOf(c, pos) and - succ = summaryNode(c, TSummaryNodeClearsContentState(pos, _)) and + exists(SummarizedCallable c, SummaryComponentStack s | + pred = summaryNodeInputState(c, s.tail()) and + succ = summaryNodeInputState(c, s) and + s.head() = [SummaryComponent::withContent(_), SummaryComponent::withoutContent(_)] and preservesValue = true ) } @@ -669,9 +688,9 @@ module Private { * Holds if there is a read step of content `c` from `pred` to `succ`, which * is synthesized from a flow summary. */ - predicate summaryReadStep(Node pred, Content c, Node succ) { + predicate summaryReadStep(Node pred, ContentSet c, Node succ) { exists(SummarizedCallable sc, SummaryComponentStack s | - pred = summaryNodeInputState(sc, s.drop(1)) and + pred = summaryNodeInputState(sc, s.tail()) and succ = summaryNodeInputState(sc, s) and SummaryComponent::content(c) = s.head() ) @@ -681,10 +700,10 @@ module Private { * Holds if there is a store step of content `c` from `pred` to `succ`, which * is synthesized from a flow summary. */ - predicate summaryStoreStep(Node pred, Content c, Node succ) { + predicate summaryStoreStep(Node pred, ContentSet c, Node succ) { exists(SummarizedCallable sc, SummaryComponentStack s | pred = summaryNodeOutputState(sc, s) and - succ = summaryNodeOutputState(sc, s.drop(1)) and + succ = summaryNodeOutputState(sc, s.tail()) and SummaryComponent::content(c) = s.head() ) } @@ -708,10 +727,23 @@ module Private { * `a` on line 2 to the post-update node for `a` on that line (via an intermediate * node where field `b` is cleared). */ - predicate summaryClearsContent(Node n, Content c) { - exists(SummarizedCallable sc, ParameterPosition pos | - n = summaryNode(sc, TSummaryNodeClearsContentState(pos, true)) and - sc.clearsContent(pos, c) + predicate summaryClearsContent(Node n, ContentSet c) { + exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | + n = summaryNode(sc, state) and + state.isInputState(sc, stack) and + stack.head() = SummaryComponent::withoutContent(c) + ) + } + + /** + * Holds if the value that is being tracked is expected to be stored inside + * content `c` at `n`. + */ + predicate summaryExpectsContent(Node n, ContentSet c) { + exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | + n = summaryNode(sc, state) and + state.isInputState(sc, stack) and + stack.head() = SummaryComponent::withContent(c) ) } @@ -719,55 +751,79 @@ module Private { private predicate viableParam( DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos, ParamNode p ) { - p.isParameterOf(sc, ppos) and - sc = viableCallable(call) - } - - /** - * Holds if values stored inside content `c` are cleared inside a - * callable to which `arg` is an argument. - * - * In such cases, it is important to prevent use-use flow out of - * `arg` (see comment for `summaryClearsContent`). - */ - predicate summaryClearsContentArg(ArgNode arg, Content c) { - exists(DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos | - argumentPositionMatch(call, arg, ppos) and - viableParam(call, sc, ppos, _) and - sc.clearsContent(ppos, c) + exists(DataFlowCallable c | + c = inject(sc) and + p.isParameterOf(c, ppos) and + c = viableCallable(call) ) } pragma[nomagic] - private ParamNode summaryArgParam0(DataFlowCall call, ArgNode arg) { - exists(ParameterPosition ppos, SummarizedCallable sc | + private ParamNode summaryArgParam0(DataFlowCall call, ArgNode arg, SummarizedCallable sc) { + exists(ParameterPosition ppos | argumentPositionMatch(call, arg, ppos) and viableParam(call, sc, ppos, result) ) } + /** + * Holds if use-use flow starting from `arg` should be prohibited. + * + * This is the case when `arg` is the argument of a call that targets a + * flow summary where the corresponding parameter either clears contents + * or expects contents. + */ pragma[nomagic] - private ParamNode summaryArgParam(ArgNode arg, ReturnKindExt rk, OutNodeExt out) { - exists(DataFlowCall call | - result = summaryArgParam0(call, arg) and - out = rk.getAnOutNode(call) + predicate prohibitsUseUseFlow(ArgNode arg, SummarizedCallable sc) { + exists(ParamNode p, Node mid, ParameterPosition ppos, Node ret | + p = summaryArgParam0(_, arg, sc) and + p.isParameterOf(_, ppos) and + summaryLocalStep(p, mid, true) and + summaryLocalStep(mid, ret, true) and + isParameterPostUpdate(ret, _, ppos) + | + summaryClearsContent(mid, _) or + summaryExpectsContent(mid, _) + ) + } + + bindingset[ret] + private ParamNode summaryArgParam( + ArgNode arg, ReturnNodeExt ret, OutNodeExt out, SummarizedCallable sc + ) { + exists(DataFlowCall call, ReturnKindExt rk | + result = summaryArgParam0(call, arg, sc) and + ret.getKind() = pragma[only_bind_into](rk) and + out = pragma[only_bind_into](rk).getAnOutNode(call) ) } /** - * Holds if `arg` flows to `out` using a simple flow summary, that is, a flow - * summary without reads and stores. + * Holds if `arg` flows to `out` using a simple value-preserving flow + * summary, that is, a flow summary without reads and stores. * * NOTE: This step should not be used in global data-flow/taint-tracking, but may * be useful to include in the exposed local data-flow/taint-tracking relations. */ - predicate summaryThroughStep(ArgNode arg, Node out, boolean preservesValue) { - exists(ReturnKindExt rk, ReturnNodeExt ret | - summaryLocalStep(summaryArgParam(arg, rk, out), ret, preservesValue) and - ret.getKind() = rk + predicate summaryThroughStepValue(ArgNode arg, Node out, SummarizedCallable sc) { + exists(ReturnKind rk, ReturnNode ret, DataFlowCall call | + summaryLocalStep(summaryArgParam0(call, arg, sc), ret, true) and + ret.getKind() = pragma[only_bind_into](rk) and + out = getAnOutNode(call, pragma[only_bind_into](rk)) ) } + /** + * Holds if `arg` flows to `out` using a simple flow summary involving taint + * step, that is, a flow summary without reads and stores. + * + * NOTE: This step should not be used in global data-flow/taint-tracking, but may + * be useful to include in the exposed local data-flow/taint-tracking relations. + */ + predicate summaryThroughStepTaint(ArgNode arg, Node out, SummarizedCallable sc) { + exists(ReturnNodeExt ret | summaryLocalStep(summaryArgParam(arg, ret, out, sc), ret, false)) + } + /** * Holds if there is a read(+taint) of `c` from `arg` to `out` using a * flow summary. @@ -775,11 +831,10 @@ module Private { * NOTE: This step should not be used in global data-flow/taint-tracking, but may * be useful to include in the exposed local data-flow/taint-tracking relations. */ - predicate summaryGetterStep(ArgNode arg, Content c, Node out) { - exists(ReturnKindExt rk, Node mid, ReturnNodeExt ret | - summaryReadStep(summaryArgParam(arg, rk, out), c, mid) and - summaryLocalStep(mid, ret, _) and - ret.getKind() = rk + predicate summaryGetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { + exists(Node mid, ReturnNodeExt ret | + summaryReadStep(summaryArgParam(arg, ret, out, sc), c, mid) and + summaryLocalStep(mid, ret, _) ) } @@ -790,11 +845,10 @@ module Private { * NOTE: This step should not be used in global data-flow/taint-tracking, but may * be useful to include in the exposed local data-flow/taint-tracking relations. */ - predicate summarySetterStep(ArgNode arg, Content c, Node out) { - exists(ReturnKindExt rk, Node mid, ReturnNodeExt ret | - summaryLocalStep(summaryArgParam(arg, rk, out), mid, _) and - summaryStoreStep(mid, c, ret) and - ret.getKind() = rk + predicate summarySetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { + exists(Node mid, ReturnNodeExt ret | + summaryLocalStep(summaryArgParam(arg, ret, out, sc), mid, _) and + summaryStoreStep(mid, c, ret) ) } } @@ -877,11 +931,18 @@ module Private { private class SummarizedCallableExternal extends SummarizedCallable { SummarizedCallableExternal() { summaryElement(this, _, _, _, _) } + private predicate relevantSummaryElementGenerated( + AccessPath inSpec, AccessPath outSpec, string kind + ) { + summaryElement(this, inSpec, outSpec, kind, true) and + not summaryElement(this, _, _, _, false) and + not this.clearsContent(_, _) + } + private predicate relevantSummaryElement(AccessPath inSpec, AccessPath outSpec, string kind) { summaryElement(this, inSpec, outSpec, kind, false) or - summaryElement(this, inSpec, outSpec, kind, true) and - not summaryElement(this, _, _, _, false) + this.relevantSummaryElementGenerated(inSpec, outSpec, kind) } override predicate propagatesFlow( @@ -897,6 +958,8 @@ module Private { kind = "taint" and preservesValue = false ) } + + override predicate isAutoGenerated() { this.relevantSummaryElementGenerated(_, _, _) } } /** Holds if component `c` of specification `spec` cannot be parsed. */ @@ -1032,7 +1095,7 @@ module Private { /** Provides a query predicate for outputting a set of relevant flow summaries. */ module TestOutput { /** A flow summary to include in the `summary/3` query predicate. */ - abstract class RelevantSummarizedCallable extends SummarizedCallable { + abstract class RelevantSummarizedCallable instanceof SummarizedCallable { /** Gets the string representation of this callable used by `summary/1`. */ abstract string getCallableCsv(); @@ -1040,8 +1103,10 @@ module Private { predicate relevantSummary( SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue ) { - this.propagatesFlow(input, output, preservesValue) + super.propagatesFlow(input, output, preservesValue) } + + string toString() { result = super.toString() } } /** Render the kind in the format used in flow summaries. */ @@ -1051,9 +1116,13 @@ module Private { preservesValue = false and result = "taint" } + private string renderGenerated(RelevantSummarizedCallable c) { + if c.(SummarizedCallable).isAutoGenerated() then result = "generated:" else result = "" + } + /** * A query predicate for outputting flow summaries in semi-colon separated format in QL tests. - * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;outputspec;kind", + * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;outputspec;(generated:)?kind", * ext is hardcoded to empty. */ query predicate summary(string csv) { @@ -1064,7 +1133,7 @@ module Private { c.relevantSummary(input, output, preservesValue) and csv = c.getCallableCsv() + getComponentStackCsv(input) + ";" + getComponentStackCsv(output) + - ";" + renderKind(preservesValue) + ";" + renderGenerated(c) + renderKind(preservesValue) ) } } @@ -1078,19 +1147,21 @@ module Private { */ module RenderSummarizedCallable { /** A summarized callable to include in the graph. */ - abstract class RelevantSummarizedCallable extends SummarizedCallable { } + abstract class RelevantSummarizedCallable instanceof SummarizedCallable { + string toString() { result = super.toString() } + } private newtype TNodeOrCall = MkNode(Node n) { exists(RelevantSummarizedCallable c | n = summaryNode(c, _) or - n.(ParamNode).isParameterOf(c, _) + n.(ParamNode).isParameterOf(inject(c), _) ) } or MkCall(DataFlowCall call) { call = summaryDataFlowCall(_) and - call.getEnclosingCallable() instanceof RelevantSummarizedCallable + call.getEnclosingCallable() = inject(any(RelevantSummarizedCallable c)) } private class NodeOrCall extends TNodeOrCall { @@ -1130,7 +1201,7 @@ module Private { if preservesValue = true then value = "value" else value = "taint" ) or - exists(Content c | + exists(ContentSet c | Private::Steps::summaryReadStep(a.asNode(), c, b.asNode()) and value = "read (" + c + ")" or @@ -1140,6 +1211,10 @@ module Private { Private::Steps::summaryClearsContent(a.asNode(), c) and b = a and value = "clear (" + c + ")" + or + Private::Steps::summaryExpectsContent(a.asNode(), c) and + b = a and + value = "expect (" + c + ")" ) or summaryPostUpdateNode(b.asNode(), a.asNode()) and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll index 45535607b77..7fa9df72ba2 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll @@ -3,6 +3,7 @@ */ private import csharp +private import dotnet private import semmle.code.csharp.frameworks.system.linq.Expressions private import DataFlowDispatch private import DataFlowPrivate @@ -12,6 +13,13 @@ private import FlowSummaryImpl::Private private import FlowSummaryImpl::Public private import semmle.code.csharp.Unification private import semmle.code.csharp.dataflow.ExternalFlow +private import semmle.code.csharp.dataflow.FlowSummary as FlowSummary + +class SummarizedCallableBase extends Callable { + SummarizedCallableBase() { this.isUnboundDeclaration() } +} + +DataFlowCallable inject(SummarizedCallable c) { result.asSummarizedCallable() = c } /** Gets the parameter position of the instance parameter. */ ArgumentPosition instanceParameterPosition() { none() } // disables implicit summary flow to `this` for callbacks @@ -36,7 +44,7 @@ DataFlowType getContentType(Content c) { ) } -private DataFlowType getReturnTypeBase(DataFlowCallable c, ReturnKind rk) { +private DataFlowType getReturnTypeBase(DotNet::Callable c, ReturnKind rk) { exists(Type t | result = Gvn::getGlobalValueNumber(t) | rk instanceof NormalReturnKind and ( @@ -88,9 +96,7 @@ DataFlowType getCallbackReturnType(DataFlowType t, ReturnKind rk) { * `input`, output specification `output`, kind `kind`, and a flag `generated` * stating whether the summary is autogenerated. */ -predicate summaryElement( - DataFlowCallable c, string input, string output, string kind, boolean generated -) { +predicate summaryElement(Callable c, string input, string output, string kind, boolean generated) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext | @@ -219,10 +225,10 @@ class InterpretNode extends TInterpretNode { DataFlowCall asCall() { this = TDataFlowCall_(result) } /** Gets the callable that this node corresponds to, if any. */ - DataFlowCallable asCallable() { result = this.asElement() } + DataFlowCallable asCallable() { result.getUnderlyingCallable() = this.asElement() } /** Gets the target of this call, if any. */ - Callable getCallTarget() { result = viableCallable(this.asCall()) } + Callable getCallTarget() { result = this.asCall().(NonDelegateDataFlowCall).getATarget(_) } /** Gets a textual representation of this node. */ string toString() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImplSpecific.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImplSpecific.qll index 2f07de27afd..a929e23a942 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImplSpecific.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImplSpecific.qll @@ -3,7 +3,6 @@ private import csharp private import AssignableDefinitions private import SsaImpl as SsaImpl -private import semmle.code.csharp.dataflow.SSA class BasicBlock = ControlFlow::BasicBlock; 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 2df41e00299..268c5cd49df 100755 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll @@ -2,6 +2,7 @@ private import csharp private import TaintTrackingPublic private import FlowSummaryImpl as FlowSummaryImpl private import semmle.code.csharp.Caching +private import semmle.code.csharp.dataflow.internal.DataFlowDispatch private import semmle.code.csharp.dataflow.internal.DataFlowPrivate private import semmle.code.csharp.dataflow.internal.ControlFlowReachability private import semmle.code.csharp.dispatch.Dispatch @@ -117,19 +118,22 @@ private module Cached { ( // Simple flow through library code is included in the exposed local // step relation, even though flow is technically inter-procedural - FlowSummaryImpl::Private::Steps::summaryThroughStep(nodeFrom, nodeTo, false) + FlowSummaryImpl::Private::Steps::summaryThroughStepTaint(nodeFrom, nodeTo, + any(DataFlowSummarizedCallable sc)) or // Taint collection by adding a tainted element exists(DataFlow::ElementContent c | storeStep(nodeFrom, c, nodeTo) or - FlowSummaryImpl::Private::Steps::summarySetterStep(nodeFrom, c, nodeTo) + FlowSummaryImpl::Private::Steps::summarySetterStep(nodeFrom, c, nodeTo, + any(DataFlowSummarizedCallable sc)) ) or exists(DataFlow::Content c | readStep(nodeFrom, c, nodeTo) or - FlowSummaryImpl::Private::Steps::summaryGetterStep(nodeFrom, c, nodeTo) + FlowSummaryImpl::Private::Steps::summaryGetterStep(nodeFrom, c, nodeTo, + any(DataFlowSummarizedCallable sc)) | // Taint members c = any(TaintedMember m).(FieldOrProperty).getContent() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll index 06af17094a5..5a3b4f63d9f 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll @@ -49,7 +49,7 @@ private predicate unknownSign(Expr e) { or exists(LongLiteral lit | lit = e and not exists(lit.getValue().toFloat())) or - exists(CastExpr cast, Type fromtyp | + exists(CastingExpr cast, Type fromtyp | cast = e and fromtyp = cast.getSourceType() and not fromtyp instanceof NumericOrCharType diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll index 9691c8dffa7..04d0816a683 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll @@ -29,6 +29,8 @@ module Private { class CastExpr = RU::ExprNode::CastExpr; + class CastingExpr = CastExpr; + class Type = CS::Type; class Expr = CS::ControlFlow::Nodes::ExprNode; diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking1/TaintTrackingImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking1/TaintTrackingImpl.qll index e6a93c6dfe8..8cf5a49bc0b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking1/TaintTrackingImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking1/TaintTrackingImpl.qll @@ -161,7 +161,7 @@ abstract class Configuration extends DataFlow::Configuration { this.isAdditionalTaintStep(node1, state1, node2, state2) } - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) { + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { (this.isSink(node) or this.isAdditionalTaintStep(node, _)) and defaultImplicitTaintRead(node, c) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking2/TaintTrackingImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking2/TaintTrackingImpl.qll index e6a93c6dfe8..8cf5a49bc0b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking2/TaintTrackingImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking2/TaintTrackingImpl.qll @@ -161,7 +161,7 @@ abstract class Configuration extends DataFlow::Configuration { this.isAdditionalTaintStep(node1, state1, node2, state2) } - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) { + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { (this.isSink(node) or this.isAdditionalTaintStep(node, _)) and defaultImplicitTaintRead(node, c) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking3/TaintTrackingImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking3/TaintTrackingImpl.qll index e6a93c6dfe8..8cf5a49bc0b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking3/TaintTrackingImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking3/TaintTrackingImpl.qll @@ -161,7 +161,7 @@ abstract class Configuration extends DataFlow::Configuration { this.isAdditionalTaintStep(node1, state1, node2, state2) } - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) { + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { (this.isSink(node) or this.isAdditionalTaintStep(node, _)) and defaultImplicitTaintRead(node, c) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking4/TaintTrackingImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking4/TaintTrackingImpl.qll index e6a93c6dfe8..8cf5a49bc0b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking4/TaintTrackingImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking4/TaintTrackingImpl.qll @@ -161,7 +161,7 @@ abstract class Configuration extends DataFlow::Configuration { this.isAdditionalTaintStep(node1, state1, node2, state2) } - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) { + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { (this.isSink(node) or this.isAdditionalTaintStep(node, _)) and defaultImplicitTaintRead(node, c) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking5/TaintTrackingImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking5/TaintTrackingImpl.qll index e6a93c6dfe8..8cf5a49bc0b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking5/TaintTrackingImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking5/TaintTrackingImpl.qll @@ -161,7 +161,7 @@ abstract class Configuration extends DataFlow::Configuration { this.isAdditionalTaintStep(node1, state1, node2, state2) } - override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) { + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { (this.isSink(node) or this.isAdditionalTaintStep(node, _)) and defaultImplicitTaintRead(node, c) } diff --git a/csharp/ql/lib/semmle/code/csharp/dispatch/OverridableCallable.qll b/csharp/ql/lib/semmle/code/csharp/dispatch/OverridableCallable.qll index f346a660137..ffb14f1e915 100644 --- a/csharp/ql/lib/semmle/code/csharp/dispatch/OverridableCallable.qll +++ b/csharp/ql/lib/semmle/code/csharp/dispatch/OverridableCallable.qll @@ -9,7 +9,7 @@ import csharp * A callable that can be overridden or implemented. * * Unlike the class `Overridable`, this class only includes callables that - * can actually be overriden/implemented. + * can actually be overridden/implemented. */ class OverridableCallable extends Callable, Overridable { OverridableCallable() { this.isOverridableOrImplementable() } diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll index a4c4ab1b670..42d8e30e25b 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll @@ -5,7 +5,6 @@ */ import Expr -import semmle.code.csharp.Callable import semmle.code.csharp.dataflow.CallContext as CallContext private import semmle.code.csharp.dataflow.internal.DelegateDataFlow private import semmle.code.csharp.dataflow.internal.DataFlowDispatch @@ -176,8 +175,8 @@ class Call extends DotNet::Call, Expr, @call { * - Line 10: The static target is `Type.InvokeMember()`, whereas the run-time targets * are both `A.M()` and `B.M()`. * - * - Line 16: There is no static target (delegate call) but the delegate `i => { }` (line - * 20) is a run-time target. + * - Line 16: There is no static target (delegate call) but the delegate `i => { }` + * (line 20) is a run-time target. */ override Callable getARuntimeTarget() { exists(DispatchCall dc | dc.getCall() = this | result = dc.getADynamicTarget()) @@ -569,7 +568,7 @@ class DelegateLikeCall extends Call, DelegateLikeCall_ { final override Callable getARuntimeTarget() { exists(ExplicitDelegateLikeDataFlowCall call | this = call.getCall() and - result = viableCallableLambda(call, _) + result = viableCallableLambda(call, _).getUnderlyingCallable() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Creation.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Creation.qll index 79dc36fd48d..b999dfbc0e7 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Creation.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Creation.qll @@ -3,7 +3,6 @@ */ import Expr -import semmle.code.csharp.Callable private import semmle.code.csharp.frameworks.system.linq.Expressions private import semmle.code.csharp.TypeRef diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll index 1a869f2458c..e62b95a04cf 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll @@ -15,7 +15,6 @@ import Dynamic import Literal import LogicalOperation import semmle.code.csharp.controlflow.ControlFlowElement -import semmle.code.csharp.Callable import semmle.code.csharp.Location import semmle.code.csharp.Stmt import semmle.code.csharp.Type @@ -938,7 +937,7 @@ class ThrowExpr extends Expr, ThrowElement, @throw_expr { * For example, `new ArgumentException("i")` in * `return i != 0 ? 1 / i : throw new ArgumentException("i");`. */ - // overriden for more precise qldoc + // overridden for more precise qldoc override Expr getExpr() { result = ThrowElement.super.getExpr() } override string getAPrimaryQlClass() { result = "ThrowExpr" } @@ -1174,7 +1173,7 @@ class WithExpr extends Expr, @with_expr { /** Gets the expression on which this `with` is called. */ Expr getExpr() { result = this.getChild(0) } - /** Gets the clone method of the `record` that is targetted by this `with` expression. */ + /** Gets the clone method of the `record` that is targeted by this `with` expression. */ RecordCloneMethod getCloneMethod() { result = this.getExpr().getType().(RecordClass).getCloneMethod() } diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll index f0ec251db03..e62c6c3ee94 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll @@ -88,7 +88,10 @@ module EntityFramework { } /** A flow summary for EntityFramework. */ - abstract class EFSummarizedCallable extends SummarizedCallable { } + abstract class EFSummarizedCallable extends SummarizedCallable { + bindingset[this] + EFSummarizedCallable() { any() } + } private class DbSetAddOrUpdateRequiredSummaryComponentStack extends RequiredSummaryComponentStack { override predicate required(SummaryComponent head, SummaryComponentStack tail) { @@ -258,6 +261,30 @@ module EntityFramework { } } + /** A sink method in `Microsoft.EntityFrameworkCore.RelationalQueryableExtensions` that executes SQL. */ + private class MicrosoftEntityFrameworkCoreRelationalQueryableExtensionsSinkModelCsv extends SinkModelCsv { + override predicate row(string row) { + row = + [ + "Microsoft.EntityFrameworkCore;RelationalQueryableExtensions;false;FromSqlRaw<>;(Microsoft.EntityFrameworkCore.DbSet,System.String,System.Object[]);;Argument[1];sql", + ] + } + } + + /** A sink method in `Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions` that executes SQL. */ + private class MicrosoftEntityFrameworkCoreRelationalDatabaseFacadeExtensionsSinkModelCsv extends SinkModelCsv { + override predicate row(string row) { + row = + [ + "Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRaw;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql", + "Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRaw;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Object[]);;Argument[1];sql", + "Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRawAsync;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Threading.CancellationToken);;Argument[1];sql", + "Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRawAsync;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Object[]);;Argument[1];sql", + "Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRawAsync;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql", + ] + } + } + /** Holds if `t` is compatible with a DB column type. */ private predicate isColumnType(Type t) { t instanceof SimpleType diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/Generated.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/Generated.qll new file mode 100644 index 00000000000..cba985c3161 --- /dev/null +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/Generated.qll @@ -0,0 +1,9 @@ +/** + * A module importing all generated Models as Data models. + */ + +import csharp + +private module GeneratedFrameworks { + private import generated.dotnet.Runtime +} diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/generated/dotnet/Runtime.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/generated/dotnet/Runtime.qll new file mode 100644 index 00000000000..8415636ddfb --- /dev/null +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/generated/dotnet/Runtime.qll @@ -0,0 +1,10122 @@ +/** + * THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. + * Definitions of taint steps in the dotnetruntime framework. + */ + +import csharp +private import semmle.code.csharp.dataflow.ExternalFlow + +private class RuntimeSummaryCsv extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + "JsonToItemsTaskFactory;JsonToItemsTaskFactory+CaseInsensitiveDictionaryConverter;false;Read;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions);;Argument[0];ReturnValue;generated:taint", + "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonModelItemConverter;false;Read;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions);;Argument[0];ReturnValue;generated:taint", + "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;false;SetPropertyValue;(Microsoft.Build.Framework.TaskPropertyInfo,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;false;get_BuildEngine;();;Argument[Qualifier];ReturnValue;generated:taint", + "JsonToItemsTaskFactory;JsonToItemsTaskFactory+JsonToItemsTask;false;set_BuildEngine;(Microsoft.Build.Framework.IBuildEngine);;Argument[0];Argument[Qualifier];generated:taint", + "JsonToItemsTaskFactory;JsonToItemsTaskFactory;false;GetTaskParameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "JsonToItemsTaskFactory;JsonToItemsTaskFactory;false;Initialize;(System.String,System.Collections.Generic.IDictionary,System.String,Microsoft.Build.Framework.IBuildEngine);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;BinaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;BinaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;Convert;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Type);;Argument[2];ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;GetIndex;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[1];ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;GetIndex;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;GetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;GetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;Invoke;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[1];ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;Invoke;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;InvokeConstructor;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[1];ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;InvokeConstructor;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;InvokeMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Collections.Generic.IEnumerable,System.Type,System.Collections.Generic.IEnumerable);;Argument[4].Element;ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;IsEvent;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type);;Argument[2];ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;SetIndex;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[1];ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;SetIndex;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;SetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;SetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;UnaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;generated:taint", + "Microsoft.CSharp.RuntimeBinder;Binder;false;UnaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint", + "Microsoft.CSharp;CSharpCodeProvider;false;CSharpCodeProvider;(System.Collections.Generic.IDictionary);;Argument[0].Element;Argument[Qualifier];generated:taint", + "Microsoft.CSharp;CSharpCodeProvider;false;CreateCompiler;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.CSharp;CSharpCodeProvider;false;CreateGenerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.CSharp;CSharpCodeProvider;false;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.CSharp;CSharpCodeProvider;false;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions,System.DateTimeOffset);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions,System.DateTimeOffset);;Argument[1];Argument[0];generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions,System.DateTimeOffset);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions,System.TimeSpan);;Argument[1];Argument[0];generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions,System.TimeSpan);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryExtensions;false;SetSlidingExpiration;(Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryExtensions;false;SetSlidingExpiration;(Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions,System.TimeSpan);;Argument[1];Argument[0];generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryExtensions;false;SetSlidingExpiration;(Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions,System.TimeSpan);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryOptions;false;get_AbsoluteExpiration;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryOptions;false;get_AbsoluteExpirationRelativeToNow;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryOptions;false;get_SlidingExpiration;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryOptions;false;set_AbsoluteExpiration;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryOptions;false;set_AbsoluteExpirationRelativeToNow;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Caching.Distributed;DistributedCacheEntryOptions;false;set_SlidingExpiration;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;AddExpirationToken;(Microsoft.Extensions.Caching.Memory.ICacheEntry,Microsoft.Extensions.Primitives.IChangeToken);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Memory.ICacheEntry,System.DateTimeOffset);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Memory.ICacheEntry,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Memory.ICacheEntry,System.TimeSpan);;Argument[1];Argument[0];generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Memory.ICacheEntry,System.TimeSpan);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetOptions;(Microsoft.Extensions.Caching.Memory.ICacheEntry,Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetOptions;(Microsoft.Extensions.Caching.Memory.ICacheEntry,Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions);;Argument[1];Argument[0];generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetOptions;(Microsoft.Extensions.Caching.Memory.ICacheEntry,Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetPriority;(Microsoft.Extensions.Caching.Memory.ICacheEntry,Microsoft.Extensions.Caching.Memory.CacheItemPriority);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetSize;(Microsoft.Extensions.Caching.Memory.ICacheEntry,System.Int64);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetSlidingExpiration;(Microsoft.Extensions.Caching.Memory.ICacheEntry,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetSlidingExpiration;(Microsoft.Extensions.Caching.Memory.ICacheEntry,System.TimeSpan);;Argument[1];Argument[0];generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetSlidingExpiration;(Microsoft.Extensions.Caching.Memory.ICacheEntry,System.TimeSpan);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetValue;(Microsoft.Extensions.Caching.Memory.ICacheEntry,System.Object);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetValue;(Microsoft.Extensions.Caching.Memory.ICacheEntry,System.Object);;Argument[1];Argument[0];generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheEntryExtensions;false;SetValue;(Microsoft.Extensions.Caching.Memory.ICacheEntry,System.Object);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheExtensions;false;Set<>;(Microsoft.Extensions.Caching.Memory.IMemoryCache,System.Object,TItem);;Argument[2];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheExtensions;false;Set<>;(Microsoft.Extensions.Caching.Memory.IMemoryCache,System.Object,TItem,Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions);;Argument[2];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheExtensions;false;Set<>;(Microsoft.Extensions.Caching.Memory.IMemoryCache,System.Object,TItem,Microsoft.Extensions.Primitives.IChangeToken);;Argument[2];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheExtensions;false;Set<>;(Microsoft.Extensions.Caching.Memory.IMemoryCache,System.Object,TItem,System.DateTimeOffset);;Argument[2];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;CacheExtensions;false;Set<>;(Microsoft.Extensions.Caching.Memory.IMemoryCache,System.Object,TItem,System.TimeSpan);;Argument[2];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCache;false;CreateEntry;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCache;false;MemoryCache;(Microsoft.Extensions.Options.IOptions,Microsoft.Extensions.Logging.ILoggerFactory);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryExtensions;false;AddExpirationToken;(Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions,Microsoft.Extensions.Primitives.IChangeToken);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions,System.DateTimeOffset);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions,System.DateTimeOffset);;Argument[1];Argument[0];generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions,System.DateTimeOffset);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions,System.TimeSpan);;Argument[1];Argument[0];generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryExtensions;false;SetAbsoluteExpiration;(Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions,System.TimeSpan);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryExtensions;false;SetPriority;(Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions,Microsoft.Extensions.Caching.Memory.CacheItemPriority);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryExtensions;false;SetSize;(Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions,System.Int64);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryExtensions;false;SetSlidingExpiration;(Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryExtensions;false;SetSlidingExpiration;(Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions,System.TimeSpan);;Argument[1];Argument[0];generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryExtensions;false;SetSlidingExpiration;(Microsoft.Extensions.Caching.Memory.MemoryCacheEntryOptions,System.TimeSpan);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;false;get_AbsoluteExpiration;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;false;get_AbsoluteExpirationRelativeToNow;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;false;get_Size;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;false;get_SlidingExpiration;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;false;set_AbsoluteExpiration;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;false;set_AbsoluteExpirationRelativeToNow;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;false;set_Size;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheEntryOptions;false;set_SlidingExpiration;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheOptions;false;get_SizeLimit;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Caching.Memory;MemoryCacheOptions;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:value", + "Microsoft.Extensions.Caching.Memory;MemoryCacheOptions;false;set_SizeLimit;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Configuration.EnvironmentVariables;EnvironmentVariablesConfigurationProvider;false;EnvironmentVariablesConfigurationProvider;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Configuration.EnvironmentVariables;EnvironmentVariablesConfigurationProvider;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration.Memory;MemoryConfigurationProvider;false;MemoryConfigurationProvider;(Microsoft.Extensions.Configuration.Memory.MemoryConfigurationSource);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Configuration.Memory;MemoryConfigurationSource;false;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration.UserSecrets;PathHelper;false;GetSecretsPathFromSecretsId;(System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration.Xml;XmlDocumentDecryptor;false;CreateDecryptingXmlReader;(System.IO.Stream,System.Xml.XmlReaderSettings);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ChainedBuilderExtensions;false;AddConfiguration;(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.Configuration.IConfiguration);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ChainedBuilderExtensions;false;AddConfiguration;(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.Configuration.IConfiguration,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ChainedConfigurationProvider;false;GetChildKeys;(System.Collections.Generic.IEnumerable,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ChainedConfigurationProvider;false;GetReloadToken;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ChainedConfigurationProvider;false;TryGet;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[]);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationBinder;false;Get;(Microsoft.Extensions.Configuration.IConfiguration,System.Type);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationBinder;false;Get<>;(Microsoft.Extensions.Configuration.IConfiguration);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationBinder;false;GetValue;(Microsoft.Extensions.Configuration.IConfiguration,System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationBinder;false;GetValue;(Microsoft.Extensions.Configuration.IConfiguration,System.Type,System.String,System.Object);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationBinder;false;GetValue;(Microsoft.Extensions.Configuration.IConfiguration,System.Type,System.String,System.Object);;Argument[3];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationBinder;false;GetValue<>;(Microsoft.Extensions.Configuration.IConfiguration,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationBinder;false;GetValue<>;(Microsoft.Extensions.Configuration.IConfiguration,System.String,T);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationBinder;false;GetValue<>;(Microsoft.Extensions.Configuration.IConfiguration,System.String,T);;Argument[2];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationBuilder;false;Add;(Microsoft.Extensions.Configuration.IConfigurationSource);;Argument[Qualifier];ReturnValue;generated:value", + "Microsoft.Extensions.Configuration;ConfigurationExtensions;false;GetConnectionString;(Microsoft.Extensions.Configuration.IConfiguration,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationExtensions;false;GetRequiredSection;(Microsoft.Extensions.Configuration.IConfiguration,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationExtensions;false;GetRequiredSection;(Microsoft.Extensions.Configuration.IConfiguration,System.String);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationManager;false;Add;(Microsoft.Extensions.Configuration.IConfigurationSource);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationManager;false;Add;(Microsoft.Extensions.Configuration.IConfigurationSource);;Argument[Qualifier];ReturnValue;generated:value", + "Microsoft.Extensions.Configuration;ConfigurationManager;false;Build;();;Argument[Qualifier];ReturnValue;generated:value", + "Microsoft.Extensions.Configuration;ConfigurationManager;false;GetReloadToken;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationManager;false;GetSection;(System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationManager;false;GetSection;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationManager;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationManager;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationManager;false;get_Providers;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationManager;false;get_Sources;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationPath;false;Combine;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationPath;false;Combine;(System.String[]);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationPath;false;GetParentPath;(System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationPath;false;GetSectionKey;(System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationProvider;false;GetReloadToken;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationProvider;true;GetChildKeys;(System.Collections.Generic.IEnumerable,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationRoot;false;ConfigurationRoot;(System.Collections.Generic.IList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationRoot;false;GetReloadToken;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationRoot;false;GetSection;(System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationRoot;false;GetSection;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationRoot;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationRoot;false;get_Providers;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationRootExtensions;false;GetDebugView;(Microsoft.Extensions.Configuration.IConfigurationRoot);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationSection;false;ConfigurationSection;(Microsoft.Extensions.Configuration.IConfigurationRoot,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationSection;false;ConfigurationSection;(Microsoft.Extensions.Configuration.IConfigurationRoot,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationSection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationSection;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationSection;false;get_Path;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;ConfigurationSection;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;FileConfigurationExtensions;false;SetBasePath;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;FileConfigurationExtensions;false;SetFileProvider;(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.FileProviders.IFileProvider);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;IniConfigurationExtensions;false;AddIniFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.FileProviders.IFileProvider,System.String,System.Boolean,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;IniConfigurationExtensions;false;AddIniFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;IniConfigurationExtensions;false;AddIniFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;IniConfigurationExtensions;false;AddIniFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String,System.Boolean,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;IniConfigurationExtensions;false;AddIniStream;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.IO.Stream);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;JsonConfigurationExtensions;false;AddJsonFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.FileProviders.IFileProvider,System.String,System.Boolean,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;JsonConfigurationExtensions;false;AddJsonFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;JsonConfigurationExtensions;false;AddJsonFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;JsonConfigurationExtensions;false;AddJsonFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String,System.Boolean,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;JsonConfigurationExtensions;false;AddJsonStream;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.IO.Stream);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;MemoryConfigurationBuilderExtensions;false;AddInMemoryCollection;(Microsoft.Extensions.Configuration.IConfigurationBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;MemoryConfigurationBuilderExtensions;false;AddInMemoryCollection;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;UserSecretsConfigurationExtensions;false;AddUserSecrets;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Reflection.Assembly);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;UserSecretsConfigurationExtensions;false;AddUserSecrets;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Reflection.Assembly,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;UserSecretsConfigurationExtensions;false;AddUserSecrets;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Reflection.Assembly,System.Boolean,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;UserSecretsConfigurationExtensions;false;AddUserSecrets;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;UserSecretsConfigurationExtensions;false;AddUserSecrets;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;UserSecretsConfigurationExtensions;false;AddUserSecrets<>;(Microsoft.Extensions.Configuration.IConfigurationBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;UserSecretsConfigurationExtensions;false;AddUserSecrets<>;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;UserSecretsConfigurationExtensions;false;AddUserSecrets<>;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Boolean,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;XmlConfigurationExtensions;false;AddXmlFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.FileProviders.IFileProvider,System.String,System.Boolean,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;XmlConfigurationExtensions;false;AddXmlFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;XmlConfigurationExtensions;false;AddXmlFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;XmlConfigurationExtensions;false;AddXmlFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String,System.Boolean,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Configuration;XmlConfigurationExtensions;false;AddXmlStream;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.IO.Stream);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;Add;(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.DependencyInjection.ServiceDescriptor);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;Add;(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.DependencyInjection.ServiceDescriptor);;Argument[1];Argument[0].Element;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;Add;(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.DependencyInjection.ServiceDescriptor);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;Add;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;Add;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[0].Element;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;Add;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;RemoveAll;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;RemoveAll<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;Replace;(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.DependencyInjection.ServiceDescriptor);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;Replace;(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.DependencyInjection.ServiceDescriptor);;Argument[1];Argument[0].Element;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;Replace;(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.DependencyInjection.ServiceDescriptor);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;TryAdd;(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.DependencyInjection.ServiceDescriptor);;Argument[1];Argument[0].Element;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;TryAdd;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[0].Element;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;TryAddEnumerable;(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.DependencyInjection.ServiceDescriptor);;Argument[1];Argument[0].Element;generated:taint", + "Microsoft.Extensions.DependencyInjection.Extensions;ServiceCollectionDescriptorExtensions;false;TryAddEnumerable;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[0].Element;generated:taint", + "Microsoft.Extensions.DependencyInjection.Specification.Fakes;ClassWithNestedReferencesToProvider;false;ClassWithNestedReferencesToProvider;(System.IServiceProvider);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.DependencyInjection.Specification.Fakes;FakeDisposableCallbackService;false;FakeDisposableCallbackService;(Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposeCallback);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.DependencyInjection;ActivatorUtilities;false;GetServiceOrCreateInstance;(System.IServiceProvider,System.Type);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ActivatorUtilities;false;GetServiceOrCreateInstance<>;(System.IServiceProvider);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;AsyncServiceScope;false;AsyncServiceScope;(Microsoft.Extensions.DependencyInjection.IServiceScope);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.DependencyInjection;AsyncServiceScope;false;get_ServiceProvider;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;DefaultServiceProviderFactory;false;CreateBuilder;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;DefaultServiceProviderFactory;false;DefaultServiceProviderFactory;(Microsoft.Extensions.DependencyInjection.ServiceProviderOptions);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.DependencyInjection;HttpClientBuilderExtensions;false;AddHttpMessageHandler<>;(Microsoft.Extensions.DependencyInjection.IHttpClientBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;HttpClientBuilderExtensions;false;AddTypedClient<,>;(Microsoft.Extensions.DependencyInjection.IHttpClientBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;HttpClientBuilderExtensions;false;AddTypedClient<>;(Microsoft.Extensions.DependencyInjection.IHttpClientBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;HttpClientBuilderExtensions;false;ConfigurePrimaryHttpMessageHandler<>;(Microsoft.Extensions.DependencyInjection.IHttpClientBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;HttpClientBuilderExtensions;false;RedactLoggedHeaders;(Microsoft.Extensions.DependencyInjection.IHttpClientBuilder,System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;HttpClientBuilderExtensions;false;SetHandlerLifetime;(Microsoft.Extensions.DependencyInjection.IHttpClientBuilder,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;HttpClientFactoryServiceCollectionExtensions;false;AddHttpClient;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;LoggingServiceCollectionExtensions;false;AddLogging;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;MemoryCacheServiceCollectionExtensions;false;AddDistributedMemoryCache;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;MemoryCacheServiceCollectionExtensions;false;AddMemoryCache;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;OptionsBuilderConfigurationExtensions;false;Bind<>;(Microsoft.Extensions.Options.OptionsBuilder,Microsoft.Extensions.Configuration.IConfiguration);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;OptionsBuilderDataAnnotationsExtensions;false;ValidateDataAnnotations<>;(Microsoft.Extensions.Options.OptionsBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;OptionsBuilderExtensions;false;ValidateOnStart<>;(Microsoft.Extensions.Options.OptionsBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;OptionsConfigurationServiceCollectionExtensions;false;Configure<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;OptionsConfigurationServiceCollectionExtensions;false;Configure<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.String,Microsoft.Extensions.Configuration.IConfiguration);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;OptionsServiceCollectionExtensions;false;AddOptions;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;OptionsServiceCollectionExtensions;false;ConfigureOptions;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Object);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;OptionsServiceCollectionExtensions;false;ConfigureOptions;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;OptionsServiceCollectionExtensions;false;ConfigureOptions<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionHostedServiceExtensions;false;AddHostedService<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddScoped;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddScoped;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type,System.Type);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddScoped<,>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddScoped<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddSingleton;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddSingleton;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type,System.Object);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddSingleton;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type,System.Type);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddSingleton<,>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddSingleton<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddSingleton<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection,TService);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddTransient;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddTransient;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Type,System.Type);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddTransient<,>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceCollectionServiceExtensions;false;AddTransient<>;(Microsoft.Extensions.DependencyInjection.IServiceCollection);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceProviderServiceExtensions;false;GetRequiredService;(System.IServiceProvider,System.Type);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceProviderServiceExtensions;false;GetRequiredService<>;(System.IServiceProvider);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceProviderServiceExtensions;false;GetService<>;(System.IServiceProvider);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceProviderServiceExtensions;false;GetServices;(System.IServiceProvider,System.Type);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyInjection;ServiceProviderServiceExtensions;false;GetServices<>;(System.IServiceProvider);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyModel.Resolution;AppBaseCompilationAssemblyResolver;false;TryResolveAssemblyPaths;(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List);;Argument[Qualifier];Argument[1].Element;generated:taint", + "Microsoft.Extensions.DependencyModel.Resolution;CompositeCompilationAssemblyResolver;false;CompositeCompilationAssemblyResolver;(Microsoft.Extensions.DependencyModel.Resolution.ICompilationAssemblyResolver[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.DependencyModel.Resolution;CompositeCompilationAssemblyResolver;false;TryResolveAssemblyPaths;(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List);;Argument[Qualifier];Argument[1].Element;generated:taint", + "Microsoft.Extensions.DependencyModel.Resolution;PackageCompilationAssemblyResolver;false;TryResolveAssemblyPaths;(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List);;Argument[Qualifier];Argument[1].Element;generated:taint", + "Microsoft.Extensions.DependencyModel.Resolution;ReferenceAssemblyPathResolver;false;TryResolveAssemblyPaths;(Microsoft.Extensions.DependencyModel.CompilationLibrary,System.Collections.Generic.List);;Argument[Qualifier];Argument[1].Element;generated:taint", + "Microsoft.Extensions.DependencyModel;CompilationLibrary;false;ResolveReferencePaths;(Microsoft.Extensions.DependencyModel.Resolution.ICompilationAssemblyResolver[]);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyModel;RuntimeAssembly;false;Create;(System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyModel;RuntimeAssembly;false;RuntimeAssembly;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.DependencyModel;RuntimeAssetGroup;false;RuntimeAssetGroup;(System.String,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.DependencyModel;RuntimeAssetGroup;false;RuntimeAssetGroup;(System.String,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.DependencyModel;RuntimeAssetGroup;false;get_AssetPaths;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.DependencyModel;RuntimeAssetGroup;false;get_RuntimeFiles;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileProviders.Composite;CompositeDirectoryContents;false;CompositeDirectoryContents;(System.Collections.Generic.IList,System.String);;Argument[0].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileProviders.Composite;CompositeDirectoryContents;false;CompositeDirectoryContents;(System.Collections.Generic.IList,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileProviders.Internal;PhysicalDirectoryContents;false;PhysicalDirectoryContents;(System.String,Microsoft.Extensions.FileProviders.Physical.ExclusionFilters);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileProviders.Physical;PhysicalDirectoryInfo;false;PhysicalDirectoryInfo;(System.IO.DirectoryInfo);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileProviders.Physical;PhysicalFileInfo;false;PhysicalFileInfo;(System.IO.FileInfo);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileProviders.Physical;PhysicalFileInfo;false;get_PhysicalPath;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileProviders.Physical;PhysicalFilesWatcher;false;PhysicalFilesWatcher;(System.String,System.IO.FileSystemWatcher,System.Boolean,Microsoft.Extensions.FileProviders.Physical.ExclusionFilters);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileProviders.Physical;PhysicalFilesWatcher;false;PhysicalFilesWatcher;(System.String,System.IO.FileSystemWatcher,System.Boolean,Microsoft.Extensions.FileProviders.Physical.ExclusionFilters);;Argument[1];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileProviders.Physical;PollingFileChangeToken;false;PollingFileChangeToken;(System.IO.FileInfo);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileProviders;CompositeFileProvider;false;CompositeFileProvider;(Microsoft.Extensions.FileProviders.IFileProvider[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileProviders;CompositeFileProvider;false;CompositeFileProvider;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileProviders;CompositeFileProvider;false;GetDirectoryContents;(System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.FileProviders;CompositeFileProvider;false;GetDirectoryContents;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileProviders;CompositeFileProvider;false;get_FileProviders;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileProviders;PhysicalFileProvider;false;GetDirectoryContents;(System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.FileSystemGlobbing.Abstractions;DirectoryInfoWrapper;false;GetDirectory;(System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.FileSystemGlobbing.Abstractions;FileInfoWrapper;false;FileInfoWrapper;(System.IO.FileInfo);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileSystemGlobbing.Abstractions;FileInfoWrapper;false;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContext<>;false;PushDataFrame;(TFrame);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinear+FrameData;false;get_Stem;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextLinear;false;CalculateStem;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.FileInfoBase);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRagged+FrameData;false;get_Stem;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileSystemGlobbing.Internal.PatternContexts;PatternContextRagged;false;CalculateStem;(Microsoft.Extensions.FileSystemGlobbing.Abstractions.FileInfoBase);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileSystemGlobbing.Internal;MatcherContext;false;MatcherContext;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase,System.StringComparison);;Argument[2];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.FileSystemGlobbing;InMemoryDirectoryInfo;false;EnumerateFileSystemInfos;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileSystemGlobbing;InMemoryDirectoryInfo;false;GetDirectory;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileSystemGlobbing;InMemoryDirectoryInfo;false;GetFile;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileSystemGlobbing;InMemoryDirectoryInfo;false;get_ParentDirectory;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.FileSystemGlobbing;Matcher;false;AddExclude;(System.String);;Argument[Qualifier];ReturnValue;generated:value", + "Microsoft.Extensions.FileSystemGlobbing;Matcher;false;AddInclude;(System.String);;Argument[Qualifier];ReturnValue;generated:value", + "Microsoft.Extensions.Hosting.Internal;ApplicationLifetime;false;ApplicationLifetime;(Microsoft.Extensions.Logging.ILogger);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Hosting.Internal;ApplicationLifetime;false;get_ApplicationStarted;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Hosting.Internal;ApplicationLifetime;false;get_ApplicationStopped;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Hosting.Internal;ApplicationLifetime;false;get_ApplicationStopping;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Hosting.Systemd;ServiceState;false;ServiceState;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Hosting.Systemd;ServiceState;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Hosting.WindowsServices;WindowsServiceLifetime;false;WaitForStartAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Hosting;BackgroundService;true;StartAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Hosting;BackgroundService;true;get_ExecuteTask;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Hosting;HostBuilder;false;UseServiceProviderFactory<>;(Microsoft.Extensions.DependencyInjection.IServiceProviderFactory);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Hosting;HostBuilder;false;UseServiceProviderFactory<>;(Microsoft.Extensions.DependencyInjection.IServiceProviderFactory);;Argument[Qualifier];ReturnValue;generated:value", + "Microsoft.Extensions.Hosting;HostingHostBuilderExtensions;false;ConfigureDefaults;(Microsoft.Extensions.Hosting.IHostBuilder,System.String[]);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Hosting;HostingHostBuilderExtensions;false;UseConsoleLifetime;(Microsoft.Extensions.Hosting.IHostBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Hosting;HostingHostBuilderExtensions;false;UseContentRoot;(Microsoft.Extensions.Hosting.IHostBuilder,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Hosting;HostingHostBuilderExtensions;false;UseEnvironment;(Microsoft.Extensions.Hosting.IHostBuilder,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Hosting;SystemdHostBuilderExtensions;false;UseSystemd;(Microsoft.Extensions.Hosting.IHostBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Hosting;WindowsServiceLifetimeHostBuilderExtensions;false;UseWindowsService;(Microsoft.Extensions.Hosting.IHostBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Http.Logging;LoggingHttpMessageHandler;false;LoggingHttpMessageHandler;(Microsoft.Extensions.Logging.ILogger);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Http.Logging;LoggingHttpMessageHandler;false;LoggingHttpMessageHandler;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Http.HttpClientFactoryOptions);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Http.Logging;LoggingHttpMessageHandler;false;LoggingHttpMessageHandler;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Http.HttpClientFactoryOptions);;Argument[1];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Http.Logging;LoggingScopeHttpMessageHandler;false;LoggingScopeHttpMessageHandler;(Microsoft.Extensions.Logging.ILogger);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Http.Logging;LoggingScopeHttpMessageHandler;false;LoggingScopeHttpMessageHandler;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Http.HttpClientFactoryOptions);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Http.Logging;LoggingScopeHttpMessageHandler;false;LoggingScopeHttpMessageHandler;(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Http.HttpClientFactoryOptions);;Argument[1];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Http;HttpClientFactoryOptions;false;get_HandlerLifetime;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Http;HttpClientFactoryOptions;false;set_HandlerLifetime;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Http;HttpMessageHandlerBuilder;false;CreateHandlerPipeline;(System.Net.Http.HttpMessageHandler,System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Http;HttpMessageHandlerBuilder;false;CreateHandlerPipeline;(System.Net.Http.HttpMessageHandler,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.Logging.Console;ConsoleLoggerProvider;false;ConsoleLoggerProvider;(Microsoft.Extensions.Options.IOptionsMonitor,System.Collections.Generic.IEnumerable);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Logging.Console;ConsoleLoggerProvider;false;CreateLogger;(System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging.Console;ConsoleLoggerProvider;false;CreateLogger;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging.Console;ConsoleLoggerProvider;false;SetScopeProvider;(Microsoft.Extensions.Logging.IExternalScopeProvider);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Logging.Debug;DebugLoggerProvider;false;CreateLogger;(System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging.EventLog;EventLogLoggerProvider;false;CreateLogger;(System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging.EventLog;EventLogLoggerProvider;false;CreateLogger;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging.EventLog;EventLogLoggerProvider;false;EventLogLoggerProvider;(Microsoft.Extensions.Logging.EventLog.EventLogSettings);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Logging.EventLog;EventLogLoggerProvider;false;SetScopeProvider;(Microsoft.Extensions.Logging.IExternalScopeProvider);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Logging.EventSource;EventSourceLoggerProvider;false;CreateLogger;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging.EventSource;EventSourceLoggerProvider;false;EventSourceLoggerProvider;(Microsoft.Extensions.Logging.EventSource.LoggingEventSource);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Logging.TraceSource;TraceSourceLoggerProvider;false;TraceSourceLoggerProvider;(System.Diagnostics.SourceSwitch,System.Diagnostics.TraceListener);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Logging.TraceSource;TraceSourceLoggerProvider;false;TraceSourceLoggerProvider;(System.Diagnostics.SourceSwitch,System.Diagnostics.TraceListener);;Argument[1];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Logging;ConsoleLoggerExtensions;false;AddConsole;(Microsoft.Extensions.Logging.ILoggingBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;ConsoleLoggerExtensions;false;AddConsoleFormatter<,>;(Microsoft.Extensions.Logging.ILoggingBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;ConsoleLoggerExtensions;false;AddJsonConsole;(Microsoft.Extensions.Logging.ILoggingBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;ConsoleLoggerExtensions;false;AddSimpleConsole;(Microsoft.Extensions.Logging.ILoggingBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;ConsoleLoggerExtensions;false;AddSystemdConsole;(Microsoft.Extensions.Logging.ILoggingBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;DebugLoggerFactoryExtensions;false;AddDebug;(Microsoft.Extensions.Logging.ILoggingBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;EventLoggerFactoryExtensions;false;AddEventLog;(Microsoft.Extensions.Logging.ILoggingBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;EventLoggerFactoryExtensions;false;AddEventLog;(Microsoft.Extensions.Logging.ILoggingBuilder,Microsoft.Extensions.Logging.EventLog.EventLogSettings);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;EventSourceLoggerFactoryExtensions;false;AddEventSourceLogger;(Microsoft.Extensions.Logging.ILoggingBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;FilterLoggingBuilderExtensions;false;AddFilter;(Microsoft.Extensions.Logging.ILoggingBuilder,System.String,Microsoft.Extensions.Logging.LogLevel);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;FilterLoggingBuilderExtensions;false;AddFilter;(Microsoft.Extensions.Logging.LoggerFilterOptions,System.String,Microsoft.Extensions.Logging.LogLevel);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;FilterLoggingBuilderExtensions;false;AddFilter<>;(Microsoft.Extensions.Logging.ILoggingBuilder,System.String,Microsoft.Extensions.Logging.LogLevel);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;FilterLoggingBuilderExtensions;false;AddFilter<>;(Microsoft.Extensions.Logging.LoggerFilterOptions,System.String,Microsoft.Extensions.Logging.LogLevel);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;Logger<>;false;BeginScope<>;(TState);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;LoggerExtensions;false;BeginScope;(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[]);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;LoggerExternalScopeProvider;false;Push;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;LoggingBuilderExtensions;false;AddConfiguration;(Microsoft.Extensions.Logging.ILoggingBuilder,Microsoft.Extensions.Configuration.IConfiguration);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;LoggingBuilderExtensions;false;AddProvider;(Microsoft.Extensions.Logging.ILoggingBuilder,Microsoft.Extensions.Logging.ILoggerProvider);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;LoggingBuilderExtensions;false;ClearProviders;(Microsoft.Extensions.Logging.ILoggingBuilder);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;LoggingBuilderExtensions;false;SetMinimumLevel;(Microsoft.Extensions.Logging.ILoggingBuilder,Microsoft.Extensions.Logging.LogLevel);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;TraceSourceFactoryExtensions;false;AddTraceSource;(Microsoft.Extensions.Logging.ILoggingBuilder,System.Diagnostics.SourceSwitch);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;TraceSourceFactoryExtensions;false;AddTraceSource;(Microsoft.Extensions.Logging.ILoggingBuilder,System.Diagnostics.SourceSwitch,System.Diagnostics.TraceListener);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;TraceSourceFactoryExtensions;false;AddTraceSource;(Microsoft.Extensions.Logging.ILoggingBuilder,System.String);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Logging;TraceSourceFactoryExtensions;false;AddTraceSource;(Microsoft.Extensions.Logging.ILoggingBuilder,System.String,System.Diagnostics.TraceListener);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Options;ConfigurationChangeTokenSource<>;false;ConfigurationChangeTokenSource;(System.String,Microsoft.Extensions.Configuration.IConfiguration);;Argument[1];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Options;ConfigurationChangeTokenSource<>;false;GetChangeToken;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Options;OptionsFactory<>;false;OptionsFactory;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEnumerable>);;Argument[0].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Options;OptionsFactory<>;false;OptionsFactory;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEnumerable>);;Argument[1].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Options;OptionsFactory<>;false;OptionsFactory;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEnumerable>);;Argument[2].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Options;OptionsManager<>;false;OptionsManager;(Microsoft.Extensions.Options.IOptionsFactory);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Options;OptionsMonitor<>;false;OptionsMonitor;(Microsoft.Extensions.Options.IOptionsFactory,System.Collections.Generic.IEnumerable>,Microsoft.Extensions.Options.IOptionsMonitorCache);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Options;OptionsMonitor<>;false;OptionsMonitor;(Microsoft.Extensions.Options.IOptionsFactory,System.Collections.Generic.IEnumerable>,Microsoft.Extensions.Options.IOptionsMonitorCache);;Argument[2];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Primitives;Extensions;false;Append;(System.Text.StringBuilder,Microsoft.Extensions.Primitives.StringSegment);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Extensions.Primitives;StringSegment;false;Split;(System.Char[]);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.Extensions.Primitives;StringSegment;false;Split;(System.Char[]);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;false;Enumerator;(Microsoft.Extensions.Primitives.StringTokenizer);;Argument[0].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Primitives;StringTokenizer;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Extensions.Primitives;StringTokenizer;false;StringTokenizer;(Microsoft.Extensions.Primitives.StringSegment,System.Char[]);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Primitives;StringTokenizer;false;StringTokenizer;(Microsoft.Extensions.Primitives.StringSegment,System.Char[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Primitives;StringTokenizer;false;StringTokenizer;(System.String,System.Char[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "Microsoft.Extensions.Primitives;StringValues+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Interop;AnsiStringMarshaller;false;AnsiStringMarshaller;(Microsoft.Interop.Utf8StringMarshaller);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Interop;ArrayMarshaller;false;ArrayMarshaller;(Microsoft.Interop.IMarshallingGenerator,Microsoft.CodeAnalysis.CSharp.Syntax.TypeSyntax,System.Boolean,Microsoft.Interop.InteropGenerationOptions);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Interop;ArrayMarshaller;false;ArrayMarshaller;(Microsoft.Interop.IMarshallingGenerator,Microsoft.CodeAnalysis.CSharp.Syntax.TypeSyntax,System.Boolean,Microsoft.Interop.InteropGenerationOptions);;Argument[1];Argument[Qualifier];generated:taint", + "Microsoft.Interop;ArrayMarshaller;false;ArrayMarshaller;(Microsoft.Interop.IMarshallingGenerator,Microsoft.CodeAnalysis.CSharp.Syntax.TypeSyntax,System.Boolean,Microsoft.Interop.InteropGenerationOptions);;Argument[3];Argument[Qualifier];generated:taint", + "Microsoft.Interop;ArrayMarshaller;false;AsNativeType;(Microsoft.Interop.TypePositionInfo);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Interop;AttributedMarshallingModelGeneratorFactory;false;AttributedMarshallingModelGeneratorFactory;(Microsoft.Interop.IMarshallingGeneratorFactory,Microsoft.Interop.IMarshallingGeneratorFactory,Microsoft.Interop.InteropGenerationOptions);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Interop;AttributedMarshallingModelGeneratorFactory;false;AttributedMarshallingModelGeneratorFactory;(Microsoft.Interop.IMarshallingGeneratorFactory,Microsoft.Interop.IMarshallingGeneratorFactory,Microsoft.Interop.InteropGenerationOptions);;Argument[1];Argument[Qualifier];generated:taint", + "Microsoft.Interop;AttributedMarshallingModelGeneratorFactory;false;AttributedMarshallingModelGeneratorFactory;(Microsoft.Interop.IMarshallingGeneratorFactory,Microsoft.Interop.InteropGenerationOptions);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Interop;BoolMarshallerBase;false;AsNativeType;(Microsoft.Interop.TypePositionInfo);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Interop;BoolMarshallerBase;false;BoolMarshallerBase;(Microsoft.CodeAnalysis.CSharp.Syntax.PredefinedTypeSyntax,System.Int32,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Interop;ByValueContentsMarshalKindValidator;false;ByValueContentsMarshalKindValidator;(Microsoft.Interop.IMarshallingGeneratorFactory);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Interop;ConditionalStackallocMarshallingGenerator;false;GetAllocationMarkerIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Interop;DllImportGenerator+IncrementalityTracker;false;get_ExecutedSteps;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Interop;GeneratorDiagnostics;false;get_Diagnostics;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Interop;MarshallerHelpers;false;GetCompatibleGenericTypeParameterSyntax;(Microsoft.CodeAnalysis.CSharp.Syntax.TypeSyntax);;Argument[0];ReturnValue;generated:taint", + "Microsoft.Interop;MarshallerHelpers;false;GetMarshallerIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Interop;MarshallerHelpers;false;GetNativeSpanIdentifier;(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.StubCodeContext);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Interop;MarshallingAttributeInfoParser;false;MarshallingAttributeInfoParser;(Microsoft.CodeAnalysis.Compilation,Microsoft.Interop.IGeneratorDiagnostics,Microsoft.Interop.DefaultMarshallingInfo,Microsoft.CodeAnalysis.ISymbol);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Interop;MarshallingAttributeInfoParser;false;MarshallingAttributeInfoParser;(Microsoft.CodeAnalysis.Compilation,Microsoft.Interop.IGeneratorDiagnostics,Microsoft.Interop.DefaultMarshallingInfo,Microsoft.CodeAnalysis.ISymbol);;Argument[1];Argument[Qualifier];generated:taint", + "Microsoft.Interop;MarshallingAttributeInfoParser;false;MarshallingAttributeInfoParser;(Microsoft.CodeAnalysis.Compilation,Microsoft.Interop.IGeneratorDiagnostics,Microsoft.Interop.DefaultMarshallingInfo,Microsoft.CodeAnalysis.ISymbol);;Argument[2];Argument[Qualifier];generated:taint", + "Microsoft.Interop;MarshallingAttributeInfoParser;false;MarshallingAttributeInfoParser;(Microsoft.CodeAnalysis.Compilation,Microsoft.Interop.IGeneratorDiagnostics,Microsoft.Interop.DefaultMarshallingInfo,Microsoft.CodeAnalysis.ISymbol);;Argument[3];Argument[Qualifier];generated:taint", + "Microsoft.Interop;PinnableManagedValueMarshaller;false;AsNativeType;(Microsoft.Interop.TypePositionInfo);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Interop;PinnableManagedValueMarshaller;false;PinnableManagedValueMarshaller;(Microsoft.Interop.IMarshallingGenerator);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Interop;PlatformDefinedStringMarshaller;false;PlatformDefinedStringMarshaller;(Microsoft.Interop.IMarshallingGenerator,Microsoft.Interop.IMarshallingGenerator);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Interop;PlatformDefinedStringMarshaller;false;PlatformDefinedStringMarshaller;(Microsoft.Interop.IMarshallingGenerator,Microsoft.Interop.IMarshallingGenerator);;Argument[1];Argument[Qualifier];generated:taint", + "Microsoft.Interop;StubCodeContext;true;GetAdditionalIdentifier;(Microsoft.Interop.TypePositionInfo,System.String);;Argument[1];ReturnValue;generated:taint", + "Microsoft.Interop;StubCodeContext;true;GetAdditionalIdentifier;(Microsoft.Interop.TypePositionInfo,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.NET.Build.Tasks;RunReadyToRunCompiler;false;GenerateResponseFileCommands;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.NETCore.Platforms.BuildTasks;Extensions;false;NullAsEmpty<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "Microsoft.NETCore.Platforms.BuildTasks;RuntimeGroupCollection;false;RuntimeGroupCollection;(System.Collections.Generic.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;false;RuntimeVersion;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.NETCore.Platforms.BuildTasks;RuntimeVersion;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.VisualBasic;VBCodeProvider;false;CreateCompiler;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.VisualBasic;VBCodeProvider;false;CreateGenerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.VisualBasic;VBCodeProvider;false;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.VisualBasic;VBCodeProvider;false;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "Microsoft.VisualBasic;VBCodeProvider;false;VBCodeProvider;(System.Collections.Generic.IDictionary);;Argument[0].Element;Argument[Qualifier];generated:taint", + "Microsoft.Win32.SafeHandles;SafeFileHandle;false;SafeFileHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Win32.SafeHandles;SafePipeHandle;false;SafePipeHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Win32.SafeHandles;SafeProcessHandle;false;SafeProcessHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Win32.SafeHandles;SafeRegistryHandle;false;SafeRegistryHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Win32.SafeHandles;SafeWaitHandle;false;SafeWaitHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "Microsoft.Win32;RegistryKey;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Win32;RegistryKey;false;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint", + "Microsoft.Win32;RegistryKey;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ArrayBufferWriter<>;false;GetMemory;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ArrayBufferWriter<>;false;get_WrittenMemory;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;BuffersExtensions;false;PositionOf<>;(System.Buffers.ReadOnlySequence,T);;Argument[0];ReturnValue;generated:taint", + "System.Buffers;MemoryHandle;false;MemoryHandle;(System.Void*,System.Runtime.InteropServices.GCHandle,System.Buffers.IPinnable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Buffers;MemoryHandle;false;MemoryHandle;(System.Void*,System.Runtime.InteropServices.GCHandle,System.Buffers.IPinnable);;Argument[1];Argument[Qualifier];generated:taint", + "System.Buffers;MemoryHandle;false;MemoryHandle;(System.Void*,System.Runtime.InteropServices.GCHandle,System.Buffers.IPinnable);;Argument[2];Argument[Qualifier];generated:taint", + "System.Buffers;MemoryHandle;false;get_Pointer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;MemoryManager<>;false;CreateMemory;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;MemoryManager<>;false;CreateMemory;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;MemoryManager<>;true;get_Memory;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>+Enumerator;false;Enumerator;(System.Buffers.ReadOnlySequence<>);;Argument[0];Argument[Qualifier];generated:taint", + "System.Buffers;ReadOnlySequence<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;GetPosition;(System.Int64);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;GetPosition;(System.Int64,System.SequencePosition);;Argument[1];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);;Argument[2];Argument[Qualifier];generated:taint", + "System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(System.ReadOnlyMemory);;Argument[0];Argument[Qualifier];generated:taint", + "System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(T[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int32,System.SequencePosition);;Argument[1];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int32,System.SequencePosition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int64);;Argument[Qualifier];ReturnValue;generated:value", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int64,System.Int64);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int64,System.SequencePosition);;Argument[1];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int64,System.SequencePosition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition);;Argument[0];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.Int64);;Argument[0];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.Int64);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.SequencePosition);;Argument[0];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.SequencePosition);;Argument[1];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;TryGet;(System.SequencePosition,System.ReadOnlyMemory,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;get_End;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;get_First;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;ReadOnlySequence<>;false;get_Start;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;SequenceReader<>;false;SequenceReader;(System.Buffers.ReadOnlySequence);;Argument[0];Argument[Qualifier];generated:taint", + "System.Buffers;SequenceReader<>;false;TryReadExact;(System.Int32,System.Buffers.ReadOnlySequence);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;SequenceReader<>;false;TryReadTo;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;SequenceReader<>;false;TryReadTo;(System.Buffers.ReadOnlySequence,T,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;SequenceReader<>;false;TryReadTo;(System.Buffers.ReadOnlySequence,T,T,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;SequenceReader<>;false;TryReadToAny;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;SequenceReader<>;false;get_Position;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Buffers;SequenceReader<>;false;get_UnreadSequence;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeCompiler;false;JoinStringArray;(System.String[],System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeCompiler;false;JoinStringArray;(System.String[],System.String);;Argument[1];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeCompiler;true;GetResponseFileCmdArgs;(System.CodeDom.Compiler.CompilerParameters,System.String);;Argument[0];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeDomProvider;true;CreateEscapedIdentifier;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeDomProvider;true;CreateGenerator;(System.IO.TextWriter);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeDomProvider;true;CreateGenerator;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeDomProvider;true;CreateValidIdentifier;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromCompileUnit;(System.CodeDom.CodeCompileUnit,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromExpression;(System.CodeDom.CodeExpression,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromStatement;(System.CodeDom.CodeStatement,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeDomProvider;true;GetTypeOutput;(System.CodeDom.CodeTypeReference);;Argument[0];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;CreateEscapedIdentifier;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;CreateValidIdentifier;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromCompileUnit;(System.CodeDom.CodeCompileUnit,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromExpression;(System.CodeDom.CodeExpression,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromStatement;(System.CodeDom.CodeStatement,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;GenerateTypes;(System.CodeDom.CodeNamespace);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;GetTypeOutput;(System.CodeDom.CodeTypeReference);;Argument[0];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;get_CurrentClass;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;get_CurrentMember;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;get_CurrentMemberName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;get_CurrentTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeGenerator;false;get_Output;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeGenerator;true;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeGenerator;true;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeGenerator;true;GenerateNamespace;(System.CodeDom.CodeNamespace);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CodeGeneratorOptions;false;get_BracingStyle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeGeneratorOptions;false;get_IndentString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CodeGeneratorOptions;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CompilerErrorCollection;false;Add;(System.CodeDom.Compiler.CompilerError);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CompilerErrorCollection;false;AddRange;(System.CodeDom.Compiler.CompilerErrorCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CompilerErrorCollection;false;AddRange;(System.CodeDom.Compiler.CompilerError[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CompilerErrorCollection;false;CompilerErrorCollection;(System.CodeDom.Compiler.CompilerErrorCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CompilerErrorCollection;false;CompilerErrorCollection;(System.CodeDom.Compiler.CompilerError[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CompilerErrorCollection;false;CopyTo;(System.CodeDom.Compiler.CompilerError[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom.Compiler;CompilerErrorCollection;false;Insert;(System.Int32,System.CodeDom.Compiler.CompilerError);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CompilerErrorCollection;false;Remove;(System.CodeDom.Compiler.CompilerError);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CompilerErrorCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CompilerErrorCollection;false;set_Item;(System.Int32,System.CodeDom.Compiler.CompilerError);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CompilerInfo;false;get_CodeDomProviderType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CompilerParameters;false;get_TempFiles;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CompilerParameters;false;set_TempFiles;(System.CodeDom.Compiler.TempFileCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;CompilerResults;false;get_CompiledAssembly;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;CompilerResults;false;set_CompiledAssembly;(System.Reflection.Assembly);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[2].Element;ReturnValue;generated:taint", + "System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[3];ReturnValue;generated:taint", + "System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[4];ReturnValue;generated:taint", + "System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.IntPtr,System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[3].Element;ReturnValue;generated:taint", + "System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[1].Element;ReturnValue;generated:taint", + "System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[3];ReturnValue;generated:taint", + "System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[2].Element;ReturnValue;generated:taint", + "System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[3];ReturnValue;generated:taint", + "System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[4];ReturnValue;generated:taint", + "System.CodeDom.Compiler;GeneratedCodeAttribute;false;GeneratedCodeAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;GeneratedCodeAttribute;false;GeneratedCodeAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;GeneratedCodeAttribute;false;get_Tool;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;GeneratedCodeAttribute;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;IndentedTextWriter;false;FlushAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;IndentedTextWriter;false;IndentedTextWriter;(System.IO.TextWriter,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;IndentedTextWriter;false;IndentedTextWriter;(System.IO.TextWriter,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;IndentedTextWriter;false;WriteLineNoTabsAsync;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.CodeDom.Compiler;IndentedTextWriter;false;WriteLineNoTabsAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;IndentedTextWriter;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;IndentedTextWriter;false;get_InnerWriter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;IndentedTextWriter;false;get_NewLine;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;IndentedTextWriter;false;set_NewLine;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;TempFileCollection;false;AddExtension;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.CodeDom.Compiler;TempFileCollection;false;AddExtension;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;TempFileCollection;false;AddExtension;(System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.CodeDom.Compiler;TempFileCollection;false;AddExtension;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;TempFileCollection;false;TempFileCollection;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom.Compiler;TempFileCollection;false;get_BasePath;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom.Compiler;TempFileCollection;false;get_TempDir;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeArgumentReferenceExpression;false;CodeArgumentReferenceExpression;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArgumentReferenceExpression;false;get_ParameterName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeArgumentReferenceExpression;false;set_ParameterName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.CodeDom.CodeTypeReference,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.String,System.CodeDom.CodeExpression[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.String,System.CodeDom.CodeExpression[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.Type,System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.Type,System.CodeDom.CodeExpression[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.Type,System.CodeDom.CodeExpression[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.Type,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;get_CreateType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;get_Initializers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeArrayCreateExpression;false;set_CreateType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayIndexerExpression;false;CodeArrayIndexerExpression;(System.CodeDom.CodeExpression,System.CodeDom.CodeExpression[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeArrayIndexerExpression;false;get_Indices;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeAttachEventStatement;false;CodeAttachEventStatement;(System.CodeDom.CodeEventReferenceExpression,System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttachEventStatement;false;get_Event;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeAttachEventStatement;false;set_Event;(System.CodeDom.CodeEventReferenceExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeArgument;false;CodeAttributeArgument;(System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeArgument;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeAttributeArgument;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeArgumentCollection;false;Add;(System.CodeDom.CodeAttributeArgument);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeArgumentCollection;false;AddRange;(System.CodeDom.CodeAttributeArgumentCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeArgumentCollection;false;AddRange;(System.CodeDom.CodeAttributeArgument[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeArgumentCollection;false;CodeAttributeArgumentCollection;(System.CodeDom.CodeAttributeArgumentCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeArgumentCollection;false;CodeAttributeArgumentCollection;(System.CodeDom.CodeAttributeArgument[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeArgumentCollection;false;CopyTo;(System.CodeDom.CodeAttributeArgument[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeAttributeArgumentCollection;false;Insert;(System.Int32,System.CodeDom.CodeAttributeArgument);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeArgumentCollection;false;Remove;(System.CodeDom.CodeAttributeArgument);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeArgumentCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeAttributeArgumentCollection;false;set_Item;(System.Int32,System.CodeDom.CodeAttributeArgument);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeAttributeArgument[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeAttributeArgument[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.String,System.CodeDom.CodeAttributeArgument[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.String,System.CodeDom.CodeAttributeArgument[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclaration;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeAttributeDeclaration;false;get_AttributeType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeAttributeDeclaration;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeAttributeDeclaration;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclarationCollection;false;Add;(System.CodeDom.CodeAttributeDeclaration);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclarationCollection;false;AddRange;(System.CodeDom.CodeAttributeDeclarationCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclarationCollection;false;AddRange;(System.CodeDom.CodeAttributeDeclaration[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclarationCollection;false;CodeAttributeDeclarationCollection;(System.CodeDom.CodeAttributeDeclarationCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclarationCollection;false;CodeAttributeDeclarationCollection;(System.CodeDom.CodeAttributeDeclaration[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclarationCollection;false;CopyTo;(System.CodeDom.CodeAttributeDeclaration[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeAttributeDeclarationCollection;false;Insert;(System.Int32,System.CodeDom.CodeAttributeDeclaration);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclarationCollection;false;Remove;(System.CodeDom.CodeAttributeDeclaration);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeAttributeDeclarationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeAttributeDeclarationCollection;false;set_Item;(System.Int32,System.CodeDom.CodeAttributeDeclaration);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCastExpression;false;CodeCastExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCastExpression;false;CodeCastExpression;(System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCastExpression;false;CodeCastExpression;(System.Type,System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCastExpression;false;get_TargetType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeCastExpression;false;set_TargetType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference,System.CodeDom.CodeStatement[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference,System.CodeDom.CodeStatement[]);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference,System.CodeDom.CodeStatement[]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClause;false;get_CatchExceptionType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeCatchClause;false;get_LocalName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeCatchClause;false;get_Statements;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeCatchClause;false;set_CatchExceptionType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClause;false;set_LocalName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClauseCollection;false;Add;(System.CodeDom.CodeCatchClause);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClauseCollection;false;AddRange;(System.CodeDom.CodeCatchClauseCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClauseCollection;false;AddRange;(System.CodeDom.CodeCatchClause[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClauseCollection;false;CodeCatchClauseCollection;(System.CodeDom.CodeCatchClauseCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClauseCollection;false;CodeCatchClauseCollection;(System.CodeDom.CodeCatchClause[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClauseCollection;false;CopyTo;(System.CodeDom.CodeCatchClause[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeCatchClauseCollection;false;Insert;(System.Int32,System.CodeDom.CodeCatchClause);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClauseCollection;false;Remove;(System.CodeDom.CodeCatchClause);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCatchClauseCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeCatchClauseCollection;false;set_Item;(System.Int32,System.CodeDom.CodeCatchClause);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeChecksumPragma;false;CodeChecksumPragma;(System.String,System.Guid,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeChecksumPragma;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeChecksumPragma;false;set_FileName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeComment;false;CodeComment;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeComment;false;CodeComment;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeComment;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeComment;false;set_Text;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCommentStatementCollection;false;Add;(System.CodeDom.CodeCommentStatement);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCommentStatementCollection;false;AddRange;(System.CodeDom.CodeCommentStatementCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCommentStatementCollection;false;AddRange;(System.CodeDom.CodeCommentStatement[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCommentStatementCollection;false;CodeCommentStatementCollection;(System.CodeDom.CodeCommentStatementCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCommentStatementCollection;false;CodeCommentStatementCollection;(System.CodeDom.CodeCommentStatement[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCommentStatementCollection;false;CopyTo;(System.CodeDom.CodeCommentStatement[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeCommentStatementCollection;false;Insert;(System.Int32,System.CodeDom.CodeCommentStatement);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCommentStatementCollection;false;Remove;(System.CodeDom.CodeCommentStatement);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCommentStatementCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeCommentStatementCollection;false;set_Item;(System.Int32,System.CodeDom.CodeCommentStatement);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeCompileUnit;false;get_AssemblyCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeCompileUnit;false;get_EndDirectives;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeCompileUnit;false;get_ReferencedAssemblies;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeCompileUnit;false;get_StartDirectives;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeDefaultValueExpression;false;CodeDefaultValueExpression;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDefaultValueExpression;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeDefaultValueExpression;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDelegateCreateExpression;false;CodeDelegateCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDelegateCreateExpression;false;CodeDelegateCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDelegateCreateExpression;false;get_DelegateType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeDelegateCreateExpression;false;get_MethodName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeDelegateCreateExpression;false;set_DelegateType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDelegateCreateExpression;false;set_MethodName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDirectiveCollection;false;Add;(System.CodeDom.CodeDirective);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDirectiveCollection;false;AddRange;(System.CodeDom.CodeDirectiveCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDirectiveCollection;false;AddRange;(System.CodeDom.CodeDirective[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDirectiveCollection;false;CodeDirectiveCollection;(System.CodeDom.CodeDirectiveCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDirectiveCollection;false;CodeDirectiveCollection;(System.CodeDom.CodeDirective[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDirectiveCollection;false;CopyTo;(System.CodeDom.CodeDirective[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeDirectiveCollection;false;Insert;(System.Int32,System.CodeDom.CodeDirective);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDirectiveCollection;false;Remove;(System.CodeDom.CodeDirective);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeDirectiveCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeDirectiveCollection;false;set_Item;(System.Int32,System.CodeDom.CodeDirective);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeEventReferenceExpression;false;CodeEventReferenceExpression;(System.CodeDom.CodeExpression,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeEventReferenceExpression;false;get_EventName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeEventReferenceExpression;false;set_EventName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeExpressionCollection;false;Add;(System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeExpressionCollection;false;AddRange;(System.CodeDom.CodeExpressionCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeExpressionCollection;false;AddRange;(System.CodeDom.CodeExpression[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeExpressionCollection;false;CodeExpressionCollection;(System.CodeDom.CodeExpressionCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeExpressionCollection;false;CodeExpressionCollection;(System.CodeDom.CodeExpression[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeExpressionCollection;false;CopyTo;(System.CodeDom.CodeExpression[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeExpressionCollection;false;Insert;(System.Int32,System.CodeDom.CodeExpression);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeExpressionCollection;false;Remove;(System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeExpressionCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeExpressionCollection;false;set_Item;(System.Int32,System.CodeDom.CodeExpression);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeFieldReferenceExpression;false;CodeFieldReferenceExpression;(System.CodeDom.CodeExpression,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeFieldReferenceExpression;false;get_FieldName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeFieldReferenceExpression;false;set_FieldName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeGotoStatement;false;CodeGotoStatement;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeGotoStatement;false;get_Label;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeGotoStatement;false;set_Label;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeIndexerExpression;false;CodeIndexerExpression;(System.CodeDom.CodeExpression,System.CodeDom.CodeExpression[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeIndexerExpression;false;get_Indices;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeLabeledStatement;false;CodeLabeledStatement;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeLabeledStatement;false;CodeLabeledStatement;(System.String,System.CodeDom.CodeStatement);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeLabeledStatement;false;get_Label;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeLabeledStatement;false;set_Label;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeLinePragma;false;CodeLinePragma;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeLinePragma;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeLinePragma;false;set_FileName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMemberEvent;false;get_ImplementationTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMemberEvent;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMemberEvent;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMemberField;false;CodeMemberField;(System.CodeDom.CodeTypeReference,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMemberField;false;CodeMemberField;(System.CodeDom.CodeTypeReference,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMemberField;false;CodeMemberField;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMemberField;false;CodeMemberField;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMemberField;false;CodeMemberField;(System.Type,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMemberField;false;CodeMemberField;(System.Type,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMemberField;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMemberField;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMemberMethod;false;get_ImplementationTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMemberMethod;false;get_Parameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMemberMethod;false;get_ReturnType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMemberMethod;false;get_ReturnTypeCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMemberMethod;false;get_Statements;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMemberMethod;false;get_TypeParameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMemberMethod;false;set_ReturnType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMemberProperty;false;get_ImplementationTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMemberProperty;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMemberProperty;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMethodInvokeExpression;false;CodeMethodInvokeExpression;(System.CodeDom.CodeExpression,System.String,System.CodeDom.CodeExpression[]);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMethodInvokeExpression;false;CodeMethodInvokeExpression;(System.CodeDom.CodeMethodReferenceExpression,System.CodeDom.CodeExpression[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMethodInvokeExpression;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMethodInvokeExpression;false;set_Method;(System.CodeDom.CodeMethodReferenceExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMethodReferenceExpression;false;CodeMethodReferenceExpression;(System.CodeDom.CodeExpression,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMethodReferenceExpression;false;CodeMethodReferenceExpression;(System.CodeDom.CodeExpression,System.String,System.CodeDom.CodeTypeReference[]);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMethodReferenceExpression;false;CodeMethodReferenceExpression;(System.CodeDom.CodeExpression,System.String,System.CodeDom.CodeTypeReference[]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeMethodReferenceExpression;false;get_MethodName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMethodReferenceExpression;false;get_TypeArguments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeMethodReferenceExpression;false;set_MethodName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespace;false;CodeNamespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespace;false;get_Comments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeNamespace;false;get_Imports;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeNamespace;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeNamespace;false;get_Types;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeNamespace;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceCollection;false;Add;(System.CodeDom.CodeNamespace);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceCollection;false;AddRange;(System.CodeDom.CodeNamespaceCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceCollection;false;AddRange;(System.CodeDom.CodeNamespace[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceCollection;false;CodeNamespaceCollection;(System.CodeDom.CodeNamespaceCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceCollection;false;CodeNamespaceCollection;(System.CodeDom.CodeNamespace[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceCollection;false;CopyTo;(System.CodeDom.CodeNamespace[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeNamespaceCollection;false;Insert;(System.Int32,System.CodeDom.CodeNamespace);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceCollection;false;Remove;(System.CodeDom.CodeNamespace);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeNamespaceCollection;false;set_Item;(System.Int32,System.CodeDom.CodeNamespace);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceImport;false;CodeNamespaceImport;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceImport;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeNamespaceImport;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceImportCollection;false;Add;(System.CodeDom.CodeNamespaceImport);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceImportCollection;false;AddRange;(System.CodeDom.CodeNamespaceImport[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeNamespaceImportCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeNamespaceImportCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeNamespaceImportCollection;false;set_Item;(System.Int32,System.CodeDom.CodeNamespaceImport);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeObject;false;get_UserData;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeObjectCreateExpression;false;CodeObjectCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeObjectCreateExpression;false;CodeObjectCreateExpression;(System.String,System.CodeDom.CodeExpression[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeObjectCreateExpression;false;CodeObjectCreateExpression;(System.Type,System.CodeDom.CodeExpression[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeObjectCreateExpression;false;get_CreateType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeObjectCreateExpression;false;set_CreateType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.CodeDom.CodeTypeReference,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.CodeDom.CodeTypeReference,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.Type,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.Type,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpression;false;get_CustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeParameterDeclarationExpression;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeParameterDeclarationExpression;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeParameterDeclarationExpression;false;set_CustomAttributes;(System.CodeDom.CodeAttributeDeclarationCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpression;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpression;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpressionCollection;false;Add;(System.CodeDom.CodeParameterDeclarationExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpressionCollection;false;AddRange;(System.CodeDom.CodeParameterDeclarationExpressionCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpressionCollection;false;AddRange;(System.CodeDom.CodeParameterDeclarationExpression[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpressionCollection;false;CodeParameterDeclarationExpressionCollection;(System.CodeDom.CodeParameterDeclarationExpressionCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpressionCollection;false;CodeParameterDeclarationExpressionCollection;(System.CodeDom.CodeParameterDeclarationExpression[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpressionCollection;false;CopyTo;(System.CodeDom.CodeParameterDeclarationExpression[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeParameterDeclarationExpressionCollection;false;Insert;(System.Int32,System.CodeDom.CodeParameterDeclarationExpression);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpressionCollection;false;Remove;(System.CodeDom.CodeParameterDeclarationExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeParameterDeclarationExpressionCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeParameterDeclarationExpressionCollection;false;set_Item;(System.Int32,System.CodeDom.CodeParameterDeclarationExpression);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodePropertyReferenceExpression;false;CodePropertyReferenceExpression;(System.CodeDom.CodeExpression,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodePropertyReferenceExpression;false;get_PropertyName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodePropertyReferenceExpression;false;set_PropertyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeRegionDirective;false;CodeRegionDirective;(System.CodeDom.CodeRegionMode,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeRegionDirective;false;get_RegionText;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeRegionDirective;false;set_RegionText;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeRemoveEventStatement;false;CodeRemoveEventStatement;(System.CodeDom.CodeEventReferenceExpression,System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeRemoveEventStatement;false;CodeRemoveEventStatement;(System.CodeDom.CodeExpression,System.String,System.CodeDom.CodeExpression);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeRemoveEventStatement;false;get_Event;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeRemoveEventStatement;false;set_Event;(System.CodeDom.CodeEventReferenceExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeSnippetCompileUnit;false;CodeSnippetCompileUnit;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeSnippetCompileUnit;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeSnippetCompileUnit;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeSnippetExpression;false;CodeSnippetExpression;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeSnippetExpression;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeSnippetExpression;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeSnippetStatement;false;CodeSnippetStatement;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeSnippetStatement;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeSnippetStatement;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeSnippetTypeMember;false;CodeSnippetTypeMember;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeSnippetTypeMember;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeSnippetTypeMember;false;set_Text;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeStatement;false;get_EndDirectives;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeStatement;false;get_StartDirectives;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeStatementCollection;false;Add;(System.CodeDom.CodeStatement);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeStatementCollection;false;AddRange;(System.CodeDom.CodeStatementCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeStatementCollection;false;AddRange;(System.CodeDom.CodeStatement[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeStatementCollection;false;CodeStatementCollection;(System.CodeDom.CodeStatementCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeStatementCollection;false;CodeStatementCollection;(System.CodeDom.CodeStatement[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeStatementCollection;false;CopyTo;(System.CodeDom.CodeStatement[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeStatementCollection;false;Insert;(System.Int32,System.CodeDom.CodeStatement);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeStatementCollection;false;Remove;(System.CodeDom.CodeStatement);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeStatementCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeStatementCollection;false;set_Item;(System.Int32,System.CodeDom.CodeStatement);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeDeclaration;false;CodeTypeDeclaration;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeDeclaration;false;get_BaseTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeDeclaration;false;get_Members;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeDeclaration;false;get_TypeParameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeDeclarationCollection;false;Add;(System.CodeDom.CodeTypeDeclaration);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeDeclarationCollection;false;AddRange;(System.CodeDom.CodeTypeDeclarationCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeDeclarationCollection;false;AddRange;(System.CodeDom.CodeTypeDeclaration[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeDeclarationCollection;false;CodeTypeDeclarationCollection;(System.CodeDom.CodeTypeDeclarationCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeDeclarationCollection;false;CodeTypeDeclarationCollection;(System.CodeDom.CodeTypeDeclaration[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeDeclarationCollection;false;CopyTo;(System.CodeDom.CodeTypeDeclaration[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeTypeDeclarationCollection;false;Insert;(System.Int32,System.CodeDom.CodeTypeDeclaration);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeDeclarationCollection;false;Remove;(System.CodeDom.CodeTypeDeclaration);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeDeclarationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeDeclarationCollection;false;set_Item;(System.Int32,System.CodeDom.CodeTypeDeclaration);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeDelegate;false;CodeTypeDelegate;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeDelegate;false;get_ReturnType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeDelegate;false;set_ReturnType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeMember;false;get_CustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeMember;false;get_EndDirectives;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeMember;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeMember;false;get_StartDirectives;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeMember;false;set_CustomAttributes;(System.CodeDom.CodeAttributeDeclarationCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeMember;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeMemberCollection;false;Add;(System.CodeDom.CodeTypeMember);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeMemberCollection;false;AddRange;(System.CodeDom.CodeTypeMemberCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeMemberCollection;false;AddRange;(System.CodeDom.CodeTypeMember[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeMemberCollection;false;CodeTypeMemberCollection;(System.CodeDom.CodeTypeMemberCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeMemberCollection;false;CodeTypeMemberCollection;(System.CodeDom.CodeTypeMember[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeMemberCollection;false;CopyTo;(System.CodeDom.CodeTypeMember[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeTypeMemberCollection;false;Insert;(System.Int32,System.CodeDom.CodeTypeMember);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeMemberCollection;false;Remove;(System.CodeDom.CodeTypeMember);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeMemberCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeMemberCollection;false;set_Item;(System.Int32,System.CodeDom.CodeTypeMember);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeOfExpression;false;CodeTypeOfExpression;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeOfExpression;false;CodeTypeOfExpression;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeOfExpression;false;CodeTypeOfExpression;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeOfExpression;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeOfExpression;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeParameter;false;CodeTypeParameter;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeParameter;false;get_Constraints;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeParameter;false;get_CustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeParameter;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeParameter;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeParameterCollection;false;Add;(System.CodeDom.CodeTypeParameter);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeParameterCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeParameterCollection;false;AddRange;(System.CodeDom.CodeTypeParameterCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeParameterCollection;false;AddRange;(System.CodeDom.CodeTypeParameter[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeParameterCollection;false;CodeTypeParameterCollection;(System.CodeDom.CodeTypeParameterCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeParameterCollection;false;CodeTypeParameterCollection;(System.CodeDom.CodeTypeParameter[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeParameterCollection;false;CopyTo;(System.CodeDom.CodeTypeParameter[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeTypeParameterCollection;false;Insert;(System.Int32,System.CodeDom.CodeTypeParameter);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeParameterCollection;false;Remove;(System.CodeDom.CodeTypeParameter);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeParameterCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeParameterCollection;false;set_Item;(System.Int32,System.CodeDom.CodeTypeParameter);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReference;false;CodeTypeReference;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReference;false;CodeTypeReference;(System.String,System.CodeDom.CodeTypeReferenceOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReference;false;CodeTypeReference;(System.String,System.CodeDom.CodeTypeReference[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReference;false;CodeTypeReference;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReference;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeReference;false;get_TypeArguments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeReference;false;set_BaseType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceCollection;false;Add;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceCollection;false;Add;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceCollection;false;AddRange;(System.CodeDom.CodeTypeReferenceCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceCollection;false;AddRange;(System.CodeDom.CodeTypeReference[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceCollection;false;CodeTypeReferenceCollection;(System.CodeDom.CodeTypeReferenceCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceCollection;false;CodeTypeReferenceCollection;(System.CodeDom.CodeTypeReference[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceCollection;false;CopyTo;(System.CodeDom.CodeTypeReference[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.CodeDom;CodeTypeReferenceCollection;false;Insert;(System.Int32,System.CodeDom.CodeTypeReference);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceCollection;false;Remove;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeReferenceCollection;false;set_Item;(System.Int32,System.CodeDom.CodeTypeReference);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceExpression;false;CodeTypeReferenceExpression;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceExpression;false;CodeTypeReferenceExpression;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceExpression;false;CodeTypeReferenceExpression;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeTypeReferenceExpression;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeTypeReferenceExpression;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.CodeDom.CodeTypeReference,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.CodeDom.CodeTypeReference,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.CodeDom.CodeTypeReference,System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.CodeDom.CodeTypeReference,System.String,System.CodeDom.CodeExpression);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.String,System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.String,System.String,System.CodeDom.CodeExpression);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.Type,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.Type,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.Type,System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.Type,System.String,System.CodeDom.CodeExpression);;Argument[1];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableDeclarationStatement;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableReferenceExpression;false;CodeVariableReferenceExpression;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.CodeDom;CodeVariableReferenceExpression;false;get_VariableName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.CodeDom;CodeVariableReferenceExpression;false;set_VariableName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Concurrent;BlockingCollection<>;false;Add;(T,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Concurrent;BlockingCollection<>;false;BlockingCollection;(System.Collections.Concurrent.IProducerConsumerCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Concurrent;BlockingCollection<>;false;BlockingCollection;(System.Collections.Concurrent.IProducerConsumerCollection,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Concurrent;BlockingCollection<>;false;TryAdd;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Concurrent;BlockingCollection<>;false;TryAdd;(T,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Concurrent;BlockingCollection<>;false;TryAdd;(T,System.Int32,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Concurrent;BlockingCollection<>;false;TryAdd;(T,System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Concurrent;ConcurrentBag<>;false;ToArray;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Concurrent;ConcurrentBag<>;false;TryAdd;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Concurrent;ConcurrentBag<>;false;TryPeek;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Concurrent;ConcurrentBag<>;false;TryTake;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Concurrent;ConcurrentDictionary<,>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Concurrent;ConcurrentDictionary<,>;false;GetOrAdd;(TKey,TValue);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Concurrent;ConcurrentDictionary<,>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Concurrent;ConcurrentStack<>;false;ConcurrentStack;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Concurrent;ConcurrentStack<>;false;TryPeek;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Concurrent;ConcurrentStack<>;false;TryPop;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Concurrent;ConcurrentStack<>;false;TryPopRange;(T[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Collections.Concurrent;ConcurrentStack<>;false;TryPopRange;(T[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Collections.Concurrent;ConcurrentStack<>;false;TryTake;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Concurrent;OrderablePartitioner<>;false;GetDynamicPartitions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Concurrent;Partitioner;false;Create<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Concurrent;Partitioner;false;Create<>;(System.Collections.Generic.IEnumerable,System.Collections.Concurrent.EnumerablePartitionerOptions);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Concurrent;Partitioner;false;Create<>;(System.Collections.Generic.IList,System.Boolean);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Concurrent;Partitioner;false;Create<>;(TSource[],System.Boolean);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;AsReadOnly<,>;(System.Collections.Generic.IDictionary);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;AsReadOnly<>;(System.Collections.Generic.IList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;GetDefaultAssets;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;GetDefaultGroup;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;GetDefaultRuntimeFileAssets;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;GetRuntimeAssets;(System.Collections.Generic.IEnumerable,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;GetRuntimeFileAssets;(System.Collections.Generic.IEnumerable,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;GetRuntimeGroup;(System.Collections.Generic.IEnumerable,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;GetValueOrDefault<,>;(System.Collections.Generic.IReadOnlyDictionary,TKey,TValue);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;GetValueOrDefault<,>;(System.Collections.Generic.IReadOnlyDictionary,TKey,TValue);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;GetValueOrDefault<,>;(System.Collections.Generic.IReadOnlyDictionary,TKey,TValue);;Argument[2];ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;Remove<,>;(System.Collections.Generic.IDictionary,TKey,TValue);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;TryAdd<,>;(System.Collections.Generic.IDictionary,TKey,TValue);;Argument[0].Element;Argument[2];generated:taint", + "System.Collections.Generic;CollectionExtensions;false;TryAdd<,>;(System.Collections.Generic.IDictionary,TKey,TValue);;Argument[1];Argument[0].Element;generated:taint", + "System.Collections.Generic;CollectionExtensions;false;TryAdd<,>;(System.Collections.Generic.IDictionary,TKey,TValue);;Argument[2];Argument[0].Element;generated:taint", + "System.Collections.Generic;Dictionary<,>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Dictionary<,>+Enumerator;false;get_Entry;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Dictionary<,>+Enumerator;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Dictionary<,>+Enumerator;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Dictionary<,>+KeyCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Dictionary<,>+KeyCollection;false;KeyCollection;(System.Collections.Generic.Dictionary<,>);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;Dictionary<,>+KeyCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Dictionary<,>+ValueCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Dictionary<,>+ValueCollection;false;ValueCollection;(System.Collections.Generic.Dictionary<,>);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;Dictionary<,>+ValueCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Dictionary<,>;false;Dictionary;(System.Int32,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Generic;Dictionary<,>;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Collections.Generic;Dictionary<,>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Dictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Generic;HashSet<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;HashSet<>;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Collections.Generic;HashSet<>;false;HashSet;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;HashSet<>;false;TryGetValue;(T,T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;HashSet<>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;KeyValuePair;false;Create<,>;(TKey,TValue);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Generic;KeyValuePair;false;Create<,>;(TKey,TValue);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Generic;KeyValuePair<,>;false;Deconstruct;(TKey,TValue);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;KeyValuePair<,>;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;KeyValuePair<,>;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedList<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddAfter;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[0];Argument[1];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddAfter;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[Qualifier];Argument[1];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddAfter;(System.Collections.Generic.LinkedListNode,T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddAfter;(System.Collections.Generic.LinkedListNode,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[0];Argument[1];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[1];Argument[0];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[Qualifier];Argument[1];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[1];Argument[0];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddFirst;(System.Collections.Generic.LinkedListNode);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddFirst;(System.Collections.Generic.LinkedListNode);;Argument[Qualifier];Argument[0];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddFirst;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddFirst;(T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddFirst;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddLast;(System.Collections.Generic.LinkedListNode);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddLast;(System.Collections.Generic.LinkedListNode);;Argument[Qualifier];Argument[0];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddLast;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddLast;(T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedList<>;false;AddLast;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedList<>;false;LinkedList;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;LinkedList<>;false;LinkedList;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;LinkedList<>;false;Remove;(System.Collections.Generic.LinkedListNode);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;LinkedList<>;false;get_First;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedList<>;false;get_Last;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedList<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Generic;LinkedListNode<>;false;LinkedListNode;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;LinkedListNode<>;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedListNode<>;false;get_Next;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedListNode<>;false;get_Previous;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedListNode<>;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;LinkedListNode<>;false;set_Value;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;List<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;List<>;false;CopyTo;(T[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Collections.Generic;List<>;false;List;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;List<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Generic;NonRandomizedStringEqualityComparer;false;GetUnderlyingEqualityComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;PriorityQueue<,>+UnorderedItemsCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;PriorityQueue<,>+UnorderedItemsCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;PriorityQueue<,>+UnorderedItemsCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Generic;PriorityQueue<,>;false;Dequeue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;PriorityQueue<,>;false;EnqueueDequeue;(TElement,TPriority);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Generic;PriorityQueue<,>;false;EnqueueDequeue;(TElement,TPriority);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;PriorityQueue<,>;false;EnqueueRange;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;PriorityQueue<,>;false;Peek;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;PriorityQueue<,>;false;PriorityQueue;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;PriorityQueue<,>;false;PriorityQueue;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;PriorityQueue<,>;false;PriorityQueue;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Generic;PriorityQueue<,>;false;PriorityQueue;(System.Int32,System.Collections.Generic.IComparer);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Generic;PriorityQueue<,>;false;TryDequeue;(TElement,TPriority);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;PriorityQueue<,>;false;TryPeek;(TElement,TPriority);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;PriorityQueue<,>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Queue<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Queue<>;false;Dequeue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Queue<>;false;Enqueue;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;Queue<>;false;Queue;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;Queue<>;false;TryDequeue;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Queue<>;false;TryPeek;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Queue<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;KeyCollection;(System.Collections.Generic.SortedDictionary<,>);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;SortedDictionary<,>+KeyValuePairComparer;false;KeyValuePairComparer;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;ValueCollection;(System.Collections.Generic.SortedDictionary<,>);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;SortedDictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;SortedList<,>+KeyList;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;SortedList<,>+ValueList;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;SortedList<,>;false;GetKeyAtIndex;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;SortedList<,>;false;GetValueAtIndex;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;SortedList<,>;false;SetValueAtIndex;(System.Int32,TValue);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Generic;SortedList<,>;false;SortedList;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;SortedList<,>;false;TryGetValue;(TKey,TValue);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;SortedList<,>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;SortedList<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Generic;SortedSet<>;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;SortedSet<>;false;IntersectWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;SortedSet<>;false;SortedSet;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;SortedSet<>;false;SortedSet;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;SortedSet<>;false;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;SortedSet<>;false;UnionWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;SortedSet<>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;SortedSet<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Generic;Stack<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Stack<>;false;Push;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Generic;Stack<>;false;Stack;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Generic;Stack<>;false;ToArray;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Stack<>;false;TryPeek;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Stack<>;false;TryPop;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Generic;Stack<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Immutable;ImmutableArray;false;Create<>;(System.Collections.Immutable.ImmutableArray,System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T);;Argument[2];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T,T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T,T);;Argument[2];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T,T);;Argument[3];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;Create<>;(T[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray;false;ToImmutableArray<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>+Builder;false;MoveToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;Add;(T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Immutable.ImmutableArray<>);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Immutable.ImmutableArray<>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;As<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;AsMemory;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;CastArray<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;CastUp<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;Insert;(System.Int32,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;InsertRange;(System.Int32,System.Collections.Immutable.ImmutableArray<>);;Argument[1].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;InsertRange;(System.Int32,System.Collections.Immutable.ImmutableArray<>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;OfType<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;Remove;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;Remove;(T,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;RemoveAt;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Collections.Immutable.ImmutableArray<>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Collections.Immutable.ImmutableArray<>,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;Replace;(T,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;SetItem;(System.Int32,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;Sort;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;Sort;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;Sort;(System.Int32,System.Int32,System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableArray<>;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;Create<,>;(System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;Create<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;Create<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[1].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[2].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;GetValueOrDefault<,>;(System.Collections.Immutable.IImmutableDictionary,TKey,TValue);;Argument[2];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[2];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Immutable.ImmutableDictionary+Builder);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;GetValueOrDefault;(TKey,TValue);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;TryGetKey;(TKey,TKey);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_ValueComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;set_KeyComparer;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;set_ValueComparer;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>;false;Clear;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>;false;Remove;(TKey);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>;false;RemoveRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>;false;SetItem;(TKey,TValue);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>;false;SetItems;(System.Collections.Generic.IEnumerable>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>;false;TryGetKey;(TKey,TKey);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>;false;WithComparers;(System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>;false;WithComparers;(System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>;false;WithComparers;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Immutable;ImmutableDictionary<,>;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableDictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Immutable;ImmutableDictionary<,>;false;get_ValueComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet;false;Create<>;(System.Collections.Generic.IEqualityComparer,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet;false;CreateRange<>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet;false;ToImmutableHashSet<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet;false;ToImmutableHashSet<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet;false;ToImmutableHashSet<>;(System.Collections.Immutable.ImmutableHashSet+Builder);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>+Builder;false;TryGetValue;(T,T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>+Builder;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>+Builder;false;set_KeyComparer;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>;false;Clear;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>;false;Except;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>;false;Intersect;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>;false;Remove;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>;false;TryGetValue;(T,T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>;false;WithComparer;(System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Immutable;ImmutableHashSet<>;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableHashSet<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Immutable;ImmutableInterlocked;false;GetOrAdd<,>;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);;Argument[2];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList;false;Create<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList;false;Remove<>;(System.Collections.Immutable.IImmutableList,T);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList;false;RemoveRange<>;(System.Collections.Immutable.IImmutableList,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList;false;Replace<>;(System.Collections.Immutable.IImmutableList,T,T);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList;false;Replace<>;(System.Collections.Immutable.IImmutableList,T,T);;Argument[2];Argument[0].Element;generated:taint", + "System.Collections.Immutable;ImmutableList;false;Replace<>;(System.Collections.Immutable.IImmutableList,T,T);;Argument[2];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList;false;ToImmutableList<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList;false;ToImmutableList<>;(System.Collections.Immutable.ImmutableList+Builder);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>+Builder;false;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);;Argument[2];Argument[3];generated:taint", + "System.Collections.Immutable;ImmutableList<>+Builder;false;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);;Argument[Qualifier];Argument[3];generated:taint", + "System.Collections.Immutable;ImmutableList<>+Builder;false;BinarySearch;(T,System.Collections.Generic.IComparer);;Argument[0];Argument[1];generated:taint", + "System.Collections.Immutable;ImmutableList<>+Builder;false;BinarySearch;(T,System.Collections.Generic.IComparer);;Argument[Qualifier];Argument[1];generated:taint", + "System.Collections.Immutable;ImmutableList<>+Builder;false;CopyTo;(T[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Collections.Immutable;ImmutableList<>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>+Builder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>+Builder;false;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableList<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);;Argument[2];Argument[3];generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);;Argument[Qualifier];Argument[3];generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;BinarySearch;(T,System.Collections.Generic.IComparer);;Argument[0];Argument[1];generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;BinarySearch;(T,System.Collections.Generic.IComparer);;Argument[Qualifier];Argument[1];generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;CopyTo;(T[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;Remove;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;Remove;(T,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;RemoveAt;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;RemoveRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;RemoveRange;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;RemoveRange;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Immutable;ImmutableList<>;false;RemoveRange;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;Sort;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;Sort;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;Sort;(System.Int32,System.Int32,System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableList<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Immutable;ImmutableQueue;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableQueue;false;Create<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableQueue;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableQueue;false;Dequeue<>;(System.Collections.Immutable.IImmutableQueue,T);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableQueue<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableQueue<>;false;Dequeue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableQueue<>;false;Dequeue;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableQueue<>;false;Enqueue;(T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableQueue<>;false;Enqueue;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableQueue<>;false;Peek;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;Create<,>;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;Create<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;Create<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;CreateBuilder<,>;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;CreateBuilder<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;CreateBuilder<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEnumerable>);;Argument[1].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[2].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[2];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Immutable.ImmutableSortedDictionary+Builder);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;GetValueOrDefault;(TKey,TValue);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;TryGetKey;(TKey,TKey);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;TryGetKey;(TKey,TKey);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_ValueComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;set_KeyComparer;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;set_ValueComparer;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;Clear;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;Remove;(TKey);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;RemoveRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItem;(TKey,TValue);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItem;(TKey,TValue);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItem;(TKey,TValue);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItems;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItems;(System.Collections.Generic.IEnumerable>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;TryGetKey;(TKey,TKey);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;TryGetKey;(TKey,TKey);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;WithComparers;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;WithComparers;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;WithComparers;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_ValueComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(System.Collections.Generic.IComparer,T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(System.Collections.Generic.IComparer,T);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(System.Collections.Generic.IComparer,T[]);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;CreateBuilder<>;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;CreateRange<>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;CreateRange<>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IComparer);;Argument[1];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Immutable.ImmutableSortedSet+Builder);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;IntersectWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;TryGetValue;(T,T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;TryGetValue;(T,T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;UnionWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;get_Max;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;get_Min;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;set_KeyComparer;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;Clear;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;Except;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;Intersect;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;Remove;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;TryGetValue;(T,T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;TryGetValue;(T,T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Immutable;ImmutableSortedSet<>;false;WithComparer;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Immutable;ImmutableSortedSet<>;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;get_Max;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;get_Min;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableSortedSet<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Immutable;ImmutableStack;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableStack;false;Create<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableStack;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableStack;false;Pop<>;(System.Collections.Immutable.IImmutableStack,T);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableStack<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableStack<>;false;Peek;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableStack<>;false;Pop;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableStack<>;false;Pop;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableStack<>;false;Push;(T);;Argument[0];ReturnValue;generated:taint", + "System.Collections.Immutable;ImmutableStack<>;false;Push;(T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.ObjectModel;Collection<>;false;Collection;(System.Collections.Generic.IList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.ObjectModel;Collection<>;false;InsertItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.ObjectModel;Collection<>;false;InsertItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint", + "System.Collections.ObjectModel;Collection<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.ObjectModel;Collection<>;false;SetItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint", + "System.Collections.ObjectModel;Collection<>;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.ObjectModel;Collection<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.ObjectModel;KeyedCollection<,>;false;InsertItem;(System.Int32,TItem);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.ObjectModel;KeyedCollection<,>;false;InsertItem;(System.Int32,TItem);;Argument[Qualifier];Argument[1];generated:taint", + "System.Collections.ObjectModel;KeyedCollection<,>;false;KeyedCollection;(System.Collections.Generic.IEqualityComparer,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.ObjectModel;KeyedCollection<,>;false;SetItem;(System.Int32,TItem);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.ObjectModel;KeyedCollection<,>;false;SetItem;(System.Int32,TItem);;Argument[Qualifier];Argument[1];generated:taint", + "System.Collections.ObjectModel;KeyedCollection<,>;false;TryGetValue;(TKey,TItem);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.ObjectModel;KeyedCollection<,>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.ObjectModel;KeyedCollection<,>;false;get_Dictionary;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.ObjectModel;ObservableCollection<>;false;InsertItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.ObjectModel;ObservableCollection<>;false;InsertItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint", + "System.Collections.ObjectModel;ObservableCollection<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.ObjectModel;ObservableCollection<>;false;SetItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint", + "System.Collections.ObjectModel;ReadOnlyCollection<>;false;ReadOnlyCollection;(System.Collections.Generic.IList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.ObjectModel;ReadOnlyCollection<>;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.ObjectModel;ReadOnlyCollection<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.ObjectModel;ReadOnlyDictionary<,>+KeyCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.ObjectModel;ReadOnlyDictionary<,>+ValueCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_Dictionary;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;HybridDictionary;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;HybridDictionary;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Specialized;ListDictionary;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;ListDictionary;false;ListDictionary;(System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;ListDictionary;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Specialized;NameObjectCollectionBase+KeysCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;BaseAdd;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;BaseAdd;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;BaseGet;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;BaseGet;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;BaseGetAllKeys;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;BaseGetAllValues;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;BaseGetAllValues;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;BaseGetKey;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;BaseSet;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;BaseSet;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Collections.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Int32,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Int32,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[2];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameObjectCollectionBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Specialized;NameObjectCollectionBase;true;get_Keys;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameValueCollection;false;Add;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameValueCollection;false;Get;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameValueCollection;false;Get;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameValueCollection;false;GetKey;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameValueCollection;false;NameValueCollection;(System.Collections.Specialized.NameValueCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameValueCollection;false;NameValueCollection;(System.Int32,System.Collections.Specialized.NameValueCollection);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameValueCollection;false;Set;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NameValueCollection;false;get_AllKeys;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameValueCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameValueCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NameValueCollection;false;set_Item;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Collections.IList,System.Collections.IList,System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Collections.IList,System.Collections.IList,System.Int32);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Collections.IList,System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Collections.IList,System.Int32,System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Int32);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Int32,System.Int32);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Object,System.Int32);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Object,System.Int32);;Argument[2];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;get_NewItems;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;get_OldItems;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;OrderedDictionary;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Collections.Specialized;OrderedDictionary;false;OrderedDictionary;(System.Int32,System.Collections.IEqualityComparer);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;OrderedDictionary;false;OrderedDictionary;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections.Specialized;OrderedDictionary;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections.Specialized;StringCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;StringDictionary;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Collections.Specialized;StringDictionary;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;StringDictionary;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections.Specialized;StringEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;ArrayList;false;Adapter;(System.Collections.IList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections;ArrayList;false;ArrayList;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections;ArrayList;false;CopyTo;(System.Array);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Collections;ArrayList;false;ReadOnly;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections;ArrayList;false;ReadOnly;(System.Collections.IList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections;ArrayList;false;SetRange;(System.Int32,System.Collections.ICollection);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Collections;ArrayList;false;Synchronized;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections;ArrayList;false;Synchronized;(System.Collections.IList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections;ArrayList;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections;BitArray;false;And;(System.Collections.BitArray);;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections;BitArray;false;LeftShift;(System.Int32);;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections;BitArray;false;Not;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections;BitArray;false;Or;(System.Collections.BitArray);;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections;BitArray;false;RightShift;(System.Int32);;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections;BitArray;false;Xor;(System.Collections.BitArray);;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections;BitArray;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections;CollectionBase;false;Remove;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections;CollectionBase;false;Remove;(System.Object);;Argument[Qualifier];Argument[0];generated:taint", + "System.Collections;CollectionBase;false;get_InnerList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;CollectionBase;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;CollectionBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;Comparer;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Collections;DictionaryBase;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;DictionaryBase;false;get_Dictionary;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;DictionaryBase;false;get_InnerHashtable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;DictionaryBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;DictionaryBase;true;OnGet;(System.Object,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.Collections;DictionaryEntry;false;Deconstruct;(System.Object,System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;DictionaryEntry;false;DictionaryEntry;(System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections;DictionaryEntry;false;DictionaryEntry;(System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections;DictionaryEntry;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;DictionaryEntry;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;DictionaryEntry;false;set_Key;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections;DictionaryEntry;false;set_Value;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections;Hashtable;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;Hashtable;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Collections;Hashtable;false;Hashtable;(System.Int32,System.Single,System.Collections.IEqualityComparer);;Argument[2];Argument[Qualifier];generated:taint", + "System.Collections;Hashtable;false;Hashtable;(System.Int32,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[2];Argument[Qualifier];generated:taint", + "System.Collections;Hashtable;false;Hashtable;(System.Int32,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[3];Argument[Qualifier];generated:taint", + "System.Collections;Hashtable;false;Synchronized;(System.Collections.Hashtable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections;Hashtable;false;get_EqualityComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;Hashtable;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections;Hashtable;false;get_comparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;Hashtable;false;get_hcp;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;Hashtable;false;set_comparer;(System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections;Hashtable;false;set_hcp;(System.Collections.IHashCodeProvider);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections;ListDictionaryInternal;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;ListDictionaryInternal;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections;Queue;false;Dequeue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;Queue;false;Enqueue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections;Queue;false;Queue;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections;Queue;false;Synchronized;(System.Collections.Queue);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections;Queue;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections;ReadOnlyCollectionBase;false;get_InnerList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;ReadOnlyCollectionBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;SortedList;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;SortedList;false;GetKey;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;SortedList;false;GetKeyList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;SortedList;false;SetByIndex;(System.Int32,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Collections;SortedList;false;SortedList;(System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections;SortedList;false;Synchronized;(System.Collections.SortedList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections;SortedList;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Collections;Stack;false;Push;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Collections;Stack;false;Stack;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Collections;Stack;false;Synchronized;(System.Collections.Stack);;Argument[0].Element;ReturnValue;generated:taint", + "System.Collections;Stack;false;ToArray;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Collections;Stack;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Hosting;AggregateCatalog;false;GetExports;(System.ComponentModel.Composition.Primitives.ImportDefinition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;AggregateCatalog;false;get_Catalogs;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;AggregateExportProvider;false;AggregateExportProvider;(System.ComponentModel.Composition.Hosting.ExportProvider[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AggregateExportProvider;false;GetExportsCore;(System.ComponentModel.Composition.Primitives.ImportDefinition,System.ComponentModel.Composition.Hosting.AtomicComposition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;AggregateExportProvider;false;get_Providers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ApplicationCatalog;false;ApplicationCatalog;(System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;ApplicationCatalog;false;ApplicationCatalog;(System.Reflection.ReflectionContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;ApplicationCatalog;false;ApplicationCatalog;(System.Reflection.ReflectionContext,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;ApplicationCatalog;false;ApplicationCatalog;(System.Reflection.ReflectionContext,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;ApplicationCatalog;false;GetExports;(System.ComponentModel.Composition.Primitives.ImportDefinition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;AssemblyCatalog;(System.Reflection.Assembly);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;AssemblyCatalog;(System.Reflection.Assembly,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;AssemblyCatalog;(System.Reflection.Assembly,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;AssemblyCatalog;(System.Reflection.Assembly,System.Reflection.ReflectionContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;AssemblyCatalog;(System.Reflection.Assembly,System.Reflection.ReflectionContext);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;AssemblyCatalog;(System.Reflection.Assembly,System.Reflection.ReflectionContext,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;AssemblyCatalog;(System.Reflection.Assembly,System.Reflection.ReflectionContext,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;AssemblyCatalog;(System.Reflection.Assembly,System.Reflection.ReflectionContext,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[2];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;AssemblyCatalog;(System.String,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;AssemblyCatalog;(System.String,System.Reflection.ReflectionContext);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;AssemblyCatalog;(System.String,System.Reflection.ReflectionContext,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;AssemblyCatalog;(System.String,System.Reflection.ReflectionContext,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[2];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;GetExports;(System.ComponentModel.Composition.Primitives.ImportDefinition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;get_Assembly;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;AssemblyCatalog;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;AtomicComposition;false;AtomicComposition;(System.ComponentModel.Composition.Hosting.AtomicComposition);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;AtomicComposition;false;TryGetValue<>;(System.Object,System.Boolean,T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;AtomicComposition;false;TryGetValue<>;(System.Object,T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;CatalogExportProvider;false;CatalogExportProvider;(System.ComponentModel.Composition.Primitives.ComposablePartCatalog,System.ComponentModel.Composition.Hosting.CompositionOptions);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CatalogExportProvider;false;GetExportsCore;(System.ComponentModel.Composition.Primitives.ImportDefinition,System.ComponentModel.Composition.Hosting.AtomicComposition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;CatalogExportProvider;false;get_Catalog;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;CatalogExportProvider;false;get_SourceProvider;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;CatalogExportProvider;false;set_SourceProvider;(System.ComponentModel.Composition.Hosting.ExportProvider);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CatalogExtensions;false;CreateCompositionService;(System.ComponentModel.Composition.Primitives.ComposablePartCatalog);;Argument[0].Element;ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ComposablePartCatalogChangeEventArgs;false;ComposablePartCatalogChangeEventArgs;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.ComponentModel.Composition.Hosting.AtomicComposition);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;ComposablePartCatalogChangeEventArgs;false;ComposablePartCatalogChangeEventArgs;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.ComponentModel.Composition.Hosting.AtomicComposition);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;ComposablePartCatalogChangeEventArgs;false;get_AddedDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ComposablePartCatalogChangeEventArgs;false;get_RemovedDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ComposablePartExportProvider;false;Compose;(System.ComponentModel.Composition.Hosting.CompositionBatch);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;ComposablePartExportProvider;false;get_SourceProvider;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ComposablePartExportProvider;false;set_SourceProvider;(System.ComponentModel.Composition.Hosting.ExportProvider);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionBatch;false;AddExport;(System.ComponentModel.Composition.Primitives.Export);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionBatch;false;AddPart;(System.ComponentModel.Composition.Primitives.ComposablePart);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionBatch;false;CompositionBatch;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionBatch;false;CompositionBatch;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionBatch;false;RemovePart;(System.ComponentModel.Composition.Primitives.ComposablePart);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionBatch;false;get_PartsToAdd;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionBatch;false;get_PartsToRemove;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionContainer;false;CompositionContainer;(System.ComponentModel.Composition.Primitives.ComposablePartCatalog,System.ComponentModel.Composition.Hosting.CompositionOptions,System.ComponentModel.Composition.Hosting.ExportProvider[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionContainer;false;CompositionContainer;(System.ComponentModel.Composition.Primitives.ComposablePartCatalog,System.ComponentModel.Composition.Hosting.CompositionOptions,System.ComponentModel.Composition.Hosting.ExportProvider[]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionContainer;false;GetExportsCore;(System.ComponentModel.Composition.Primitives.ImportDefinition,System.ComponentModel.Composition.Hosting.AtomicComposition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionContainer;false;get_Catalog;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionContainer;false;get_Providers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionScopeDefinition;false;CompositionScopeDefinition;(System.ComponentModel.Composition.Primitives.ComposablePartCatalog,System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionScopeDefinition;false;CompositionScopeDefinition;(System.ComponentModel.Composition.Primitives.ComposablePartCatalog,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionScopeDefinition;false;CompositionScopeDefinition;(System.ComponentModel.Composition.Primitives.ComposablePartCatalog,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionScopeDefinition;false;CompositionScopeDefinition;(System.ComponentModel.Composition.Primitives.ComposablePartCatalog,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionScopeDefinition;false;CompositionScopeDefinition;(System.ComponentModel.Composition.Primitives.ComposablePartCatalog,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionScopeDefinition;false;GetExports;(System.ComponentModel.Composition.Primitives.ImportDefinition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionScopeDefinition;false;get_Children;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;CompositionScopeDefinition;false;get_PublicSurface;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;DirectoryCatalog;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;DirectoryCatalog;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;DirectoryCatalog;(System.String,System.String,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;DirectoryCatalog;(System.String,System.String,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;DirectoryCatalog;(System.String,System.String,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[2];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;DirectoryCatalog;(System.String,System.String,System.Reflection.ReflectionContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;DirectoryCatalog;(System.String,System.String,System.Reflection.ReflectionContext);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;DirectoryCatalog;(System.String,System.String,System.Reflection.ReflectionContext);;Argument[2];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;DirectoryCatalog;(System.String,System.String,System.Reflection.ReflectionContext,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;DirectoryCatalog;(System.String,System.String,System.Reflection.ReflectionContext,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;DirectoryCatalog;(System.String,System.String,System.Reflection.ReflectionContext,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[2];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;DirectoryCatalog;(System.String,System.String,System.Reflection.ReflectionContext,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[3];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;GetExports;(System.ComponentModel.Composition.Primitives.ImportDefinition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;get_FullPath;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;get_LoadedFiles;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;get_Path;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;DirectoryCatalog;false;get_SearchPattern;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ExportProvider;false;GetExport<,>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ExportProvider;false;GetExport<,>;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ExportProvider;false;GetExport<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ExportProvider;false;GetExport<>;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ExportProvider;false;GetExports;(System.ComponentModel.Composition.Primitives.ImportDefinition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ExportProvider;false;GetExports;(System.ComponentModel.Composition.Primitives.ImportDefinition,System.ComponentModel.Composition.Hosting.AtomicComposition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ExportProvider;false;TryGetExports;(System.ComponentModel.Composition.Primitives.ImportDefinition,System.ComponentModel.Composition.Hosting.AtomicComposition,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ExportsChangeEventArgs;false;ExportsChangeEventArgs;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.ComponentModel.Composition.Hosting.AtomicComposition);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;ExportsChangeEventArgs;false;ExportsChangeEventArgs;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.ComponentModel.Composition.Hosting.AtomicComposition);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;ExportsChangeEventArgs;false;get_AddedExports;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ExportsChangeEventArgs;false;get_ChangedContractNames;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ExportsChangeEventArgs;false;get_RemovedExports;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;FilteredCatalog;false;GetExports;(System.ComponentModel.Composition.Primitives.ImportDefinition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;FilteredCatalog;false;get_Complement;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Hosting;ImportEngine;false;ImportEngine;(System.ComponentModel.Composition.Hosting.ExportProvider,System.ComponentModel.Composition.Hosting.CompositionOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;TypeCatalog;false;TypeCatalog;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;TypeCatalog;false;TypeCatalog;(System.Collections.Generic.IEnumerable,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;TypeCatalog;false;TypeCatalog;(System.Collections.Generic.IEnumerable,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Hosting;TypeCatalog;false;TypeCatalog;(System.Collections.Generic.IEnumerable,System.Reflection.ReflectionContext,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[2];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Primitives;ComposablePartCatalog;true;GetExports;(System.ComponentModel.Composition.Primitives.ImportDefinition);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;ComposablePartCatalog;true;get_Parts;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;ComposablePartException;false;ComposablePartException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Primitives;ComposablePartException;false;ComposablePartException;(System.String,System.ComponentModel.Composition.Primitives.ICompositionElement,System.Exception);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Primitives;ComposablePartException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.ComponentModel.Composition.Primitives;ComposablePartException;false;get_Element;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;ContractBasedImportDefinition;false;ContractBasedImportDefinition;(System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.Boolean,System.ComponentModel.Composition.CreationPolicy,System.Collections.Generic.IDictionary);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Primitives;ContractBasedImportDefinition;false;ContractBasedImportDefinition;(System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.Boolean,System.ComponentModel.Composition.CreationPolicy,System.Collections.Generic.IDictionary);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Primitives;ContractBasedImportDefinition;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;ContractBasedImportDefinition;false;get_Constraint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;ContractBasedImportDefinition;false;get_RequiredMetadata;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;ContractBasedImportDefinition;false;get_RequiredTypeIdentity;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;Export;false;get_Definition;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;Export;false;get_Metadata;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;Export;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;ExportDefinition;false;ExportDefinition;(System.String,System.Collections.Generic.IDictionary);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Primitives;ExportDefinition;false;ExportDefinition;(System.String,System.Collections.Generic.IDictionary);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Primitives;ExportDefinition;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;ExportDefinition;false;get_ContractName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;ExportDefinition;false;get_Metadata;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;ExportedDelegate;false;ExportedDelegate;(System.Object,System.Reflection.MethodInfo);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Primitives;ExportedDelegate;false;ExportedDelegate;(System.Object,System.Reflection.MethodInfo);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Primitives;ImportDefinition;false;ImportDefinition;(System.Linq.Expressions.Expression>,System.String,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Primitives;ImportDefinition;false;ImportDefinition;(System.Linq.Expressions.Expression>,System.String,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.Boolean,System.Collections.Generic.IDictionary);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Primitives;ImportDefinition;false;get_Constraint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;ImportDefinition;false;get_ContractName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Primitives;ImportDefinition;false;get_Metadata;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;LazyMemberInfo;false;GetAccessors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;LazyMemberInfo;false;LazyMemberInfo;(System.Reflection.MemberInfo);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.ReflectionModel;LazyMemberInfo;false;LazyMemberInfo;(System.Reflection.MemberTypes,System.Reflection.MemberInfo[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateExportDefinition;(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.String,System.Lazy>,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateExportDefinition;(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.String,System.Lazy>,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateExportDefinition;(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.String,System.Lazy>,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[3];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.Boolean,System.ComponentModel.Composition.CreationPolicy,System.Collections.Generic.IDictionary,System.Boolean,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.Boolean,System.ComponentModel.Composition.CreationPolicy,System.Collections.Generic.IDictionary,System.Boolean,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.Boolean,System.ComponentModel.Composition.CreationPolicy,System.Collections.Generic.IDictionary,System.Boolean,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[3].Element;ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.ComponentModel.Composition.CreationPolicy,System.Collections.Generic.IDictionary,System.Boolean,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.ComponentModel.Composition.CreationPolicy,System.Collections.Generic.IDictionary,System.Boolean,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.ComponentModel.Composition.CreationPolicy,System.Collections.Generic.IDictionary,System.Boolean,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[3].Element;ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.ComponentModel.Composition.CreationPolicy,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.ComponentModel.Composition.CreationPolicy,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.Boolean,System.ComponentModel.Composition.CreationPolicy,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[3].Element;ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.Lazy,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.ComponentModel.Composition.CreationPolicy,System.Collections.Generic.IDictionary,System.Boolean,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.Lazy,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.ComponentModel.Composition.CreationPolicy,System.Collections.Generic.IDictionary,System.Boolean,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.Lazy,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.ComponentModel.Composition.CreationPolicy,System.Collections.Generic.IDictionary,System.Boolean,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[3].Element;ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreateImportDefinition;(System.Lazy,System.String,System.String,System.Collections.Generic.IEnumerable>,System.ComponentModel.Composition.Primitives.ImportCardinality,System.ComponentModel.Composition.CreationPolicy,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreatePartDefinition;(System.Lazy,System.Boolean,System.Lazy>,System.Lazy>,System.Lazy>,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreatePartDefinition;(System.Lazy,System.Boolean,System.Lazy>,System.Lazy>,System.Lazy>,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreatePartDefinition;(System.Lazy,System.Boolean,System.Lazy>,System.Lazy>,System.Lazy>,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[3];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreatePartDefinition;(System.Lazy,System.Boolean,System.Lazy>,System.Lazy>,System.Lazy>,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[4];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;CreatePartDefinition;(System.Lazy,System.Boolean,System.Lazy>,System.Lazy>,System.Lazy>,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[5];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;GetExportFactoryProductImportDefinition;(System.ComponentModel.Composition.Primitives.ImportDefinition);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;GetExportingMember;(System.ComponentModel.Composition.Primitives.ExportDefinition);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;GetImportingMember;(System.ComponentModel.Composition.Primitives.ImportDefinition);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;GetImportingParameter;(System.ComponentModel.Composition.Primitives.ImportDefinition);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;GetPartType;(System.ComponentModel.Composition.Primitives.ComposablePartDefinition);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.ReflectionModel;ReflectionModelServices;false;TryMakeGenericPartDefinition;(System.ComponentModel.Composition.Primitives.ComposablePartDefinition,System.Collections.Generic.IEnumerable,System.ComponentModel.Composition.Primitives.ComposablePartDefinition);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Registration;ExportBuilder;false;AddMetadata;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;ExportBuilder;false;AsContractName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Registration;ExportBuilder;false;AsContractName;(System.String);;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;ExportBuilder;false;AsContractType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Registration;ExportBuilder;false;AsContractType;(System.Type);;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;ExportBuilder;false;AsContractType<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Registration;ExportBuilder;false;Inherited;();;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;ImportBuilder;false;AllowDefault;();;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;ImportBuilder;false;AllowRecomposition;();;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;ImportBuilder;false;AsContractName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Registration;ImportBuilder;false;AsContractName;(System.String);;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;ImportBuilder;false;AsContractType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition.Registration;ImportBuilder;false;AsContractType;(System.Type);;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;ImportBuilder;false;AsContractType<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Registration;ImportBuilder;false;AsMany;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;ImportBuilder;false;RequiredCreationPolicy;(System.ComponentModel.Composition.CreationPolicy);;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;ImportBuilder;false;Source;(System.ComponentModel.Composition.ImportSource);;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;PartBuilder;false;AddMetadata;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;PartBuilder;false;Export;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Registration;PartBuilder;false;Export<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Registration;PartBuilder;false;ExportInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Registration;PartBuilder;false;SetCreationPolicy;(System.ComponentModel.Composition.CreationPolicy);;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;PartBuilder<>;false;ExportProperty;(System.Linq.Expressions.Expression>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Registration;PartBuilder<>;false;ExportProperty<>;(System.Linq.Expressions.Expression>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Registration;PartBuilder<>;false;ImportProperty;(System.Linq.Expressions.Expression>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Registration;PartBuilder<>;false;ImportProperty<>;(System.Linq.Expressions.Expression>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition.Registration;PartBuilder<>;false;SelectConstructor;(System.Linq.Expressions.Expression>);;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Composition.Registration;RegistrationBuilder;false;GetCustomAttributes;(System.Reflection.MemberInfo,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.ComponentModel.Composition.Registration;RegistrationBuilder;false;GetCustomAttributes;(System.Reflection.ParameterInfo,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;AddPart;(System.ComponentModel.Composition.Hosting.CompositionBatch,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;CreatePart;(System.ComponentModel.Composition.Primitives.ComposablePartDefinition,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;CreatePart;(System.ComponentModel.Composition.Primitives.ComposablePartDefinition,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;CreatePart;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;CreatePart;(System.Object,System.Reflection.ReflectionContext);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;CreatePartDefinition;(System.Type,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;CreatePartDefinition;(System.Type,System.ComponentModel.Composition.Primitives.ICompositionElement);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;CreatePartDefinition;(System.Type,System.ComponentModel.Composition.Primitives.ICompositionElement,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;CreatePartDefinition;(System.Type,System.ComponentModel.Composition.Primitives.ICompositionElement,System.Boolean);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;GetContractName;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;GetMetadataView<>;(System.Collections.Generic.IDictionary);;Argument[0].Element;ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;GetTypeIdentity;(System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;GetTypeIdentity;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;SatisfyImportsOnce;(System.ComponentModel.Composition.ICompositionService,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel.Composition;AttributedModelServices;false;SatisfyImportsOnce;(System.ComponentModel.Composition.ICompositionService,System.Object,System.Reflection.ReflectionContext);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel.Composition;CatalogReflectionContextAttribute;false;CatalogReflectionContextAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Composition;ChangeRejectedException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition;CompositionError;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition;CompositionError;false;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition;CompositionError;false;get_Element;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition;CompositionError;false;get_Exception;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition;CompositionException;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition;CompositionException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition;CompositionException;false;get_RootCauses;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition;ExportFactory<,>;false;get_Metadata;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Composition;ExportLifetimeContext<>;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations.Schema;ColumnAttribute;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations.Schema;ColumnAttribute;false;set_TypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations.Schema;TableAttribute;false;get_Schema;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations.Schema;TableAttribute;false;set_Schema;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;AssociatedMetadataTypeTypeDescriptionProvider;false;AssociatedMetadataTypeTypeDescriptionProvider;(System.Type,System.Type);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;CompareAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;CustomValidationAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;CustomValidationAttribute;false;FormatErrorMessage;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;CustomValidationAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;GetAutoGenerateField;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;GetAutoGenerateFilter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;GetOrder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_GroupName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_Prompt;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_ResourceType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_ShortName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_Description;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_GroupName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_Prompt;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_ResourceType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_ShortName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;DisplayFormatAttribute;false;get_NullDisplayText;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;DisplayFormatAttribute;false;get_NullDisplayTextResourceType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;DisplayFormatAttribute;false;set_NullDisplayText;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;DisplayFormatAttribute;false;set_NullDisplayTextResourceType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;FileExtensionsAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;FileExtensionsAttribute;false;FormatErrorMessage;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;FileExtensionsAttribute;false;get_Extensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;FileExtensionsAttribute;false;set_Extensions;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;FilterUIHintAttribute;false;get_ControlParameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;MaxLengthAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;MetadataTypeAttribute;false;MetadataTypeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;MetadataTypeAttribute;false;get_MetadataClassType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;MinLengthAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;RangeAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;RegularExpressionAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;StringLengthAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;UIHintAttribute;false;get_ControlParameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;ValidationAttribute;false;get_ErrorMessage;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;ValidationAttribute;false;get_ErrorMessageResourceName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;ValidationAttribute;false;get_ErrorMessageResourceType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;ValidationAttribute;false;set_ErrorMessage;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;ValidationAttribute;false;set_ErrorMessageResourceName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;ValidationAttribute;false;set_ErrorMessageResourceType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;ValidationAttribute;true;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;ValidationContext;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;ValidationContext;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.DataAnnotations;ValidationContext;false;set_DisplayName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;ValidationException;false;ValidationException;(System.ComponentModel.DataAnnotations.ValidationResult,System.ComponentModel.DataAnnotations.ValidationAttribute,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.DataAnnotations;ValidationException;false;get_ValidationResult;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design.Serialization;ContextStack;false;Append;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Design.Serialization;ContextStack;false;Pop;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design.Serialization;ContextStack;false;Push;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Design.Serialization;ContextStack;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design.Serialization;ContextStack;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design.Serialization;ContextStack;false;get_Item;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design.Serialization;DesignerSerializerAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design.Serialization;RootDesignerSerializerAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design;DesignerCollection;false;DesignerCollection;(System.Collections.IList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Design;DesignerCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel.Design;DesignerOptionService;false;CreateOptionCollection;(System.ComponentModel.Design.DesignerOptionService+DesignerOptionCollection,System.String,System.Object);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel.Design;DesignerOptionService;false;CreateOptionCollection;(System.ComponentModel.Design.DesignerOptionService+DesignerOptionCollection,System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design;DesignerOptionService;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design;DesignerVerb;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design;DesignerVerb;false;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design;DesignerVerb;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design;DesignerVerb;false;set_Description;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Design;DesignerVerbCollection;false;DesignerVerbCollection;(System.ComponentModel.Design.DesignerVerb[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel.Design;DesignerVerbCollection;false;Remove;(System.ComponentModel.Design.DesignerVerb);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel.Design;MenuCommand;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design;ServiceContainer;false;GetService;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel.Design;ServiceContainer;false;ServiceContainer;(System.IServiceProvider);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;ArrayConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;AsyncOperation;false;get_SynchronizationContext;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;AttributeCollection;false;AttributeCollection;(System.Attribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel;AttributeCollection;false;FromExisting;(System.ComponentModel.AttributeCollection,System.Attribute[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.ComponentModel;AttributeCollection;false;FromExisting;(System.ComponentModel.AttributeCollection,System.Attribute[]);;Argument[1].Element;ReturnValue;generated:taint", + "System.ComponentModel;AttributeCollection;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;AttributeCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;AttributeCollection;false;get_Item;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;AttributeCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel;BaseNumberConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;BaseNumberConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;BindingList<>;false;InsertItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel;BindingList<>;false;InsertItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint", + "System.ComponentModel;BindingList<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel;BindingList<>;false;SetItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint", + "System.ComponentModel;CategoryAttribute;false;CategoryAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;CategoryAttribute;false;get_Category;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;CharConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;CollectionConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;Component;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;Component;false;get_Events;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;Component;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;Component;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;ComponentCollection;false;ComponentCollection;(System.ComponentModel.IComponent[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel;ComponentCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;ComponentCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;ComponentResourceManager;false;ApplyResources;(System.Object,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.ComponentModel;ComponentResourceManager;false;ApplyResources;(System.Object,System.String,System.Globalization.CultureInfo);;Argument[Qualifier];Argument[0];generated:taint", + "System.ComponentModel;Container;false;Add;(System.ComponentModel.IComponent,System.String);;Argument[1];Argument[0];generated:taint", + "System.ComponentModel;Container;false;CreateSite;(System.ComponentModel.IComponent,System.String);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;Container;false;GetService;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;Container;false;get_Components;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;ContainerFilterService;true;FilterComponents;(System.ComponentModel.ComponentCollection);;Argument[0].Element;ReturnValue;generated:taint", + "System.ComponentModel;CultureInfoConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;CultureInfoConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;CultureInfoConverter;false;GetStandardValues;(System.ComponentModel.ITypeDescriptorContext);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;CustomTypeDescriptor;false;CustomTypeDescriptor;(System.ComponentModel.ICustomTypeDescriptor);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;CustomTypeDescriptor;true;GetAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;CustomTypeDescriptor;true;GetProperties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;CustomTypeDescriptor;true;GetProperties;(System.Attribute[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;CustomTypeDescriptor;true;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;DateTimeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;DateTimeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;DateTimeOffsetConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;DateTimeOffsetConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;DecimalConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;DefaultValueAttribute;false;DefaultValueAttribute;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;DefaultValueAttribute;false;DefaultValueAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;DefaultValueAttribute;false;DefaultValueAttribute;(System.Type,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel;DefaultValueAttribute;false;SetValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;DefaultValueAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;DesignerAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;EditorAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;EnumConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;EventDescriptorCollection;false;EventDescriptorCollection;(System.ComponentModel.EventDescriptor[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel;EventDescriptorCollection;false;Sort;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;EventDescriptorCollection;false;Sort;(System.Collections.IComparer);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;EventDescriptorCollection;false;Sort;(System.Collections.IComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;EventDescriptorCollection;false;Sort;(System.String[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;EventDescriptorCollection;false;Sort;(System.String[],System.Collections.IComparer);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;EventDescriptorCollection;false;Sort;(System.String[],System.Collections.IComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;EventHandlerList;false;AddHandler;(System.Object,System.Delegate);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;EventHandlerList;false;AddHandler;(System.Object,System.Delegate);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel;EventHandlerList;false;AddHandlers;(System.ComponentModel.EventHandlerList);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;EventHandlerList;false;get_Item;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;EventHandlerList;false;set_Item;(System.Object,System.Delegate);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;EventHandlerList;false;set_Item;(System.Object,System.Delegate);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel;GuidConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;InstallerTypeAttribute;false;InstallerTypeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;InstallerTypeAttribute;false;InstallerTypeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;LicFileLicenseProvider;false;GetKey;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;LicFileLicenseProvider;false;GetLicense;(System.ComponentModel.LicenseContext,System.Type,System.Object,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;LicenseException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.ComponentModel;LicenseException;false;LicenseException;(System.Type,System.Object,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel;LicenseException;false;LicenseException;(System.Type,System.Object,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel;LicenseProviderAttribute;false;LicenseProviderAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;LicenseProviderAttribute;false;LicenseProviderAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;LicenseProviderAttribute;false;get_LicenseProvider;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;LicenseProviderAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;ListSortDescriptionCollection;false;ListSortDescriptionCollection;(System.ComponentModel.ListSortDescription[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel;ListSortDescriptionCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel;MarshalByValueComponent;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MarshalByValueComponent;false;get_Events;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MarshalByValueComponent;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MarshalByValueComponent;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;MaskedTextProvider;false;ToDisplayString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MaskedTextProvider;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean,System.Boolean,System.Boolean,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean,System.Boolean,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MaskedTextProvider;false;ToString;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;false;FindMethod;(System.Type,System.String,System.Type[],System.Type);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;false;FindMethod;(System.Type,System.String,System.Type[],System.Type,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;false;GetInvokee;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;false;GetSite;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.ComponentModel.MemberDescriptor);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.ComponentModel.MemberDescriptor,System.Attribute[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.ComponentModel.MemberDescriptor,System.Attribute[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.String,System.Attribute[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.String,System.Attribute[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel;MemberDescriptor;true;CreateAttributeCollection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;true;FillAttributes;(System.Collections.IList);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.ComponentModel;MemberDescriptor;true;GetInvocationTarget;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;true;get_AttributeArray;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;true;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;true;get_Category;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;true;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;true;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;MemberDescriptor;true;set_AttributeArray;(System.Attribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel;MultilineStringConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;NestedContainer;false;CreateSite;(System.ComponentModel.IComponent,System.String);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;NestedContainer;false;GetService;(System.Type);;Argument[Qualifier];ReturnValue;generated:value", + "System.ComponentModel;NullableConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;NullableConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;NullableConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;NullableConverter;false;GetProperties;(System.ComponentModel.ITypeDescriptorContext,System.Object,System.Attribute[]);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;ProgressChangedEventArgs;false;ProgressChangedEventArgs;(System.Int32,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.ComponentModel;ProgressChangedEventArgs;false;get_UserState;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;PropertyDescriptor;false;FillAttributes;(System.Collections.IList);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.ComponentModel;PropertyDescriptor;false;GetInvocationTarget;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;PropertyDescriptor;false;GetValueChangedHandler;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;PropertyDescriptor;true;GetEditor;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;PropertyDescriptor;true;GetEditor;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;PropertyDescriptor;true;get_Converter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;PropertyDescriptorCollection;false;Sort;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.Collections.IComparer);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.Collections.IComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.String[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.String[],System.Collections.IComparer);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.String[],System.Collections.IComparer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;PropertyTabAttribute;false;PropertyTabAttribute;(System.String,System.ComponentModel.PropertyTabScope);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;PropertyTabAttribute;false;PropertyTabAttribute;(System.Type,System.ComponentModel.PropertyTabScope);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;PropertyTabAttribute;false;get_TabClasses;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;ReferenceConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;ReferenceConverter;false;ReferenceConverter;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;RunWorkerCompletedEventArgs;false;RunWorkerCompletedEventArgs;(System.Object,System.Exception,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;RunWorkerCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;StringConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;TimeSpanConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;ToolboxItemAttribute;false;ToolboxItemAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;ToolboxItemAttribute;false;ToolboxItemAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;ToolboxItemAttribute;false;get_ToolboxItemType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;ToolboxItemAttribute;false;get_ToolboxItemTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;ToolboxItemFilterAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter+StandardValuesCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.ComponentModel;TypeConverter+StandardValuesCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter+StandardValuesCollection;false;StandardValuesCollection;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel;TypeConverter+StandardValuesCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertFrom;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertFrom;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertFromInvariantString;(System.ComponentModel.ITypeDescriptorContext,System.String);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertFromInvariantString;(System.ComponentModel.ITypeDescriptorContext,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertFromInvariantString;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertFromInvariantString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertFromString;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.String);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertFromString;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertFromString;(System.ComponentModel.ITypeDescriptorContext,System.String);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertFromString;(System.ComponentModel.ITypeDescriptorContext,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertFromString;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertFromString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertTo;(System.Object,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertToInvariantString;(System.ComponentModel.ITypeDescriptorContext,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertToInvariantString;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertToString;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertToString;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertToString;(System.ComponentModel.ITypeDescriptorContext,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;ConvertToString;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;GetProperties;(System.ComponentModel.ITypeDescriptorContext,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;GetProperties;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;GetStandardValues;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeConverter;false;SortProperties;(System.ComponentModel.PropertyDescriptorCollection,System.String[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;false;GetReflectionType;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;false;GetTypeDescriptor;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;false;GetTypeDescriptor;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;false;GetTypeDescriptor;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;false;GetTypeDescriptor;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;false;TypeDescriptionProvider;(System.ComponentModel.TypeDescriptionProvider);;Argument[0];Argument[Qualifier];generated:taint", + "System.ComponentModel;TypeDescriptionProvider;true;GetExtendedTypeDescriptor;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;true;GetExtendedTypeDescriptor;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;true;GetFullComponentName;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;true;GetReflectionType;(System.Type,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;true;GetRuntimeType;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;true;GetTypeDescriptor;(System.Type,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;true;GetTypeDescriptor;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptionProvider;true;GetTypeDescriptor;(System.Type,System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;AddAttributes;(System.Object,System.Attribute[]);;Argument[1].Element;ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;AddAttributes;(System.Type,System.Attribute[]);;Argument[1].Element;ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;CreateEvent;(System.Type,System.ComponentModel.EventDescriptor,System.Attribute[]);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;CreateEvent;(System.Type,System.ComponentModel.EventDescriptor,System.Attribute[]);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;CreateEvent;(System.Type,System.String,System.Type,System.Attribute[]);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;CreateEvent;(System.Type,System.String,System.Type,System.Attribute[]);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;CreateProperty;(System.Type,System.ComponentModel.PropertyDescriptor,System.Attribute[]);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;CreateProperty;(System.Type,System.ComponentModel.PropertyDescriptor,System.Attribute[]);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;CreateProperty;(System.Type,System.String,System.Type,System.Attribute[]);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;CreateProperty;(System.Type,System.String,System.Type,System.Attribute[]);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;GetAssociation;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;GetFullComponentName;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;GetProvider;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeDescriptor;false;GetReflectionType;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.ComponentModel;TypeListConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeListConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;TypeListConverter;false;GetStandardValues;(System.ComponentModel.ITypeDescriptorContext);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ComponentModel;TypeListConverter;false;TypeListConverter;(System.Type[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ComponentModel;VersionConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.ComponentModel;WarningException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.ComponentModel;Win32Exception;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.ComponentModel;Win32Exception;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Convention;ExportConventionBuilder;false;AddMetadata;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Convention;ExportConventionBuilder;false;AsContractName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Composition.Convention;ExportConventionBuilder;false;AsContractName;(System.String);;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Convention;ExportConventionBuilder;false;AsContractType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Composition.Convention;ExportConventionBuilder;false;AsContractType;(System.Type);;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Convention;ExportConventionBuilder;false;AsContractType<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Convention;ImportConventionBuilder;false;AddMetadataConstraint;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Convention;ImportConventionBuilder;false;AllowDefault;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Convention;ImportConventionBuilder;false;AsContractName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Composition.Convention;ImportConventionBuilder;false;AsContractName;(System.String);;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Convention;ImportConventionBuilder;false;AsMany;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Convention;ImportConventionBuilder;false;AsMany;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Convention;PartConventionBuilder;false;AddPartMetadata;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Convention;PartConventionBuilder;false;Export;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Convention;PartConventionBuilder;false;Export<>;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Convention;PartConventionBuilder;false;ExportInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Convention;PartConventionBuilder;false;Shared;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Convention;PartConventionBuilder;false;Shared;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Composition.Convention;PartConventionBuilder;false;Shared;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Composition.Convention;PartConventionBuilder;false;Shared;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Convention;PartConventionBuilder<>;false;ExportProperty;(System.Linq.Expressions.Expression>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Convention;PartConventionBuilder<>;false;ExportProperty<>;(System.Linq.Expressions.Expression>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Convention;PartConventionBuilder<>;false;ImportProperty;(System.Linq.Expressions.Expression>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Convention;PartConventionBuilder<>;false;ImportProperty<>;(System.Linq.Expressions.Expression>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Convention;PartConventionBuilder<>;false;NotifyImportsSatisfied;(System.Linq.Expressions.Expression>);;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Convention;PartConventionBuilder<>;false;SelectConstructor;(System.Linq.Expressions.Expression>);;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Hosting.Core;CompositionContract;false;ChangeType;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionContract;false;ChangeType;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionContract;false;CompositionContract;(System.Type,System.String,System.Collections.Generic.IDictionary);;Argument[0];Argument[Qualifier];generated:taint", + "System.Composition.Hosting.Core;CompositionContract;false;CompositionContract;(System.Type,System.String,System.Collections.Generic.IDictionary);;Argument[1];Argument[Qualifier];generated:taint", + "System.Composition.Hosting.Core;CompositionContract;false;CompositionContract;(System.Type,System.String,System.Collections.Generic.IDictionary);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Composition.Hosting.Core;CompositionContract;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionContract;false;TryUnwrapMetadataConstraint<>;(System.String,T,System.Composition.Hosting.Core.CompositionContract);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionContract;false;get_ContractName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionContract;false;get_ContractType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionContract;false;get_MetadataConstraints;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionDependency;false;Missing;(System.Composition.Hosting.Core.CompositionContract,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionDependency;false;Missing;(System.Composition.Hosting.Core.CompositionContract,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionDependency;false;Oversupplied;(System.Composition.Hosting.Core.CompositionContract,System.Collections.Generic.IEnumerable,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionDependency;false;Oversupplied;(System.Composition.Hosting.Core.CompositionContract,System.Collections.Generic.IEnumerable,System.Object);;Argument[1].Element;ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionDependency;false;Oversupplied;(System.Composition.Hosting.Core.CompositionContract,System.Collections.Generic.IEnumerable,System.Object);;Argument[2];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionDependency;false;Satisfied;(System.Composition.Hosting.Core.CompositionContract,System.Composition.Hosting.Core.ExportDescriptorPromise,System.Boolean,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionDependency;false;Satisfied;(System.Composition.Hosting.Core.CompositionContract,System.Composition.Hosting.Core.ExportDescriptorPromise,System.Boolean,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionDependency;false;Satisfied;(System.Composition.Hosting.Core.CompositionContract,System.Composition.Hosting.Core.ExportDescriptorPromise,System.Boolean,System.Object);;Argument[3];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionDependency;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionDependency;false;get_Contract;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionDependency;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;CompositionDependency;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;DependencyAccessor;false;ResolveDependencies;(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;DependencyAccessor;false;ResolveDependencies;(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean);;Argument[1];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;DependencyAccessor;false;ResolveRequiredDependency;(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;DependencyAccessor;false;ResolveRequiredDependency;(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean);;Argument[1];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;DependencyAccessor;false;TryResolveOptionalDependency;(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean,System.Composition.Hosting.Core.CompositionDependency);;Argument[0];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;DependencyAccessor;false;TryResolveOptionalDependency;(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean,System.Composition.Hosting.Core.CompositionDependency);;Argument[1];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;ExportDescriptorPromise;false;GetDescriptor;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;ExportDescriptorPromise;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;ExportDescriptorPromise;false;get_Contract;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;ExportDescriptorPromise;false;get_Dependencies;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;ExportDescriptorPromise;false;get_Origin;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;LifetimeContext;false;AddBoundInstance;(System.IDisposable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Composition.Hosting.Core;LifetimeContext;false;FindContextWithin;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting.Core;LifetimeContext;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithAssemblies;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithAssemblies;(System.Collections.Generic.IEnumerable,System.Composition.Convention.AttributedModelProvider);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithAssembly;(System.Reflection.Assembly);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithAssembly;(System.Reflection.Assembly,System.Composition.Convention.AttributedModelProvider);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithDefaultConventions;(System.Composition.Convention.AttributedModelProvider);;Argument[0];Argument[Qualifier];generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithDefaultConventions;(System.Composition.Convention.AttributedModelProvider);;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Hosting;ContainerConfiguration;false;WithPart;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithPart;(System.Type,System.Composition.Convention.AttributedModelProvider);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithPart<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithPart<>;(System.Composition.Convention.AttributedModelProvider);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithParts;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithParts;(System.Collections.Generic.IEnumerable,System.Composition.Convention.AttributedModelProvider);;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition.Hosting;ContainerConfiguration;false;WithParts;(System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithProvider;(System.Composition.Hosting.Core.ExportDescriptorProvider);;Argument[0];Argument[Qualifier];generated:taint", + "System.Composition.Hosting;ContainerConfiguration;false;WithProvider;(System.Composition.Hosting.Core.ExportDescriptorProvider);;Argument[Qualifier];ReturnValue;generated:value", + "System.Composition;SharingBoundaryAttribute;false;SharingBoundaryAttribute;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Composition;SharingBoundaryAttribute;false;get_SharingBoundaryNames;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration.Internal;DelegatingConfigHost;false;GetConfigTypeName;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Configuration.Internal;DelegatingConfigHost;false;GetStreamNameForConfigSource;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Configuration.Internal;DelegatingConfigHost;false;GetStreamNameForConfigSource;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Configuration.Internal;DelegatingConfigHost;false;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);;Argument[4].Element;ReturnValue;generated:taint", + "System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForWrite;(System.String,System.String,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForWrite;(System.String,System.String,System.Object);;Argument[2];ReturnValue;generated:taint", + "System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);;Argument[1];ReturnValue;generated:taint", + "System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);;Argument[2];ReturnValue;generated:taint", + "System.Configuration.Provider;ProviderBase;true;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration.Provider;ProviderBase;true;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Configuration.Provider;ProviderBase;true;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration.Provider;ProviderBase;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration.Provider;ProviderCollection;false;CopyTo;(System.Configuration.Provider.ProviderBase[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Configuration.Provider;ProviderCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration.Provider;ProviderCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Configuration;AppSettingsReader;false;GetValue;(System.String,System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;AppSettingsSection;false;DeserializeElement;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;AppSettingsSection;false;GetRuntimeObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;AppSettingsSection;false;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;AppSettingsSection;false;get_File;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;AppSettingsSection;false;get_Settings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ApplicationSettingsBase;false;ApplicationSettingsBase;(System.ComponentModel.IComponent,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ApplicationSettingsBase;false;ApplicationSettingsBase;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ApplicationSettingsBase;false;get_Context;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ApplicationSettingsBase;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ApplicationSettingsBase;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ApplicationSettingsBase;false;get_PropertyValues;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ApplicationSettingsBase;false;get_Providers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ApplicationSettingsBase;false;get_SettingsKey;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ApplicationSettingsBase;false;set_SettingsKey;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;CallbackValidatorAttribute;false;get_CallbackMethodName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;CallbackValidatorAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;CallbackValidatorAttribute;false;get_ValidatorInstance;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;CallbackValidatorAttribute;false;set_CallbackMethodName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;CallbackValidatorAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ClientSettingsSection;false;get_Settings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;CommaDelimitedStringCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;CommaDelimitedStringCollection;false;AddRange;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Configuration;CommaDelimitedStringCollection;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;CommaDelimitedStringCollection;false;Insert;(System.Int32,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Configuration;CommaDelimitedStringCollection;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;CommaDelimitedStringCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;CommaDelimitedStringCollection;false;set_Item;(System.Int32,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Configuration;CommaDelimitedStringCollectionConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint", + "System.Configuration;CommaDelimitedStringCollectionConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Configuration;ConfigXmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigXmlDocument;false;CreateCDataSection;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigXmlDocument;false;CreateComment;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigXmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigXmlDocument;false;CreateSignificantWhitespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigXmlDocument;false;CreateTextNode;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigXmlDocument;false;CreateWhitespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigXmlDocument;false;Load;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigXmlDocument;false;LoadSingleElement;(System.String,System.Xml.XmlTextReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigXmlDocument;false;get_Filename;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;Configuration;false;GetSectionGroup;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;Configuration;false;get_AssemblyStringTransformer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;Configuration;false;get_EvaluationContext;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;Configuration;false;get_Locations;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;Configuration;false;get_RootSectionGroup;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;Configuration;false;get_SectionGroups;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;Configuration;false;get_Sections;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;Configuration;false;get_TypeStringTransformer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationCollectionAttribute;false;get_AddItemName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationCollectionAttribute;false;get_ClearItemsName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationCollectionAttribute;false;get_RemoveItemName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationCollectionAttribute;false;set_AddItemName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationCollectionAttribute;false;set_ClearItemsName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationCollectionAttribute;false;set_RemoveItemName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationElement;false;get_ElementInformation;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElement;false;get_EvaluationContext;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElement;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElement;false;get_LockAllAttributesExcept;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElement;false;get_LockAllElementsExcept;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElement;false;get_LockAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElement;false;get_LockElements;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElement;true;DeserializeElement;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationElement;true;GetTransformedAssemblyString;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElement;true;GetTransformedTypeString;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElement;true;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationElement;true;SerializeElement;(System.Xml.XmlWriter,System.Boolean);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;ConfigurationElement;true;SerializeToXmlElement;(System.Xml.XmlWriter,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;ConfigurationElement;true;Unmerge;(System.Configuration.ConfigurationElement,System.Configuration.ConfigurationElement,System.Configuration.ConfigurationSaveMode);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationElement;true;get_ElementProperty;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElementCollection;false;BaseAdd;(System.Configuration.ConfigurationElement,System.Boolean);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;ConfigurationElementCollection;false;ConfigurationElementCollection;(System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationElementCollection;false;CopyTo;(System.Configuration.ConfigurationElement[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Configuration;ConfigurationElementCollection;false;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationElementCollection;false;SerializeElement;(System.Xml.XmlWriter,System.Boolean);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;ConfigurationElementCollection;false;Unmerge;(System.Configuration.ConfigurationElement,System.Configuration.ConfigurationElement,System.Configuration.ConfigurationSaveMode);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationElementCollection;false;get_AddElementName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElementCollection;false;get_ClearElementName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElementCollection;false;get_RemoveElementName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationElementCollection;false;set_AddElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationElementCollection;false;set_ClearElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationElementCollection;false;set_RemoveElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationElementCollection;true;BaseAdd;(System.Configuration.ConfigurationElement);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;ConfigurationElementCollection;true;BaseAdd;(System.Int32,System.Configuration.ConfigurationElement);;Argument[Qualifier];Argument[1];generated:taint", + "System.Configuration;ConfigurationErrorsException;false;ConfigurationErrorsException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationErrorsException;false;ConfigurationErrorsException;(System.String,System.Exception,System.String,System.Int32);;Argument[2];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationErrorsException;false;GetFilename;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Configuration;ConfigurationErrorsException;false;GetFilename;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;ConfigurationErrorsException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;ConfigurationErrorsException;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationErrorsException;false;get_Filename;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationErrorsException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationException;false;ConfigurationException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationException;false;ConfigurationException;(System.String,System.Exception,System.String,System.Int32);;Argument[2];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;ConfigurationException;false;GetXmlNodeFilename;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Configuration;ConfigurationException;false;get_BareMessage;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationException;false;get_Filename;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationFileMap;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationLocation;false;OpenConfiguration;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationLocationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationLockCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationLockCollection;false;CopyTo;(System.String[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Configuration;ConfigurationLockCollection;false;SetFromList;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationLockCollection;false;get_AttributeList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationLockCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Configuration;ConfigurationManager;false;OpenExeConfiguration;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;ConfigurationManager;false;OpenMappedExeConfiguration;(System.Configuration.ExeConfigurationFileMap,System.Configuration.ConfigurationUserLevel);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;ConfigurationManager;false;OpenMappedExeConfiguration;(System.Configuration.ExeConfigurationFileMap,System.Configuration.ConfigurationUserLevel,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;ConfigurationManager;false;OpenMappedMachineConfiguration;(System.Configuration.ConfigurationFileMap);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;ConfigurationProperty;false;ConfigurationProperty;(System.String,System.Type,System.Object,System.ComponentModel.TypeConverter,System.Configuration.ConfigurationValidatorBase,System.Configuration.ConfigurationPropertyOptions,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationProperty;false;get_Converter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationPropertyCollection;false;Add;(System.Configuration.ConfigurationProperty);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationPropertyCollection;false;CopyTo;(System.Configuration.ConfigurationProperty[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Configuration;ConfigurationPropertyCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationPropertyCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationSection;true;DeserializeSection;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationSection;true;GetRuntimeObject;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Configuration;ConfigurationSectionCollection;false;Add;(System.String,System.Configuration.ConfigurationSection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationSectionCollection;false;GetKey;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationSectionGroup;false;get_SectionGroups;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationSectionGroup;false;get_Sections;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationSectionGroup;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationSectionGroup;false;set_Type;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationSectionGroupCollection;false;Add;(System.String,System.Configuration.ConfigurationSectionGroup);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ConfigurationSectionGroupCollection;false;Add;(System.String,System.Configuration.ConfigurationSectionGroup);;Argument[Qualifier];Argument[1];generated:taint", + "System.Configuration;ConfigurationSectionGroupCollection;false;CopyTo;(System.Configuration.ConfigurationSectionGroup[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Configuration;ConfigurationSectionGroupCollection;false;Get;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationSectionGroupCollection;false;Get;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationSectionGroupCollection;false;GetKey;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationSectionGroupCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConfigurationSectionGroupCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConnectionStringSettings;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConnectionStringSettings;false;get_ConnectionString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConnectionStringSettings;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConnectionStringSettings;false;get_ProviderName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ConnectionStringSettingsCollection;false;Add;(System.Configuration.ConnectionStringSettings);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;ConnectionStringSettingsCollection;false;BaseAdd;(System.Int32,System.Configuration.ConfigurationElement);;Argument[Qualifier];Argument[1];generated:taint", + "System.Configuration;ConnectionStringSettingsCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;ConnectionStringSettingsCollection;false;set_Item;(System.Int32,System.Configuration.ConnectionStringSettings);;Argument[Qualifier];Argument[1];generated:taint", + "System.Configuration;ConnectionStringsSection;false;GetRuntimeObject;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Configuration;ConnectionStringsSection;false;get_ConnectionStrings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ContextInformation;false;get_HostingContext;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;DefaultSection;false;DeserializeSection;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;DefaultSection;false;SerializeSection;(System.Configuration.ConfigurationElement,System.String,System.Configuration.ConfigurationSaveMode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;DefaultSettingValueAttribute;false;DefaultSettingValueAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;DefaultSettingValueAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;DpapiProtectedConfigurationProvider;false;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;DpapiProtectedConfigurationProvider;false;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Configuration;ElementInformation;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ElementInformation;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;GenericEnumConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Configuration;GenericEnumConverter;false;GenericEnumConverter;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;IdnElement;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;IgnoreSection;false;DeserializeSection;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;IgnoreSection;false;SerializeSection;(System.Configuration.ConfigurationElement,System.String,System.Configuration.ConfigurationSaveMode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;InfiniteTimeSpanConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint", + "System.Configuration;InfiniteTimeSpanConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Configuration;IriParsingElement;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;KeyValueConfigurationCollection;false;Add;(System.Configuration.KeyValueConfigurationElement);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;KeyValueConfigurationCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;KeyValueConfigurationElement;false;KeyValueConfigurationElement;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;KeyValueConfigurationElement;false;KeyValueConfigurationElement;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Configuration;KeyValueConfigurationElement;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;KeyValueConfigurationElement;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;LocalFileSettingsProvider;false;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;LocalFileSettingsProvider;false;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Configuration;LocalFileSettingsProvider;false;get_ApplicationName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;LocalFileSettingsProvider;false;set_ApplicationName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;NameValueConfigurationCollection;false;Add;(System.Configuration.NameValueConfigurationElement);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;NameValueConfigurationCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;NameValueConfigurationCollection;false;set_Item;(System.String,System.Configuration.NameValueConfigurationElement);;Argument[Qualifier];Argument[1];generated:taint", + "System.Configuration;NameValueConfigurationElement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;NameValueConfigurationElement;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;NameValueFileSectionHandler;false;Create;(System.Object,System.Object,System.Xml.XmlNode);;Argument[2].Element;ReturnValue;generated:taint", + "System.Configuration;NameValueSectionHandler;false;Create;(System.Object,System.Object,System.Xml.XmlNode);;Argument[2].Element;ReturnValue;generated:taint", + "System.Configuration;PropertyInformation;false;get_Converter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;PropertyInformation;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;PropertyInformationCollection;false;CopyTo;(System.Configuration.PropertyInformation[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Configuration;PropertyInformationCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ProtectedConfigurationProviderCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ProtectedConfigurationSection;false;get_DefaultProvider;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ProtectedConfigurationSection;false;get_Providers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ProtectedProviderSettings;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ProtectedProviderSettings;false;get_Providers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ProviderSettings;false;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ProviderSettings;false;Unmerge;(System.Configuration.ConfigurationElement,System.Configuration.ConfigurationElement,System.Configuration.ConfigurationSaveMode);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;ProviderSettings;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ProviderSettings;false;get_Parameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ProviderSettings;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ProviderSettings;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;ProviderSettingsCollection;false;Add;(System.Configuration.ProviderSettings);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;ProviderSettingsCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;ProviderSettingsCollection;false;set_Item;(System.Int32,System.Configuration.ProviderSettings);;Argument[Qualifier];Argument[1];generated:taint", + "System.Configuration;RegexStringValidator;false;RegexStringValidator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SchemeSettingElement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SchemeSettingElementCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;SectionInformation;false;get_ConfigSource;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SectionInformation;false;get_ProtectionProvider;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SectionInformation;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SectionInformation;false;set_ConfigSource;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SectionInformation;false;set_Type;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingChangingEventArgs;false;SettingChangingEventArgs;(System.String,System.String,System.String,System.Object,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingChangingEventArgs;false;SettingChangingEventArgs;(System.String,System.String,System.String,System.Object,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.Configuration;SettingChangingEventArgs;false;SettingChangingEventArgs;(System.String,System.String,System.String,System.Object,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint", + "System.Configuration;SettingChangingEventArgs;false;SettingChangingEventArgs;(System.String,System.String,System.String,System.Object,System.Boolean);;Argument[3];Argument[Qualifier];generated:taint", + "System.Configuration;SettingChangingEventArgs;false;get_NewValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingChangingEventArgs;false;get_SettingClass;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingChangingEventArgs;false;get_SettingKey;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingChangingEventArgs;false;get_SettingName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingElement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingElement;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingElementCollection;false;Add;(System.Configuration.SettingElement);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;SettingElementCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;SettingValueElement;false;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingValueElement;false;SerializeToXmlElement;(System.Xml.XmlWriter,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.Configuration;SettingValueElement;false;Unmerge;(System.Configuration.ConfigurationElement,System.Configuration.ConfigurationElement,System.Configuration.ConfigurationSaveMode);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingValueElement;false;get_ValueXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingValueElement;false;set_ValueXml;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Configuration;SettingsBase;false;Initialize;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection,System.Configuration.SettingsProviderCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Configuration;SettingsBase;false;Initialize;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection,System.Configuration.SettingsProviderCollection);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Configuration;SettingsBase;false;Initialize;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection,System.Configuration.SettingsProviderCollection);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Configuration;SettingsBase;false;Synchronized;(System.Configuration.SettingsBase);;Argument[0];ReturnValue;generated:taint", + "System.Configuration;SettingsBase;true;get_Context;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsBase;true;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsBase;true;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsBase;true;get_PropertyValues;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsBase;true;get_Providers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsDescriptionAttribute;false;SettingsDescriptionAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingsDescriptionAttribute;false;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsGroupDescriptionAttribute;false;SettingsGroupDescriptionAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingsGroupDescriptionAttribute;false;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsGroupNameAttribute;false;SettingsGroupNameAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingsGroupNameAttribute;false;get_GroupName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsLoadedEventArgs;false;SettingsLoadedEventArgs;(System.Configuration.SettingsProvider);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingsLoadedEventArgs;false;get_Provider;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsPropertyCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsPropertyCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Configuration;SettingsPropertyValue;false;get_PropertyValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsPropertyValue;false;get_SerializedValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsPropertyValue;false;set_PropertyValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingsPropertyValue;false;set_SerializedValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingsPropertyValueCollection;false;Add;(System.Configuration.SettingsPropertyValue);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingsPropertyValueCollection;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsPropertyValueCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsPropertyValueCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Configuration;SettingsProviderAttribute;false;SettingsProviderAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingsProviderAttribute;false;SettingsProviderAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;SettingsProviderAttribute;false;get_ProviderTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;SettingsProviderCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;StringValidator;false;StringValidator;(System.Int32,System.Int32,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Configuration;SubclassTypeValidator;false;SubclassTypeValidator;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;TimeSpanValidator;false;TimeSpanValidator;(System.TimeSpan,System.TimeSpan,System.Boolean,System.Int64);;Argument[0];Argument[Qualifier];generated:taint", + "System.Configuration;TimeSpanValidator;false;TimeSpanValidator;(System.TimeSpan,System.TimeSpan,System.Boolean,System.Int64);;Argument[1];Argument[Qualifier];generated:taint", + "System.Configuration;TypeNameConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Configuration;UriSection;false;get_Idn;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;UriSection;false;get_IriParsing;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;UriSection;false;get_SchemeSettings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Configuration;WhiteSpaceTrimStringConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint", + "System.Configuration;WhiteSpaceTrimStringConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Data.Common;DataAdapter;false;get_TableMappings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMapping;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMapping;false;DataColumnMapping;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DataColumnMapping;false;DataColumnMapping;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Common;DataColumnMapping;false;GetDataColumnBySchemaAction;(System.Data.DataTable,System.Type,System.Data.MissingSchemaAction);;Argument[0];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMapping;false;GetDataColumnBySchemaAction;(System.String,System.String,System.Data.DataTable,System.Type,System.Data.MissingSchemaAction);;Argument[2];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMapping;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMapping;false;get_DataSetColumn;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMapping;false;get_SourceColumn;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMapping;false;set_DataSetColumn;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DataColumnMapping;false;set_SourceColumn;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DataColumnMappingCollection;false;Add;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMappingCollection;false;Add;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMappingCollection;false;Add;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMappingCollection;false;GetByDataSetColumn;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMappingCollection;false;GetColumnMappingBySchemaAction;(System.Data.Common.DataColumnMappingCollection,System.String,System.Data.MissingMappingAction);;Argument[0].Element;ReturnValue;generated:taint", + "System.Data.Common;DataColumnMappingCollection;false;GetColumnMappingBySchemaAction;(System.Data.Common.DataColumnMappingCollection,System.String,System.Data.MissingMappingAction);;Argument[1];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMappingCollection;false;GetDataColumn;(System.Data.Common.DataColumnMappingCollection,System.String,System.Type,System.Data.DataTable,System.Data.MissingMappingAction,System.Data.MissingSchemaAction);;Argument[3];ReturnValue;generated:taint", + "System.Data.Common;DataColumnMappingCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Data.Common;DataTableMapping;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String,System.Data.Common.DataColumnMapping[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String,System.Data.Common.DataColumnMapping[]);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String,System.Data.Common.DataColumnMapping[]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Data.Common;DataTableMapping;false;GetColumnMappingBySchemaAction;(System.String,System.Data.MissingMappingAction);;Argument[0];ReturnValue;generated:taint", + "System.Data.Common;DataTableMapping;false;GetColumnMappingBySchemaAction;(System.String,System.Data.MissingMappingAction);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataTableMapping;false;GetDataColumn;(System.String,System.Type,System.Data.DataTable,System.Data.MissingMappingAction,System.Data.MissingSchemaAction);;Argument[2];ReturnValue;generated:taint", + "System.Data.Common;DataTableMapping;false;GetDataTableBySchemaAction;(System.Data.DataSet,System.Data.MissingSchemaAction);;Argument[0];ReturnValue;generated:taint", + "System.Data.Common;DataTableMapping;false;GetDataTableBySchemaAction;(System.Data.DataSet,System.Data.MissingSchemaAction);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataTableMapping;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataTableMapping;false;get_ColumnMappings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataTableMapping;false;get_DataSetTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataTableMapping;false;get_SourceTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataTableMapping;false;set_DataSetTable;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DataTableMapping;false;set_SourceTable;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DataTableMappingCollection;false;Add;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Data.Common;DataTableMappingCollection;false;Add;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Data.Common;DataTableMappingCollection;false;Add;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataTableMappingCollection;false;GetByDataSetTable;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DataTableMappingCollection;false;GetTableMappingBySchemaAction;(System.Data.Common.DataTableMappingCollection,System.String,System.String,System.Data.MissingMappingAction);;Argument[0].Element;ReturnValue;generated:taint", + "System.Data.Common;DataTableMappingCollection;false;GetTableMappingBySchemaAction;(System.Data.Common.DataTableMappingCollection,System.String,System.String,System.Data.MissingMappingAction);;Argument[1];ReturnValue;generated:taint", + "System.Data.Common;DataTableMappingCollection;false;GetTableMappingBySchemaAction;(System.Data.Common.DataTableMappingCollection,System.String,System.String,System.Data.MissingMappingAction);;Argument[2];ReturnValue;generated:taint", + "System.Data.Common;DataTableMappingCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Data.Common;DbCommand;false;ExecuteReader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommand;false;ExecuteReader;(System.Data.CommandBehavior);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommand;false;ExecuteReaderAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommand;false;ExecuteReaderAsync;(System.Data.CommandBehavior);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommand;false;ExecuteReaderAsync;(System.Data.CommandBehavior,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommand;false;ExecuteReaderAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommand;false;get_Connection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommand;false;get_Parameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommand;false;get_Transaction;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommand;false;set_Connection;(System.Data.Common.DbConnection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbCommand;false;set_Connection;(System.Data.IDbConnection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbCommand;false;set_Transaction;(System.Data.Common.DbTransaction);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbCommand;false;set_Transaction;(System.Data.IDbTransaction);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbCommand;true;ExecuteDbDataReaderAsync;(System.Data.CommandBehavior,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommand;true;PrepareAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;false;GetDeleteCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;false;GetDeleteCommand;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;false;GetInsertCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;false;GetInsertCommand;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;false;GetUpdateCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;false;GetUpdateCommand;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;false;RowUpdatingHandler;(System.Data.Common.RowUpdatingEventArgs);;Argument[Qualifier];Argument[0];generated:taint", + "System.Data.Common;DbCommandBuilder;false;get_DataAdapter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;false;set_DataAdapter;(System.Data.Common.DbDataAdapter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbCommandBuilder;true;InitializeCommand;(System.Data.Common.DbCommand);;Argument[0];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;true;get_CatalogSeparator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;true;get_QuotePrefix;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;true;get_QuoteSuffix;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;true;get_SchemaSeparator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbCommandBuilder;true;set_CatalogSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbCommandBuilder;true;set_QuotePrefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbCommandBuilder;true;set_QuoteSuffix;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbCommandBuilder;true;set_SchemaSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbConnection;false;CreateCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbConnection;true;ChangeDatabaseAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Data.Common;DbConnection;true;OpenAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Data.Common;DbConnectionStringBuilder;false;AppendKeyValuePair;(System.Text.StringBuilder,System.String,System.String);;Argument[1];Argument[0];generated:taint", + "System.Data.Common;DbConnectionStringBuilder;false;AppendKeyValuePair;(System.Text.StringBuilder,System.String,System.String);;Argument[2];Argument[0];generated:taint", + "System.Data.Common;DbConnectionStringBuilder;false;AppendKeyValuePair;(System.Text.StringBuilder,System.String,System.String,System.Boolean);;Argument[1];Argument[0];generated:taint", + "System.Data.Common;DbConnectionStringBuilder;false;AppendKeyValuePair;(System.Text.StringBuilder,System.String,System.String,System.Boolean);;Argument[2];Argument[0];generated:taint", + "System.Data.Common;DbConnectionStringBuilder;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbConnectionStringBuilder;false;GetProperties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbConnectionStringBuilder;false;GetProperties;(System.Attribute[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbConnectionStringBuilder;false;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);;Argument[Qualifier];ReturnValue;generated:value", + "System.Data.Common;DbConnectionStringBuilder;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbConnectionStringBuilder;false;get_ConnectionString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbConnectionStringBuilder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbDataAdapter;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbDataAdapter;false;DbDataAdapter;(System.Data.Common.DbDataAdapter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbDataAdapter;false;get_DeleteCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbDataAdapter;false;get_InsertCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbDataAdapter;false;get_SelectCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbDataAdapter;false;get_UpdateCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbDataAdapter;false;set_DeleteCommand;(System.Data.Common.DbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbDataAdapter;false;set_DeleteCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbDataAdapter;false;set_InsertCommand;(System.Data.Common.DbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbDataAdapter;false;set_InsertCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbDataAdapter;false;set_SelectCommand;(System.Data.Common.DbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbDataAdapter;false;set_SelectCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbDataAdapter;false;set_UpdateCommand;(System.Data.Common.DbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbDataAdapter;false;set_UpdateCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbDataAdapter;true;CreateRowUpdatedEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[0];ReturnValue;generated:taint", + "System.Data.Common;DbDataAdapter;true;CreateRowUpdatedEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[1];ReturnValue;generated:taint", + "System.Data.Common;DbDataAdapter;true;CreateRowUpdatedEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[3];ReturnValue;generated:taint", + "System.Data.Common;DbDataAdapter;true;CreateRowUpdatingEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[0];ReturnValue;generated:taint", + "System.Data.Common;DbDataAdapter;true;CreateRowUpdatingEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[1];ReturnValue;generated:taint", + "System.Data.Common;DbDataAdapter;true;CreateRowUpdatingEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[3];ReturnValue;generated:taint", + "System.Data.Common;DbDataReader;false;GetFieldValueAsync<>;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbDataReader;true;GetFieldValue<>;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbDataReader;true;GetFieldValueAsync<>;(System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbDataReader;true;GetProviderSpecificValue;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbDataReader;true;GetProviderSpecificValues;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Data.Common;DbDataReader;true;GetSchemaTableAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbDataReader;true;GetTextReader;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbDataRecord;false;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);;Argument[Qualifier];ReturnValue;generated:value", + "System.Data.Common;DbEnumerator;false;DbEnumerator;(System.Data.IDataReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbEnumerator;false;DbEnumerator;(System.Data.IDataReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;DbEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbTransaction;false;get_Connection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;DbTransaction;true;CommitAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Data.Common;DbTransaction;true;ReleaseAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Data.Common;DbTransaction;true;RollbackAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Data.Common;DbTransaction;true;RollbackAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Data.Common;DbTransaction;true;SaveAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Data.Common;RowUpdatedEventArgs;false;CopyToRows;(System.Data.DataRow[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Data.Common;RowUpdatedEventArgs;false;CopyToRows;(System.Data.DataRow[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Data.Common;RowUpdatedEventArgs;false;RowUpdatedEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;RowUpdatedEventArgs;false;RowUpdatedEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Common;RowUpdatedEventArgs;false;RowUpdatedEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[3];Argument[Qualifier];generated:taint", + "System.Data.Common;RowUpdatedEventArgs;false;get_Command;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;RowUpdatedEventArgs;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;RowUpdatedEventArgs;false;get_Row;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;RowUpdatedEventArgs;false;get_TableMapping;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;RowUpdatedEventArgs;false;set_Errors;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;RowUpdatingEventArgs;false;RowUpdatingEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;RowUpdatingEventArgs;false;RowUpdatingEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Common;RowUpdatingEventArgs;false;RowUpdatingEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[3];Argument[Qualifier];generated:taint", + "System.Data.Common;RowUpdatingEventArgs;false;get_BaseCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;RowUpdatingEventArgs;false;get_Command;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;RowUpdatingEventArgs;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;RowUpdatingEventArgs;false;get_Row;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;RowUpdatingEventArgs;false;get_TableMapping;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Common;RowUpdatingEventArgs;false;set_BaseCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;RowUpdatingEventArgs;false;set_Command;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Common;RowUpdatingEventArgs;false;set_Errors;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommand;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommand;false;ExecuteDbDataReader;(System.Data.CommandBehavior);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommand;false;ExecuteReader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommand;false;ExecuteReader;(System.Data.CommandBehavior);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommand;false;OdbcCommand;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommand;false;OdbcCommand;(System.String,System.Data.Odbc.OdbcConnection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommand;false;OdbcCommand;(System.String,System.Data.Odbc.OdbcConnection);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommand;false;OdbcCommand;(System.String,System.Data.Odbc.OdbcConnection,System.Data.Odbc.OdbcTransaction);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommand;false;OdbcCommand;(System.String,System.Data.Odbc.OdbcConnection,System.Data.Odbc.OdbcTransaction);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommand;false;OdbcCommand;(System.String,System.Data.Odbc.OdbcConnection,System.Data.Odbc.OdbcTransaction);;Argument[2];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommand;false;get_CommandText;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommand;false;get_Connection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommand;false;get_DbConnection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommand;false;get_DbParameterCollection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommand;false;get_DbTransaction;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommand;false;get_Parameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommand;false;get_Transaction;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommand;false;set_CommandText;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommand;false;set_Connection;(System.Data.Odbc.OdbcConnection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommand;false;set_DbConnection;(System.Data.Common.DbConnection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommand;false;set_DbTransaction;(System.Data.Common.DbTransaction);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommand;false;set_Transaction;(System.Data.Odbc.OdbcTransaction);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;GetDeleteCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;GetDeleteCommand;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;GetInsertCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;GetInsertCommand;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;GetParameterName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;GetUpdateCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;GetUpdateCommand;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;OdbcCommandBuilder;(System.Data.Odbc.OdbcDataAdapter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;QuoteIdentifier;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;QuoteIdentifier;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;QuoteIdentifier;(System.String,System.Data.Odbc.OdbcConnection);;Argument[0];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;QuoteIdentifier;(System.String,System.Data.Odbc.OdbcConnection);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;UnquoteIdentifier;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;UnquoteIdentifier;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;UnquoteIdentifier;(System.String,System.Data.Odbc.OdbcConnection);;Argument[0];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;UnquoteIdentifier;(System.String,System.Data.Odbc.OdbcConnection);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;get_DataAdapter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcCommandBuilder;false;set_DataAdapter;(System.Data.Odbc.OdbcDataAdapter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcConnection;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcConnection;false;CreateCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcConnection;false;CreateDbCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcConnection;false;get_ConnectionString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcConnectionStringBuilder;false;TryGetValue;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcConnectionStringBuilder;false;get_Driver;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcConnectionStringBuilder;false;get_Dsn;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcConnectionStringBuilder;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcConnectionStringBuilder;false;set_Driver;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcConnectionStringBuilder;false;set_Dsn;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcConnectionStringBuilder;false;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;OdbcDataAdapter;(System.Data.Odbc.OdbcCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;OdbcDataAdapter;(System.String,System.Data.Odbc.OdbcConnection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;OdbcDataAdapter;(System.String,System.Data.Odbc.OdbcConnection);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;OdbcDataAdapter;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;get_DeleteCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;get_InsertCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;get_SelectCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;get_UpdateCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;set_DeleteCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;set_DeleteCommand;(System.Data.Odbc.OdbcCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;set_InsertCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;set_InsertCommand;(System.Data.Odbc.OdbcCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;set_SelectCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;set_SelectCommand;(System.Data.Odbc.OdbcCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;set_UpdateCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataAdapter;false;set_UpdateCommand;(System.Data.Odbc.OdbcCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcDataReader;false;GetDate;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcDataReader;false;GetDateTime;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcDataReader;false;GetGuid;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcDataReader;false;GetSchemaTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcDataReader;false;GetString;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcDataReader;false;GetTime;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcDataReader;false;GetValue;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcDataReader;false;GetValues;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Data.Odbc;OdbcDataReader;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcDataReader;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcError;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcError;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcError;false;get_SQLState;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcError;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcErrorCollection;false;CopyTo;(System.Data.Odbc.OdbcError[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Data.Odbc;OdbcErrorCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcErrorCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Data.Odbc;OdbcException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Data.Odbc;OdbcException;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcException;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcInfoMessageEventArgs;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcInfoMessageEventArgs;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcInfoMessageEventArgs;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameter;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameter;false;OdbcParameter;(System.String,System.Data.Odbc.OdbcType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;OdbcParameter;(System.String,System.Data.Odbc.OdbcType,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;OdbcParameter;(System.String,System.Data.Odbc.OdbcType,System.Int32,System.Data.ParameterDirection,System.Boolean,System.Byte,System.Byte,System.String,System.Data.DataRowVersion,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;OdbcParameter;(System.String,System.Data.Odbc.OdbcType,System.Int32,System.Data.ParameterDirection,System.Boolean,System.Byte,System.Byte,System.String,System.Data.DataRowVersion,System.Object);;Argument[7];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;OdbcParameter;(System.String,System.Data.Odbc.OdbcType,System.Int32,System.Data.ParameterDirection,System.Boolean,System.Byte,System.Byte,System.String,System.Data.DataRowVersion,System.Object);;Argument[9];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;OdbcParameter;(System.String,System.Data.Odbc.OdbcType,System.Int32,System.Data.ParameterDirection,System.Byte,System.Byte,System.String,System.Data.DataRowVersion,System.Boolean,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;OdbcParameter;(System.String,System.Data.Odbc.OdbcType,System.Int32,System.Data.ParameterDirection,System.Byte,System.Byte,System.String,System.Data.DataRowVersion,System.Boolean,System.Object);;Argument[6];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;OdbcParameter;(System.String,System.Data.Odbc.OdbcType,System.Int32,System.Data.ParameterDirection,System.Byte,System.Byte,System.String,System.Data.DataRowVersion,System.Boolean,System.Object);;Argument[9];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;OdbcParameter;(System.String,System.Data.Odbc.OdbcType,System.Int32,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;OdbcParameter;(System.String,System.Data.Odbc.OdbcType,System.Int32,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;OdbcParameter;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;OdbcParameter;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameter;false;get_ParameterName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameter;false;get_SourceColumn;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameter;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameter;false;set_ParameterName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;set_SourceColumn;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameter;false;set_Value;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.Data.Odbc.OdbcParameter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.Data.Odbc.OdbcParameter);;Argument[0];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.Data.Odbc.OdbcParameter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.String,System.Data.Odbc.OdbcType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.String,System.Data.Odbc.OdbcType);;Argument[0];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.String,System.Data.Odbc.OdbcType,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.String,System.Data.Odbc.OdbcType,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.String,System.Data.Odbc.OdbcType,System.Int32,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.String,System.Data.Odbc.OdbcType,System.Int32,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.String,System.Data.Odbc.OdbcType,System.Int32,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.String,System.Data.Odbc.OdbcType,System.Int32,System.String);;Argument[3];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.String,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Add;(System.String,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;AddRange;(System.Data.Odbc.OdbcParameter[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;AddWithValue;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;AddWithValue;(System.String,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;AddWithValue;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;AddWithValue;(System.String,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;CopyTo;(System.Data.Odbc.OdbcParameter[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;GetParameter;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;GetParameter;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Insert;(System.Int32,System.Data.Odbc.OdbcParameter);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;Insert;(System.Int32,System.Data.Odbc.OdbcParameter);;Argument[Qualifier];Argument[1];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;SetParameter;(System.Int32,System.Data.Common.DbParameter);;Argument[Qualifier];Argument[1];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;SetParameter;(System.String,System.Data.Common.DbParameter);;Argument[Qualifier];Argument[1];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;set_Item;(System.Int32,System.Data.Odbc.OdbcParameter);;Argument[Qualifier];Argument[1];generated:taint", + "System.Data.Odbc;OdbcParameterCollection;false;set_Item;(System.String,System.Data.Odbc.OdbcParameter);;Argument[Qualifier];Argument[1];generated:taint", + "System.Data.Odbc;OdbcRowUpdatedEventArgs;false;get_Command;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcRowUpdatingEventArgs;false;get_BaseCommand;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcRowUpdatingEventArgs;false;get_Command;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcRowUpdatingEventArgs;false;set_BaseCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcRowUpdatingEventArgs;false;set_Command;(System.Data.Odbc.OdbcCommand);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.Odbc;OdbcTransaction;false;get_Connection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.Odbc;OdbcTransaction;false;get_DbConnection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlBinary;false;Add;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlBinary;false;Add;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[1];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlBinary;false;Concat;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlBinary;false;Concat;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[1];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlBinary;false;ReadXml;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.SqlTypes;SqlBinary;false;SqlBinary;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Data.SqlTypes;SqlBinary;false;ToSqlGuid;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlBinary;false;WriteXml;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Data.SqlTypes;SqlBinary;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlBinary;false;op_Addition;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlBinary;false;op_Addition;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[1];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlBytes;false;Read;(System.Int64,System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[1].Element;generated:taint", + "System.Data.SqlTypes;SqlBytes;false;ReadXml;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.SqlTypes;SqlBytes;false;SqlBytes;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Data.SqlTypes;SqlBytes;false;SqlBytes;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.SqlTypes;SqlBytes;false;Write;(System.Int64,System.Byte[],System.Int32,System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Data.SqlTypes;SqlBytes;false;WriteXml;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Data.SqlTypes;SqlBytes;false;get_Buffer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlBytes;false;get_Stream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlBytes;false;set_Stream;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.SqlTypes;SqlChars;false;SqlChars;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Data.SqlTypes;SqlChars;false;WriteXml;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Data.SqlTypes;SqlChars;false;get_Buffer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlDecimal;false;Abs;(System.Data.SqlTypes.SqlDecimal);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlDecimal;false;AdjustScale;(System.Data.SqlTypes.SqlDecimal,System.Int32,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlDecimal;false;Ceiling;(System.Data.SqlTypes.SqlDecimal);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlDecimal;false;ConvertToPrecScale;(System.Data.SqlTypes.SqlDecimal,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlDecimal;false;Floor;(System.Data.SqlTypes.SqlDecimal);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlDecimal;false;Round;(System.Data.SqlTypes.SqlDecimal,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlDecimal;false;Truncate;(System.Data.SqlTypes.SqlDecimal,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlDecimal;false;op_UnaryNegation;(System.Data.SqlTypes.SqlDecimal);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlGuid;false;SqlGuid;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Data.SqlTypes;SqlGuid;false;ToByteArray;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlGuid;false;ToSqlBinary;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlString;false;Add;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlString;false;Add;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[1];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlString;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlString;false;Concat;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlString;false;Concat;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[1];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlString;false;GetNonUnicodeBytes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlString;false;GetUnicodeBytes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlString;false;ReadXml;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.SqlTypes;SqlString;false;SqlString;(System.Int32,System.Data.SqlTypes.SqlCompareOptions,System.Byte[],System.Int32,System.Int32,System.Boolean);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Data.SqlTypes;SqlString;false;SqlString;(System.String,System.Int32,System.Data.SqlTypes.SqlCompareOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data.SqlTypes;SqlString;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlString;false;WriteXml;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Data.SqlTypes;SqlString;false;get_CompareInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlString;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlString;false;op_Addition;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[0];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlString;false;op_Addition;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[1];ReturnValue;generated:taint", + "System.Data.SqlTypes;SqlXml;false;SqlXml;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;Constraint;false;SetDataSet;(System.Data.DataSet);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;Constraint;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;Constraint;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;Constraint;true;get_ConstraintName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;Constraint;true;get__DataSet;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;Constraint;true;set_ConstraintName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn);;Argument[0];ReturnValue;generated:taint", + "System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Boolean);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[0];ReturnValue;generated:taint", + "System.Data;ConstraintCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;ConstraintCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;ConstraintCollection;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DBConcurrencyException;false;CopyToRows;(System.Data.DataRow[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Data;DBConcurrencyException;false;CopyToRows;(System.Data.DataRow[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Data;DBConcurrencyException;false;DBConcurrencyException;(System.String,System.Exception,System.Data.DataRow[]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Data;DBConcurrencyException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Data;DBConcurrencyException;false;get_Row;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DBConcurrencyException;false;set_Row;(System.Data.DataRow);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataColumn;false;DataColumn;(System.String,System.Type,System.String,System.Data.MappingType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataColumn;false;DataColumn;(System.String,System.Type,System.String,System.Data.MappingType);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data;DataColumn;false;DataColumn;(System.String,System.Type,System.String,System.Data.MappingType);;Argument[2];Argument[Qualifier];generated:taint", + "System.Data;DataColumn;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumn;false;get_Caption;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumn;false;get_ColumnName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumn;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumn;false;get_DefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumn;false;get_Expression;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumn;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumn;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumn;false;get_Prefix;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumn;false;get_Table;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumn;false;set_Caption;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataColumn;false;set_ColumnName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataColumn;false;set_DataType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataColumn;false;set_DefaultValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataColumn;false;set_Expression;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataColumn;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataColumn;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataColumnChangeEventArgs;false;DataColumnChangeEventArgs;(System.Data.DataRow,System.Data.DataColumn,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data;DataColumnChangeEventArgs;false;get_Column;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumnCollection;false;Add;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumnCollection;false;Add;(System.String,System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumnCollection;false;Add;(System.String,System.Type,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumnCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumnCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataColumnCollection;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataReaderExtensions;false;GetDateTime;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Data;DataReaderExtensions;false;GetFieldValue<>;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Data;DataReaderExtensions;false;GetFieldValueAsync<>;(System.Data.Common.DbDataReader,System.String,System.Threading.CancellationToken);;Argument[0].Element;ReturnValue;generated:taint", + "System.Data;DataReaderExtensions;false;GetGuid;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Data;DataReaderExtensions;false;GetProviderSpecificValue;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Data;DataReaderExtensions;false;GetString;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Data;DataReaderExtensions;false;GetTextReader;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Data;DataReaderExtensions;false;GetValue;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.Data.DataColumn,System.Data.DataColumn,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.Data.DataColumn[],System.Data.DataColumn[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[2];Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[3];Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[4];Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[5].Element;Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[6].Element;Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[2];Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[3].Element;Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[4].Element;Argument[Qualifier];generated:taint", + "System.Data;DataRelation;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelation;false;get_ChildColumns;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelation;false;get_ChildKeyConstraint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelation;false;get_DataSet;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelation;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelation;false;get_ParentColumns;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelation;false;get_ParentKeyConstraint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelation;false;get_RelationName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelation;false;set_RelationName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataRelationCollection;false;Remove;(System.Data.DataRelation);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataRelationCollection;true;Add;(System.Data.DataColumn,System.Data.DataColumn);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelationCollection;true;Add;(System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[],System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[],System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;DataRow;(System.Data.DataRowBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataRow;false;GetChildRows;(System.Data.DataRelation);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;GetChildRows;(System.Data.DataRelation,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;GetChildRows;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;GetChildRows;(System.String,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;GetParentRows;(System.Data.DataRelation);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;GetParentRows;(System.Data.DataRelation,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;GetParentRows;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;GetParentRows;(System.String,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;SetNull;(System.Data.DataColumn);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataRow;false;SetParentRow;(System.Data.DataRow,System.Data.DataRelation);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data;DataRow;false;get_Item;(System.Data.DataColumn);;Argument[0];ReturnValue;generated:taint", + "System.Data;DataRow;false;get_Item;(System.Data.DataColumn,System.Data.DataRowVersion);;Argument[0];ReturnValue;generated:taint", + "System.Data;DataRow;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;get_Item;(System.Int32,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;get_Item;(System.String,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;get_ItemArray;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;get_RowError;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;get_Table;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRow;false;set_Item;(System.Data.DataColumn,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataRow;false;set_RowError;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataRowCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRowExtensions;false;SetField<>;(System.Data.DataRow,System.Data.DataColumn,T);;Argument[1];Argument[0];generated:taint", + "System.Data;DataRowView;false;CreateChildView;(System.Data.DataRelation);;Argument[0];ReturnValue;generated:taint", + "System.Data;DataRowView;false;CreateChildView;(System.Data.DataRelation);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRowView;false;CreateChildView;(System.Data.DataRelation,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Data;DataRowView;false;CreateChildView;(System.Data.DataRelation,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRowView;false;CreateChildView;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRowView;false;CreateChildView;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRowView;false;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);;Argument[Qualifier];ReturnValue;generated:value", + "System.Data;DataRowView;false;get_DataView;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRowView;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRowView;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataRowView;false;get_Row;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;Copy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;CreateDataReader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;CreateDataReader;(System.Data.DataTable[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Data;DataSet;false;DataSet;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataSet;false;DataSet;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataSet;false;GetChanges;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;GetChanges;(System.Data.DataRowState);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;GetList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Data;DataSet;false;get_DataSetName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;get_DefaultViewManager;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;get_Locale;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;get_Prefix;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;get_Relations;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;get_Tables;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataSet;false;set_DataSetName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataSet;false;set_Locale;(System.Globalization.CultureInfo);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataSet;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataSet;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataSet;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataTable;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;Copy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;CreateDataReader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;DataTable;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataTable;false;DataTable;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataTable;false;DataTable;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data;DataTable;false;GetChanges;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;GetChanges;(System.Data.DataRowState);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;GetErrors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;GetList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Data;DataTable;false;LoadDataRow;(System.Object[],System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Data;DataTable;false;LoadDataRow;(System.Object[],System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;LoadDataRow;(System.Object[],System.Data.LoadOption);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;NewRow;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;NewRowArray;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;NewRowFromBuilder;(System.Data.DataRowBuilder);;Argument[0];ReturnValue;generated:taint", + "System.Data;DataTable;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_ChildRelations;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_Columns;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_Constraints;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_DataSet;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_DefaultView;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_DisplayExpression;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_Locale;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_ParentRelations;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_Prefix;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_Rows;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;get_TableName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTable;false;set_Locale;(System.Globalization.CultureInfo);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataTable;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataTable;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataTable;false;set_PrimaryKey;(System.Data.DataColumn[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Data;DataTable;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataTable;false;set_TableName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataTableCollection;false;Add;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableCollection;false;Add;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data;DataTableCollection;false;Add;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Data;DataTableCollection;false;Add;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableCollection;false;get_Item;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableCollection;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableExtensions;false;AsEnumerable;(System.Data.DataTable);;Argument[0];ReturnValue;generated:taint", + "System.Data;DataTableReader;false;DataTableReader;(System.Data.DataTable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataTableReader;false;DataTableReader;(System.Data.DataTable[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Data;DataTableReader;false;GetDateTime;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableReader;false;GetGuid;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableReader;false;GetProviderSpecificValue;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableReader;false;GetSchemaTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableReader;false;GetString;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableReader;false;GetValue;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableReader;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataTableReader;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;AddNew;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;ApplySort;(System.ComponentModel.PropertyDescriptor,System.ComponentModel.ListSortDirection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataView;false;DataView;(System.Data.DataTable,System.String,System.String,System.Data.DataViewRowState);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataView;false;DataView;(System.Data.DataTable,System.String,System.String,System.Data.DataViewRowState);;Argument[2];Argument[Qualifier];generated:taint", + "System.Data;DataView;false;FindRows;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;FindRows;(System.Object[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;GetItemProperties;(System.ComponentModel.PropertyDescriptor[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;GetListName;(System.ComponentModel.PropertyDescriptor[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;ToTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;ToTable;(System.Boolean,System.String[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;ToTable;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;ToTable;(System.String,System.Boolean,System.String[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;get_DataViewManager;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;get_Filter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;get_RowFilter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;get_Sort;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Data;DataView;false;get_Table;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataView;false;set_Filter;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataView;false;set_RowFilter;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataView;false;set_Sort;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataView;false;set_Table;(System.Data.DataTable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataViewManager;false;CreateDataView;(System.Data.DataTable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataViewManager;false;GetListName;(System.ComponentModel.PropertyDescriptor[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataViewManager;false;get_DataSet;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataViewManager;false;get_DataViewSettings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataViewManager;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Data;DataViewManager;false;set_DataSet;(System.Data.DataSet);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataViewSetting;false;get_DataViewManager;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataViewSetting;false;get_RowFilter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataViewSetting;false;get_Sort;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataViewSetting;false;get_Table;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataViewSetting;false;set_RowFilter;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataViewSetting;false;set_Sort;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;DataViewSettingCollection;false;get_Item;(System.Data.DataTable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataViewSettingCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataViewSettingCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;DataViewSettingCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Data;DataViewSettingCollection;false;set_Item;(System.Data.DataTable,System.Data.DataViewSetting);;Argument[0];Argument[1];generated:taint", + "System.Data;DataViewSettingCollection;false;set_Item;(System.Data.DataTable,System.Data.DataViewSetting);;Argument[Qualifier];Argument[1];generated:taint", + "System.Data;DataViewSettingCollection;false;set_Item;(System.Int32,System.Data.DataViewSetting);;Argument[Qualifier];Argument[1];generated:taint", + "System.Data;FillErrorEventArgs;false;FillErrorEventArgs;(System.Data.DataTable,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;FillErrorEventArgs;false;FillErrorEventArgs;(System.Data.DataTable,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Data;FillErrorEventArgs;false;get_DataTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;FillErrorEventArgs;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;FillErrorEventArgs;false;get_Values;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;FillErrorEventArgs;false;set_Errors;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.Data.DataColumn,System.Data.DataColumn);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[2];Argument[Qualifier];generated:taint", + "System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[3].Element;Argument[Qualifier];generated:taint", + "System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[4].Element;Argument[Qualifier];generated:taint", + "System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[1];Argument[Qualifier];generated:taint", + "System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[3].Element;Argument[Qualifier];generated:taint", + "System.Data;ForeignKeyConstraint;false;get_Columns;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;ForeignKeyConstraint;false;get_RelatedColumns;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;InternalDataCollectionBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Data;TypedTableBase<>;false;Cast<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.Data.DataColumn);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.Data.DataColumn,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.Data.DataColumn[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.Data.DataColumn[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.String[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.String[],System.Boolean);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Data;UniqueConstraint;false;get_Columns;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Contracts;ContractClassAttribute;false;ContractClassAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractClassAttribute;false;get_TypeContainingContracts;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Contracts;ContractClassForAttribute;false;ContractClassForAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractClassForAttribute;false;get_TypeContractsAreFor;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Contracts;ContractException;false;ContractException;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.String,System.Exception);;Argument[2];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractException;false;ContractException;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.String,System.Exception);;Argument[3];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Diagnostics.Contracts;ContractException;false;get_Condition;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Contracts;ContractException;false;get_Failure;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Contracts;ContractException;false;get_UserMessage;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Contracts;ContractFailedEventArgs;false;ContractFailedEventArgs;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractFailedEventArgs;false;ContractFailedEventArgs;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[2];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractFailedEventArgs;false;ContractFailedEventArgs;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[3];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractFailedEventArgs;false;get_Condition;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Contracts;ContractFailedEventArgs;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Contracts;ContractFailedEventArgs;false;get_OriginalException;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractOptionAttribute;false;get_Category;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Contracts;ContractOptionAttribute;false;get_Setting;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Contracts;ContractOptionAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Contracts;ContractPublicPropertyNameAttribute;false;ContractPublicPropertyNameAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics.Contracts;ContractPublicPropertyNameAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Metrics;Measurement<>;false;Measurement;(T,System.Collections.Generic.KeyValuePair[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Diagnostics.Tracing;DiagnosticCounter;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;DiagnosticCounter;false;get_DisplayUnits;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;DiagnosticCounter;false;set_DisplayName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics.Tracing;DiagnosticCounter;false;set_DisplayUnits;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics.Tracing;EventListener;false;DisableEvents;(System.Diagnostics.Tracing.EventSource);;Argument[Qualifier];Argument[0];generated:taint", + "System.Diagnostics.Tracing;EventListener;false;EnableEvents;(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventLevel);;Argument[Qualifier];Argument[0];generated:taint", + "System.Diagnostics.Tracing;EventListener;false;EnableEvents;(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventLevel,System.Diagnostics.Tracing.EventKeywords);;Argument[Qualifier];Argument[0];generated:taint", + "System.Diagnostics.Tracing;EventListener;false;EnableEvents;(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventLevel,System.Diagnostics.Tracing.EventKeywords,System.Collections.Generic.IDictionary);;Argument[Qualifier];Argument[0];generated:taint", + "System.Diagnostics.Tracing;EventSource;false;EventSource;(System.Diagnostics.Tracing.EventSourceSettings,System.String[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Diagnostics.Tracing;EventSource;false;GenerateManifest;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;EventSource;false;GenerateManifest;(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions);;Argument[0];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;EventSource;false;GetName;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;EventSource;false;GetTrait;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;EventSource;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;EventSource;false;get_ConstructionException;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;EventSource;false;get_Guid;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;EventSource;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_ActivityId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_EventName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_PayloadNames;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_RelatedActivityId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;AddBaggage;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;Activity;false;AddEvent;(System.Diagnostics.ActivityEvent);;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;Activity;false;AddTag;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;Activity;false;AddTag;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;SetBaggage;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;Activity;false;SetEndTime;(System.DateTime);;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;Activity;false;SetIdFormat;(System.Diagnostics.ActivityIdFormat);;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;Activity;false;SetParentId;(System.Diagnostics.ActivityTraceId,System.Diagnostics.ActivitySpanId,System.Diagnostics.ActivityTraceFlags);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;Activity;false;SetParentId;(System.Diagnostics.ActivityTraceId,System.Diagnostics.ActivitySpanId,System.Diagnostics.ActivityTraceFlags);;Argument[1];Argument[Qualifier];generated:taint", + "System.Diagnostics;Activity;false;SetParentId;(System.Diagnostics.ActivityTraceId,System.Diagnostics.ActivitySpanId,System.Diagnostics.ActivityTraceFlags);;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;Activity;false;SetParentId;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;Activity;false;SetParentId;(System.String);;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;Activity;false;SetStartTime;(System.DateTime);;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;Activity;false;SetStatus;(System.Diagnostics.ActivityStatusCode,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Diagnostics;Activity;false;SetStatus;(System.Diagnostics.ActivityStatusCode,System.String);;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;Activity;false;SetTag;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;Activity;false;Start;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;Activity;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;get_Events;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;get_Links;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;get_ParentId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;get_ParentSpanId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;get_RootId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;get_SpanId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;get_StatusDescription;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;get_TagObjects;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;get_TraceId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;get_TraceStateString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Activity;false;set_DisplayName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;Activity;false;set_TraceStateString;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;ActivityCreationOptions<>;false;get_SamplingTags;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ActivitySource;false;CreateActivity;(System.String,System.Diagnostics.ActivityKind,System.String,System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEnumerable,System.Diagnostics.ActivityIdFormat);;Argument[2];ReturnValue;generated:taint", + "System.Diagnostics;ActivitySource;false;StartActivity;(System.String,System.Diagnostics.ActivityKind,System.String,System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEnumerable,System.DateTimeOffset);;Argument[2];ReturnValue;generated:taint", + "System.Diagnostics;ActivitySpanId;false;ToHexString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ActivitySpanId;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ActivityTagsCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ActivityTagsCollection;false;TryGetValue;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ActivityTraceId;false;ToHexString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ActivityTraceId;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;CorrelationManager;false;get_LogicalOperationStack;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;DataReceivedEventArgs;false;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;DebuggerDisplayAttribute;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;DebuggerDisplayAttribute;false;set_Target;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;DebuggerTypeProxyAttribute;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;DebuggerTypeProxyAttribute;false;set_Target;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;DebuggerVisualizerAttribute;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;DebuggerVisualizerAttribute;false;set_Target;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;DefaultTraceListener;false;get_LogFileName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;DefaultTraceListener;false;set_LogFileName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;DelimitedListTraceListener;false;get_Delimiter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;DelimitedListTraceListener;false;set_Delimiter;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;DiagnosticListener;false;Subscribe;(System.IObserver>);;Argument[0];ReturnValue;generated:taint", + "System.Diagnostics;DiagnosticListener;false;Subscribe;(System.IObserver>);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;DiagnosticSource;false;StartActivity;(System.Diagnostics.Activity,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;GetVersionInfo;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_Comments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_CompanyName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_FileDescription;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_FileVersion;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_InternalName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_Language;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_LegalCopyright;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_LegalTrademarks;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_OriginalFilename;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_PrivateBuild;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_ProductName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_ProductVersion;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;FileVersionInfo;false;get_SpecialBuild;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;GetProcessById;(System.Int32,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;GetProcesses;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;Start;(System.Diagnostics.ProcessStartInfo);;Argument[0];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_ExitTime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_MachineName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_MainModule;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_MaxWorkingSet;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_MinWorkingSet;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_Modules;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_ProcessorAffinity;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_SafeHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_StandardError;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_StandardInput;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_StandardOutput;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_StartInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_StartTime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;get_Threads;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Process;false;set_ProcessorAffinity;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;Process;false;set_StartInfo;(System.Diagnostics.ProcessStartInfo);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;ProcessModule;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ProcessModule;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ProcessModule;false;get_ModuleName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ProcessModuleCollection;false;ProcessModuleCollection;(System.Diagnostics.ProcessModule[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Diagnostics;ProcessModuleCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ProcessStartInfo;false;ProcessStartInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;ProcessStartInfo;false;ProcessStartInfo;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;ProcessStartInfo;false;ProcessStartInfo;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Diagnostics;ProcessStartInfo;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ProcessStartInfo;false;get_Environment;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ProcessStartInfo;false;get_EnvironmentVariables;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ProcessStartInfo;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ProcessStartInfo;false;get_UserName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ProcessStartInfo;false;get_Verb;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ProcessStartInfo;false;get_WorkingDirectory;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ProcessStartInfo;false;set_Arguments;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;ProcessStartInfo;false;set_FileName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;ProcessStartInfo;false;set_UserName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;ProcessStartInfo;false;set_Verb;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;ProcessStartInfo;false;set_WorkingDirectory;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;ProcessThread;false;get_StartAddress;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;ProcessThreadCollection;false;Insert;(System.Int32,System.Diagnostics.ProcessThread);;Argument[1];Argument[Qualifier];generated:taint", + "System.Diagnostics;ProcessThreadCollection;false;ProcessThreadCollection;(System.Diagnostics.ProcessThread[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Diagnostics;ProcessThreadCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;SourceFilter;false;SourceFilter;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;SourceFilter;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;SourceFilter;false;set_Source;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;StackFrame;false;GetFileName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;StackFrame;false;GetMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;StackFrame;false;StackFrame;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;StackFrame;false;StackFrame;(System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;StackFrame;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;StackTrace;false;GetFrame;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;StackTrace;false;StackTrace;(System.Diagnostics.StackFrame);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;StackTrace;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Switch;false;Switch;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;Switch;false;Switch;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Diagnostics;Switch;false;Switch;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Diagnostics;Switch;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Switch;false;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Switch;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Switch;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;Switch;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;SwitchAttribute;false;SwitchAttribute;(System.String,System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;SwitchAttribute;false;SwitchAttribute;(System.String,System.Type);;Argument[1];Argument[Qualifier];generated:taint", + "System.Diagnostics;SwitchAttribute;false;get_SwitchName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;SwitchAttribute;false;get_SwitchType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;SwitchAttribute;false;set_SwitchName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;SwitchAttribute;false;set_SwitchType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;SwitchLevelAttribute;false;SwitchLevelAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;SwitchLevelAttribute;false;get_SwitchLevelType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;SwitchLevelAttribute;false;set_SwitchLevelType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;TagList+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;TagList;false;TagList;(System.ReadOnlySpan>);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;TextWriterTraceListener;false;TextWriterTraceListener;(System.IO.TextWriter,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;TextWriterTraceListener;false;TextWriterTraceListener;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;TextWriterTraceListener;false;TextWriterTraceListener;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;TextWriterTraceListener;false;get_Writer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;TextWriterTraceListener;false;set_Writer;(System.IO.TextWriter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;TraceEventCache;false;get_Callstack;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;TraceEventCache;false;get_DateTime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;TraceListener;false;TraceListener;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;TraceListener;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;TraceListener;false;get_Filter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;TraceListener;false;set_Filter;(System.Diagnostics.TraceFilter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;TraceListener;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;TraceListener;true;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;TraceListenerCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Diagnostics;TraceSource;false;TraceSource;(System.String,System.Diagnostics.SourceLevels);;Argument[0];Argument[Qualifier];generated:taint", + "System.Diagnostics;TraceSource;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;TraceSource;false;get_Listeners;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;TraceSource;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;TraceSource;false;get_Switch;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Diagnostics;TraceSource;false;set_Switch;(System.Diagnostics.SourceSwitch);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirSyncRequestControl;false;DirSyncRequestControl;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirSyncRequestControl;false;set_Cookie;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Add;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Add;(System.Byte[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Add;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Add;(System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Add;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Add;(System.Uri);;Argument[Qualifier];Argument[0];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;AddRange;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;CopyTo;(System.Object[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;DirectoryAttribute;(System.String,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;DirectoryAttribute;(System.String,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;DirectoryAttribute;(System.String,System.Object[]);;Argument[Qualifier];Argument[1].Element;generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;GetValues;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Insert;(System.Int32,System.Byte[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Insert;(System.Int32,System.Byte[]);;Argument[Qualifier];Argument[1].Element;generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Insert;(System.Int32,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Insert;(System.Int32,System.String);;Argument[Qualifier];Argument[1];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Insert;(System.Int32,System.Uri);;Argument[1];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Insert;(System.Int32,System.Uri);;Argument[Qualifier];Argument[1];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Remove;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;Remove;(System.Object);;Argument[Qualifier];Argument[0];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;set_Item;(System.Int32,System.Object);;Argument[Qualifier];Argument[1];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeCollection;false;Add;(System.DirectoryServices.Protocols.DirectoryAttribute);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeCollection;false;AddRange;(System.DirectoryServices.Protocols.DirectoryAttributeCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeCollection;false;AddRange;(System.DirectoryServices.Protocols.DirectoryAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeCollection;false;CopyTo;(System.DirectoryServices.Protocols.DirectoryAttribute[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeCollection;false;Insert;(System.Int32,System.DirectoryServices.Protocols.DirectoryAttribute);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeCollection;false;Remove;(System.DirectoryServices.Protocols.DirectoryAttribute);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeCollection;false;set_Item;(System.Int32,System.DirectoryServices.Protocols.DirectoryAttribute);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeModificationCollection;false;Add;(System.DirectoryServices.Protocols.DirectoryAttributeModification);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeModificationCollection;false;AddRange;(System.DirectoryServices.Protocols.DirectoryAttributeModificationCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeModificationCollection;false;AddRange;(System.DirectoryServices.Protocols.DirectoryAttributeModification[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeModificationCollection;false;CopyTo;(System.DirectoryServices.Protocols.DirectoryAttributeModification[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeModificationCollection;false;Insert;(System.Int32,System.DirectoryServices.Protocols.DirectoryAttributeModification);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeModificationCollection;false;Remove;(System.DirectoryServices.Protocols.DirectoryAttributeModification);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeModificationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;DirectoryAttributeModificationCollection;false;set_Item;(System.Int32,System.DirectoryServices.Protocols.DirectoryAttributeModification);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryConnection;false;get_ClientCertificates;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;DirectoryConnection;true;get_Directory;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;DirectoryConnection;true;get_Timeout;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;DirectoryConnection;true;set_Credential;(System.Net.NetworkCredential);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryConnection;true;set_Timeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryControlCollection;false;Add;(System.DirectoryServices.Protocols.DirectoryControl);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryControlCollection;false;AddRange;(System.DirectoryServices.Protocols.DirectoryControlCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryControlCollection;false;AddRange;(System.DirectoryServices.Protocols.DirectoryControl[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryControlCollection;false;CopyTo;(System.DirectoryServices.Protocols.DirectoryControl[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.DirectoryServices.Protocols;DirectoryControlCollection;false;Insert;(System.Int32,System.DirectoryServices.Protocols.DirectoryControl);;Argument[1];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryControlCollection;false;Remove;(System.DirectoryServices.Protocols.DirectoryControl);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryControlCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;DirectoryControlCollection;false;set_Item;(System.Int32,System.DirectoryServices.Protocols.DirectoryControl);;Argument[1];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;DirectoryRequest;false;get_RequestId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;DirectoryRequest;false;set_RequestId;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;ExtendedRequest;false;ExtendedRequest;(System.String,System.Byte[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;ExtendedRequest;false;set_RequestValue;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;ExtendedResponse;false;set_ResponseValue;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;LdapConnection;false;Bind;(System.Net.NetworkCredential);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;LdapConnection;false;EndSendRequest;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;LdapConnection;false;GetPartialResults;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;LdapConnection;false;LdapConnection;(System.DirectoryServices.Protocols.LdapDirectoryIdentifier,System.Net.NetworkCredential,System.DirectoryServices.Protocols.AuthType);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;LdapConnection;false;LdapConnection;(System.DirectoryServices.Protocols.LdapDirectoryIdentifier,System.Net.NetworkCredential,System.DirectoryServices.Protocols.AuthType);;Argument[1];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;LdapConnection;false;get_Timeout;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;LdapConnection;false;set_Credential;(System.Net.NetworkCredential);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;LdapConnection;false;set_Timeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;LdapDirectoryIdentifier;false;LdapDirectoryIdentifier;(System.String[],System.Boolean,System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;LdapSessionOptions;false;get_QueryClientCertificate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;LdapSessionOptions;false;get_ReferralCallback;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;LdapSessionOptions;false;get_VerifyServerCertificate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;LdapSessionOptions;false;set_ReferralCallback;(System.DirectoryServices.Protocols.ReferralCallback);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;PageResultRequestControl;false;PageResultRequestControl;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;PageResultRequestControl;false;set_Cookie;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;PartialResultsCollection;false;CopyTo;(System.Object[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.DirectoryServices.Protocols;PartialResultsCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;SearchRequest;false;SearchRequest;(System.String,System.String,System.DirectoryServices.Protocols.SearchScope,System.String[]);;Argument[1];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;SearchRequest;false;get_Filter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;SearchRequest;false;get_TimeLimit;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;SearchRequest;false;set_Filter;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;SearchRequest;false;set_TimeLimit;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;SearchResponse;false;get_Entries;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;SearchResponse;false;get_References;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;SearchResponse;false;set_Entries;(System.DirectoryServices.Protocols.SearchResultEntryCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;SearchResponse;false;set_References;(System.DirectoryServices.Protocols.SearchResultReferenceCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;SearchResultAttributeCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;SearchResultEntryCollection;false;CopyTo;(System.DirectoryServices.Protocols.SearchResultEntry[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.DirectoryServices.Protocols;SearchResultEntryCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;SearchResultReferenceCollection;false;CopyTo;(System.DirectoryServices.Protocols.SearchResultReference[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.DirectoryServices.Protocols;SearchResultReferenceCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;SortKey;false;SortKey;(System.String,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;SortKey;false;SortKey;(System.String,System.String,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;SortKey;false;get_AttributeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;SortKey;false;get_MatchingRule;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;SortKey;false;set_AttributeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;SortKey;false;set_MatchingRule;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;SortRequestControl;false;get_SortKeys;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;VerifyNameControl;false;VerifyNameControl;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;VerifyNameControl;false;get_ServerName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.DirectoryServices.Protocols;VerifyNameControl;false;set_ServerName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;VlvRequestControl;false;VlvRequestControl;(System.Int32,System.Int32,System.Byte[]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;VlvRequestControl;false;VlvRequestControl;(System.Int32,System.Int32,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;VlvRequestControl;false;set_ContextId;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.DirectoryServices.Protocols;VlvRequestControl;false;set_Target;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Drawing.Configuration;SystemDrawingSection;false;get_BitmapSuffix;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Design;CategoryNameCollection;false;CategoryNameCollection;(System.Drawing.Design.CategoryNameCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Drawing.Design;CategoryNameCollection;false;CategoryNameCollection;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Drawing.Design;CategoryNameCollection;false;CopyTo;(System.String[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Drawing.Design;CategoryNameCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;BitmapData;false;get_Scan0;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;BitmapData;false;set_Scan0;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ColorMap;false;get_NewColor;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ColorMap;false;get_OldColor;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ColorMap;false;set_NewColor;(System.Drawing.Color);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ColorMap;false;set_OldColor;(System.Drawing.Color);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ColorPalette;false;get_Entries;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;Encoder;false;Encoder;(System.Guid);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;Encoder;false;get_Guid;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Byte);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Byte,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Byte[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int16);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int16[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int32,System.Drawing.Imaging.EncoderParameterValueType,System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int32,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int32,System.Int32,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int32[],System.Int32[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int32[],System.Int32[],System.Int32[],System.Int32[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int64);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int64,System.Int64);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int64[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int64[],System.Int64[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;EncoderParameter;(System.Drawing.Imaging.Encoder,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;get_Encoder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;EncoderParameter;false;set_Encoder;(System.Drawing.Imaging.Encoder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;EncoderParameters;false;get_Param;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;EncoderParameters;false;set_Param;(System.Drawing.Imaging.EncoderParameter[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;FrameDimension;false;FrameDimension;(System.Guid);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;FrameDimension;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;FrameDimension;false;get_Guid;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;get_Clsid;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;get_CodecName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;get_DllName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;get_FilenameExtension;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;get_FormatDescription;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;get_FormatID;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;get_MimeType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;get_SignatureMasks;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;get_SignaturePatterns;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;set_Clsid;(System.Guid);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;set_CodecName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;set_DllName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;set_FilenameExtension;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;set_FormatDescription;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;set_FormatID;(System.Guid);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;set_MimeType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;set_SignatureMasks;(System.Byte[][]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ImageCodecInfo;false;set_SignaturePatterns;(System.Byte[][]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ImageFormat;false;ImageFormat;(System.Guid);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Imaging;ImageFormat;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;ImageFormat;false;get_Guid;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Imaging;Metafile;false;GetHenhmetafile;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;InvalidPrinterException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Drawing.Printing;InvalidPrinterException;false;InvalidPrinterException;(System.Drawing.Printing.PrinterSettings);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;MarginsConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Drawing.Printing;MarginsConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Drawing.Printing;PageSettings;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PageSettings;false;PageSettings;(System.Drawing.Printing.PrinterSettings);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PageSettings;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PageSettings;false;get_Margins;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PageSettings;false;get_PaperSize;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PageSettings;false;get_PaperSource;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PageSettings;false;get_PrintableArea;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PageSettings;false;get_PrinterResolution;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PageSettings;false;get_PrinterSettings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PageSettings;false;set_Margins;(System.Drawing.Printing.Margins);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PageSettings;false;set_PaperSize;(System.Drawing.Printing.PaperSize);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PageSettings;false;set_PaperSource;(System.Drawing.Printing.PaperSource);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PageSettings;false;set_PrinterResolution;(System.Drawing.Printing.PrinterResolution);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PageSettings;false;set_PrinterSettings;(System.Drawing.Printing.PrinterSettings);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PaperSize;false;PaperSize;(System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PaperSize;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PaperSize;false;get_PaperName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PaperSize;false;set_PaperName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PaperSource;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PaperSource;false;get_SourceName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PaperSource;false;set_SourceName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PreviewPageInfo;false;PreviewPageInfo;(System.Drawing.Image,System.Drawing.Size);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PreviewPageInfo;false;PreviewPageInfo;(System.Drawing.Image,System.Drawing.Size);;Argument[1];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PreviewPageInfo;false;get_Image;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PreviewPageInfo;false;get_PhysicalSize;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PreviewPrintController;false;GetPreviewPageInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrintDocument;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrintDocument;false;get_DefaultPageSettings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrintDocument;false;get_DocumentName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrintDocument;false;get_PrintController;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrintDocument;false;get_PrinterSettings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrintDocument;false;set_DefaultPageSettings;(System.Drawing.Printing.PageSettings);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrintDocument;false;set_DocumentName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrintDocument;false;set_PrintController;(System.Drawing.Printing.PrintController);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrintDocument;false;set_PrinterSettings;(System.Drawing.Printing.PrinterSettings);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrintPageEventArgs;false;PrintPageEventArgs;(System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.Printing.PageSettings);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrintPageEventArgs;false;PrintPageEventArgs;(System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.Printing.PageSettings);;Argument[1];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrintPageEventArgs;false;PrintPageEventArgs;(System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.Printing.PageSettings);;Argument[2];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrintPageEventArgs;false;PrintPageEventArgs;(System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.Printing.PageSettings);;Argument[3];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrintPageEventArgs;false;get_Graphics;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrintPageEventArgs;false;get_MarginBounds;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrintPageEventArgs;false;get_PageBounds;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrintPageEventArgs;false;get_PageSettings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings+PaperSizeCollection;false;Add;(System.Drawing.Printing.PaperSize);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrinterSettings+PaperSizeCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings+PaperSizeCollection;false;PaperSizeCollection;(System.Drawing.Printing.PaperSize[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrinterSettings+PaperSizeCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings+PaperSizeCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Drawing.Printing;PrinterSettings+PaperSourceCollection;false;Add;(System.Drawing.Printing.PaperSource);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrinterSettings+PaperSourceCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings+PaperSourceCollection;false;PaperSourceCollection;(System.Drawing.Printing.PaperSource[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrinterSettings+PaperSourceCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings+PaperSourceCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;false;Add;(System.Drawing.Printing.PrinterResolution);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;false;PrinterResolutionCollection;(System.Drawing.Printing.PrinterResolution[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Drawing.Printing;PrinterSettings+StringCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrinterSettings+StringCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings+StringCollection;false;StringCollection;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrinterSettings+StringCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings+StringCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Drawing.Printing;PrinterSettings;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings;false;get_DefaultPageSettings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings;false;get_PaperSizes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings;false;get_PaperSources;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings;false;get_PrintFileName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings;false;get_PrinterName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings;false;get_PrinterResolutions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;PrinterSettings;false;set_PrintFileName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;PrinterSettings;false;set_PrinterName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;QueryPageSettingsEventArgs;false;QueryPageSettingsEventArgs;(System.Drawing.Printing.PageSettings);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;QueryPageSettingsEventArgs;false;get_PageSettings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing.Printing;QueryPageSettingsEventArgs;false;set_PageSettings;(System.Drawing.Printing.PageSettings);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing.Printing;StandardPrintController;false;OnStartPage;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintPageEventArgs);;Argument[1];ReturnValue;generated:taint", + "System.Drawing;Bitmap;false;LockBits;(System.Drawing.Rectangle,System.Drawing.Imaging.ImageLockMode,System.Drawing.Imaging.PixelFormat,System.Drawing.Imaging.BitmapData);;Argument[3];ReturnValue;generated:taint", + "System.Drawing;Brush;false;SetNativeBrush;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing;BufferedGraphics;false;get_Graphics;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;BufferedGraphicsContext;false;Allocate;(System.Drawing.Graphics,System.Drawing.Rectangle);;Argument[0];ReturnValue;generated:taint", + "System.Drawing;BufferedGraphicsContext;false;Allocate;(System.Drawing.Graphics,System.Drawing.Rectangle);;Argument[1];ReturnValue;generated:taint", + "System.Drawing;BufferedGraphicsContext;false;Allocate;(System.IntPtr,System.Drawing.Rectangle);;Argument[0];ReturnValue;generated:taint", + "System.Drawing;BufferedGraphicsContext;false;Allocate;(System.IntPtr,System.Drawing.Rectangle);;Argument[1];ReturnValue;generated:taint", + "System.Drawing;BufferedGraphicsContext;false;get_MaximumBuffer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;BufferedGraphicsContext;false;set_MaximumBuffer;(System.Drawing.Size);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing;Color;false;FromName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Drawing;Color;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;Color;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;ColorConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint", + "System.Drawing;ColorConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Drawing;ColorConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Drawing;ColorTranslator;false;FromHtml;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Drawing;ColorTranslator;false;ToHtml;(System.Drawing.Color);;Argument[0];ReturnValue;generated:taint", + "System.Drawing;Font;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;Font;false;Font;(System.Drawing.Font,System.Drawing.FontStyle);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing;Font;false;Font;(System.Drawing.FontFamily,System.Single,System.Drawing.FontStyle,System.Drawing.GraphicsUnit,System.Byte,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing;Font;false;Font;(System.String,System.Single,System.Drawing.FontStyle,System.Drawing.GraphicsUnit,System.Byte,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing;Font;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Drawing;Font;false;ToHfont;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;Font;false;get_FontFamily;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;Font;false;get_OriginalFontName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;Font;false;get_SystemFontName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;FontConverter+FontNameConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint", + "System.Drawing;FontConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Drawing;Graphics;false;FromImage;(System.Drawing.Image);;Argument[0];ReturnValue;generated:taint", + "System.Drawing;Graphics;false;GetHdc;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;Icon;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;Icon;false;FromHandle;(System.IntPtr);;Argument[0];ReturnValue;generated:taint", + "System.Drawing;Icon;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Drawing;Icon;false;Icon;(System.Drawing.Icon,System.Drawing.Size);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing;Icon;false;Icon;(System.Drawing.Icon,System.Drawing.Size);;Argument[1];Argument[Qualifier];generated:taint", + "System.Drawing;Icon;false;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;Icon;false;get_Size;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;Image;false;get_Tag;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;Image;false;set_Tag;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing;ImageFormatConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Drawing;Pen;false;Pen;(System.Drawing.Color,System.Single);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing;Pen;false;get_Color;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;Pen;false;get_CustomEndCap;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;Pen;false;set_Color;(System.Drawing.Color);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing;PointConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Drawing;PointConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Drawing;Rectangle;false;Inflate;(System.Drawing.Rectangle,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Drawing;RectangleConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Drawing;RectangleConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Drawing;RectangleF;false;Inflate;(System.Drawing.RectangleF,System.Single,System.Single);;Argument[0];ReturnValue;generated:taint", + "System.Drawing;SizeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Drawing;SizeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Drawing;SizeFConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Drawing;SizeFConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Drawing;SolidBrush;false;SolidBrush;(System.Drawing.Color);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing;SolidBrush;false;get_Color;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;SolidBrush;false;set_Color;(System.Drawing.Color);;Argument[0];Argument[Qualifier];generated:taint", + "System.Drawing;ToolboxBitmapAttribute;false;GetImage;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;ToolboxBitmapAttribute;false;GetImage;(System.Object,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;ToolboxBitmapAttribute;false;GetImage;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;ToolboxBitmapAttribute;false;GetImage;(System.Type,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Drawing;ToolboxBitmapAttribute;false;GetImage;(System.Type,System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Dynamic;BindingRestrictions;false;GetExpressionRestriction;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Dynamic;BindingRestrictions;false;GetInstanceRestriction;(System.Linq.Expressions.Expression,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Dynamic;BindingRestrictions;false;GetInstanceRestriction;(System.Linq.Expressions.Expression,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.Dynamic;BindingRestrictions;false;GetTypeRestriction;(System.Linq.Expressions.Expression,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Dynamic;BindingRestrictions;false;GetTypeRestriction;(System.Linq.Expressions.Expression,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Dynamic;BindingRestrictions;false;Merge;(System.Dynamic.BindingRestrictions);;Argument[Qualifier];ReturnValue;generated:value", + "System.Dynamic;BindingRestrictions;false;ToExpression;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Dynamic;DynamicMetaObject;false;Create;(System.Object,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Dynamic;DynamicMetaObject;false;DynamicMetaObject;(System.Linq.Expressions.Expression,System.Dynamic.BindingRestrictions,System.Object);;Argument[2];Argument[Qualifier];generated:taint", + "System.Dynamic;DynamicMetaObject;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Dynamic;ExpandoObject;false;TryGetValue;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnReader;false;AsnReader;(System.ReadOnlyMemory,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.AsnReaderOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Formats.Asn1;AsnReader;false;AsnReader;(System.ReadOnlyMemory,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.AsnReaderOptions);;Argument[2];Argument[Qualifier];generated:taint", + "System.Formats.Asn1;AsnReader;false;PeekContentBytes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnReader;false;PeekEncodedValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnReader;false;ReadEncodedValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnReader;false;ReadEnumeratedBytes;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnReader;false;ReadIntegerBytes;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnReader;false;ReadSequence;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnReader;false;ReadSetOf;(System.Boolean,System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnReader;false;ReadSetOf;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnReader;false;TryReadPrimitiveBitString;(System.Int32,System.ReadOnlyMemory,System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnReader;false;TryReadPrimitiveCharacterStringBytes;(System.Formats.Asn1.Asn1Tag,System.ReadOnlyMemory);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnReader;false;TryReadPrimitiveOctetString;(System.ReadOnlyMemory,System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnWriter;false;PushOctetString;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnWriter;false;PushSequence;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Asn1;AsnWriter;false;PushSetOf;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Cbor;CborReader;false;CborReader;(System.ReadOnlyMemory,System.Formats.Cbor.CborConformanceMode,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Formats.Cbor;CborReader;false;ReadDefiniteLengthByteString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Cbor;CborReader;false;ReadDefiniteLengthTextStringBytes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Formats.Cbor;CborReader;false;ReadEncodedValue;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;Calendar;false;ReadOnly;(System.Globalization.Calendar);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;CompareInfo;false;GetSortKey;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;CompareInfo;false;GetSortKey;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CompareInfo;false;GetSortKey;(System.String,System.Globalization.CompareOptions);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;CompareInfo;false;GetSortKey;(System.String,System.Globalization.CompareOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CompareInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CompareInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CompareInfo;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;CultureInfo;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;CultureInfo;false;GetConsoleFallbackUICulture;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;GetCultureInfo;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;GetCultureInfo;(System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;GetCultureInfo;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;GetCultureInfo;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;GetCultureInfoByIetfLanguageTag;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;GetFormat;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;ReadOnly;(System.Globalization.CultureInfo);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;get_Calendar;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;get_DateTimeFormat;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;get_EnglishName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;get_NativeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;get_NumberFormat;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;get_TextInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureInfo;false;set_DateTimeFormat;(System.Globalization.DateTimeFormatInfo);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;CultureInfo;false;set_NumberFormat;(System.Globalization.NumberFormatInfo);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;CultureNotFoundException;false;CultureNotFoundException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;CultureNotFoundException;false;CultureNotFoundException;(System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint", + "System.Globalization;CultureNotFoundException;false;CultureNotFoundException;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Globalization;CultureNotFoundException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Globalization;CultureNotFoundException;false;get_InvalidCultureId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureNotFoundException;false;get_InvalidCultureName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;CultureNotFoundException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;GetAbbreviatedDayName;(System.DayOfWeek);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;GetAbbreviatedEraName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;GetAbbreviatedMonthName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;GetAllDateTimePatterns;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;GetDayName;(System.DayOfWeek);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;GetEraName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;GetFormat;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;GetInstance;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;GetMonthName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;GetShortestDayName;(System.DayOfWeek);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;ReadOnly;(System.Globalization.DateTimeFormatInfo);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;SetAllDateTimePatterns;(System.String[],System.Char);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;get_AMDesignator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;get_Calendar;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;get_DateSeparator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;get_MonthDayPattern;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;get_PMDesignator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;get_TimeSeparator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_AMDesignator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_AbbreviatedDayNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_AbbreviatedMonthGenitiveNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_AbbreviatedMonthNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_Calendar;(System.Globalization.Calendar);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_DateSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_DayNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_FullDateTimePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_LongDatePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_LongTimePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_MonthDayPattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_MonthGenitiveNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_MonthNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_PMDesignator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_ShortDatePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_ShortTimePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_ShortestDayNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_TimeSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DateTimeFormatInfo;false;set_YearMonthPattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DaylightTime;false;DaylightTime;(System.DateTime,System.DateTime,System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;DaylightTime;false;DaylightTime;(System.DateTime,System.DateTime,System.TimeSpan);;Argument[1];Argument[Qualifier];generated:taint", + "System.Globalization;DaylightTime;false;DaylightTime;(System.DateTime,System.DateTime,System.TimeSpan);;Argument[2];Argument[Qualifier];generated:taint", + "System.Globalization;DaylightTime;false;get_Delta;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DaylightTime;false;get_End;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;DaylightTime;false;get_Start;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;GlobalizationExtensions;false;GetStringComparer;(System.Globalization.CompareInfo,System.Globalization.CompareOptions);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;IdnMapping;false;GetAscii;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;IdnMapping;false;GetAscii;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;IdnMapping;false;GetAscii;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;IdnMapping;false;GetUnicode;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;IdnMapping;false;GetUnicode;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;IdnMapping;false;GetUnicode;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;GetFormat;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;GetInstance;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;ReadOnly;(System.Globalization.NumberFormatInfo);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_CurrencyDecimalSeparator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_CurrencyGroupSeparator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_CurrencySymbol;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_NaNSymbol;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_NegativeInfinitySymbol;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_NegativeSign;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_NumberDecimalSeparator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_NumberGroupSeparator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_PerMilleSymbol;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_PercentDecimalSeparator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_PercentGroupSeparator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_PercentSymbol;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_PositiveInfinitySymbol;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;get_PositiveSign;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;NumberFormatInfo;false;set_CurrencyDecimalSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_CurrencyGroupSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_CurrencySymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_NaNSymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_NativeDigits;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_NegativeInfinitySymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_NegativeSign;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_NumberDecimalSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_NumberGroupSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_PerMilleSymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_PercentDecimalSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_PercentGroupSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_PercentSymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_PositiveInfinitySymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;NumberFormatInfo;false;set_PositiveSign;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;RegionInfo;false;RegionInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;RegionInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;RegionInfo;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;RegionInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;SortKey;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;SortKey;false;get_OriginalString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;SortVersion;false;SortVersion;(System.Int32,System.Guid);;Argument[1];Argument[Qualifier];generated:taint", + "System.Globalization;SortVersion;false;get_SortId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;StringInfo;false;GetNextTextElement;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;StringInfo;false;GetNextTextElement;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;StringInfo;false;GetTextElementEnumerator;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;StringInfo;false;GetTextElementEnumerator;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;StringInfo;false;StringInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;StringInfo;false;SubstringByTextElements;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;StringInfo;false;SubstringByTextElements;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;StringInfo;false;get_String;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;StringInfo;false;set_String;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Globalization;TextElementEnumerator;false;GetTextElement;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;TextElementEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;TextInfo;false;ReadOnly;(System.Globalization.TextInfo);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;TextInfo;false;ToLower;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;TextInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;TextInfo;false;ToTitleCase;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;TextInfo;false;ToUpper;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Globalization;TextInfo;false;get_CultureName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Globalization;TextInfo;false;set_ListSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Compression;BrotliStream;false;BrotliStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Compression;BrotliStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO.Compression;BrotliStream;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;DeflateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO.Compression;DeflateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;DeflateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;DeflateStream;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;GZipStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO.Compression;GZipStream;false;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionLevel,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Compression;GZipStream;false;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Compression;GZipStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;GZipStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;GZipStream;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;ZLibException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.IO.Compression;ZLibException;false;ZLibException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Compression;ZLibException;false;ZLibException;(System.String,System.String,System.Int32,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO.Compression;ZLibException;false;ZLibException;(System.String,System.String,System.Int32,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.IO.Compression;ZLibStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO.Compression;ZLibStream;false;ZLibStream;(System.IO.Stream,System.IO.Compression.CompressionLevel,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Compression;ZLibStream;false;ZLibStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Compression;ZLibStream;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;ZipArchive;false;CreateEntry;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO.Compression;ZipArchive;false;CreateEntry;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;ZipArchive;false;CreateEntry;(System.String,System.IO.Compression.CompressionLevel);;Argument[0];ReturnValue;generated:taint", + "System.IO.Compression;ZipArchive;false;CreateEntry;(System.String,System.IO.Compression.CompressionLevel);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;ZipArchive;false;ZipArchive;(System.IO.Stream,System.IO.Compression.ZipArchiveMode,System.Boolean,System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Compression;ZipArchive;false;ZipArchive;(System.IO.Stream,System.IO.Compression.ZipArchiveMode,System.Boolean,System.Text.Encoding);;Argument[3];Argument[Qualifier];generated:taint", + "System.IO.Compression;ZipArchive;false;get_Entries;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;ZipArchiveEntry;false;Open;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;ZipArchiveEntry;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;ZipArchiveEntry;false;get_Archive;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;ZipArchiveEntry;false;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;ZipArchiveEntry;false;get_LastWriteTime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;ZipArchiveEntry;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Compression;ZipArchiveEntry;false;set_FullName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Compression;ZipArchiveEntry;false;set_LastWriteTime;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Compression;ZipFile;false;Open;(System.String,System.IO.Compression.ZipArchiveMode,System.Text.Encoding);;Argument[2];ReturnValue;generated:taint", + "System.IO.Compression;ZipFileExtensions;false;CreateEntryFromFile;(System.IO.Compression.ZipArchive,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO.Compression;ZipFileExtensions;false;CreateEntryFromFile;(System.IO.Compression.ZipArchive,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System.IO.Compression;ZipFileExtensions;false;CreateEntryFromFile;(System.IO.Compression.ZipArchive,System.String,System.String,System.IO.Compression.CompressionLevel);;Argument[0];ReturnValue;generated:taint", + "System.IO.Compression;ZipFileExtensions;false;CreateEntryFromFile;(System.IO.Compression.ZipArchive,System.String,System.String,System.IO.Compression.CompressionLevel);;Argument[2];ReturnValue;generated:taint", + "System.IO.Enumeration;FileSystemEntry;false;ToFileSystemInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Enumeration;FileSystemEntry;false;ToSpecifiedFullPath;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Enumeration;FileSystemEntry;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Enumeration;FileSystemEnumerator<>;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Enumeration;FileSystemName;false;TranslateWin32Expression;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO.IsolatedStorage;IsolatedStorage;false;get_ApplicationIdentity;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.IsolatedStorage;IsolatedStorage;false;get_AssemblyIdentity;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.IsolatedStorage;IsolatedStorage;false;get_DomainIdentity;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.MemoryMappedFiles;MemoryMappedFile;false;CreateFromFile;(System.IO.FileStream,System.String,System.Int64,System.IO.MemoryMappedFiles.MemoryMappedFileAccess,System.IO.HandleInheritability,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.IO.MemoryMappedFiles;MemoryMappedFile;false;get_SafeMemoryMappedFileHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.MemoryMappedFiles;MemoryMappedViewAccessor;false;get_SafeMemoryMappedViewHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.MemoryMappedFiles;MemoryMappedViewStream;false;get_SafeMemoryMappedViewHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackUriHelper;false;Create;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;PackUriHelper;false;Create;(System.Uri,System.Uri);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;PackUriHelper;false;Create;(System.Uri,System.Uri,System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;PackUriHelper;false;Create;(System.Uri,System.Uri,System.String);;Argument[2];ReturnValue;generated:taint", + "System.IO.Packaging;PackUriHelper;false;GetNormalizedPartUri;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;PackUriHelper;false;GetPackageUri;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;PackUriHelper;false;GetPartUri;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;PackUriHelper;false;GetRelativeUri;(System.Uri,System.Uri);;Argument[1];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;CreatePart;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;CreatePart;(System.Uri,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;CreatePart;(System.Uri,System.String,System.IO.Packaging.CompressionOption);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;CreatePart;(System.Uri,System.String,System.IO.Packaging.CompressionOption);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String);;Argument[2];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String,System.String);;Argument[3];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;GetPart;(System.Uri);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;GetParts;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;GetRelationships;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;GetRelationshipsByType;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;GetRelationshipsByType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;Open;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;Open;(System.IO.Stream,System.IO.FileMode);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;Open;(System.IO.Stream,System.IO.FileMode,System.IO.FileAccess);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;Package;false;get_PackageProperties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String);;Argument[2];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String,System.String);;Argument[3];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;CreateRelationship;(System.Uri,System.IO.Packaging.TargetMode,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;GetRelationships;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;GetRelationshipsByType;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;GetRelationshipsByType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;GetStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;GetStream;(System.IO.FileMode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;GetStream;(System.IO.FileMode,System.IO.FileAccess);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;PackagePart;(System.IO.Packaging.Package,System.Uri,System.String,System.IO.Packaging.CompressionOption);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Packaging;PackagePart;false;PackagePart;(System.IO.Packaging.Package,System.Uri,System.String,System.IO.Packaging.CompressionOption);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO.Packaging;PackagePart;false;PackagePart;(System.IO.Packaging.Package,System.Uri,System.String,System.IO.Packaging.CompressionOption);;Argument[2];Argument[Qualifier];generated:taint", + "System.IO.Packaging;PackagePart;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;get_Package;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackagePart;false;get_Uri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackageRelationship;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackageRelationship;false;get_Package;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackageRelationship;false;get_RelationshipType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackageRelationship;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackageRelationship;false;get_TargetUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackageRelationshipSelector;false;PackageRelationshipSelector;(System.Uri,System.IO.Packaging.PackageRelationshipSelectorType,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Packaging;PackageRelationshipSelector;false;PackageRelationshipSelector;(System.Uri,System.IO.Packaging.PackageRelationshipSelectorType,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.IO.Packaging;PackageRelationshipSelector;false;Select;(System.IO.Packaging.Package);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;PackageRelationshipSelector;false;Select;(System.IO.Packaging.Package);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackageRelationshipSelector;false;get_SelectionCriteria;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;PackageRelationshipSelector;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;ZipPackage;false;CreatePartCore;(System.Uri,System.String,System.IO.Packaging.CompressionOption);;Argument[0];ReturnValue;generated:taint", + "System.IO.Packaging;ZipPackage;false;CreatePartCore;(System.Uri,System.String,System.IO.Packaging.CompressionOption);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Packaging;ZipPackagePart;false;GetStreamCore;(System.IO.FileMode,System.IO.FileAccess);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Pipelines;Pipe;false;Pipe;(System.IO.Pipelines.PipeOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Pipelines;Pipe;false;get_Reader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Pipelines;Pipe;false;get_Writer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Pipelines;PipeReader;false;Create;(System.Buffers.ReadOnlySequence);;Argument[0];ReturnValue;generated:taint", + "System.IO.Pipelines;PipeReader;false;Create;(System.IO.Stream,System.IO.Pipelines.StreamPipeReaderOptions);;Argument[1];ReturnValue;generated:taint", + "System.IO.Pipelines;PipeReader;false;ReadAtLeastAsync;(System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Pipelines;PipeReader;true;AsStream;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Pipelines;PipeReader;true;CopyToAsync;(System.IO.Pipelines.PipeWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO.Pipelines;PipeReader;true;CopyToAsync;(System.IO.Stream,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO.Pipelines;PipeWriter;true;AsStream;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Pipelines;PipeWriter;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Pipelines;ReadResult;false;ReadResult;(System.Buffers.ReadOnlySequence,System.Boolean,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Pipelines;ReadResult;false;get_Buffer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Pipelines;StreamPipeExtensions;false;CopyToAsync;(System.IO.Stream,System.IO.Pipelines.PipeWriter,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.IO.Pipes;AnonymousPipeClientStream;false;AnonymousPipeClientStream;(System.IO.Pipes.PipeDirection,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO.Pipes;AnonymousPipeServerStream;false;AnonymousPipeServerStream;(System.IO.Pipes.PipeDirection,Microsoft.Win32.SafeHandles.SafePipeHandle,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO.Pipes;AnonymousPipeServerStream;false;AnonymousPipeServerStream;(System.IO.Pipes.PipeDirection,Microsoft.Win32.SafeHandles.SafePipeHandle,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[2];Argument[Qualifier];generated:taint", + "System.IO.Pipes;AnonymousPipeServerStream;false;get_ClientSafePipeHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Pipes;NamedPipeClientStream;false;ConnectAsync;(System.Int32,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO.Pipes;NamedPipeClientStream;false;ConnectAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO.Pipes;NamedPipeClientStream;false;NamedPipeClientStream;(System.IO.Pipes.PipeDirection,System.Boolean,System.Boolean,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[3];Argument[Qualifier];generated:taint", + "System.IO.Pipes;NamedPipeClientStream;false;NamedPipeClientStream;(System.String,System.String,System.IO.Pipes.PipeDirection,System.IO.Pipes.PipeOptions,System.Security.Principal.TokenImpersonationLevel,System.IO.HandleInheritability);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO.Pipes;NamedPipeServerStream;false;NamedPipeServerStream;(System.IO.Pipes.PipeDirection,System.Boolean,System.Boolean,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[3];Argument[Qualifier];generated:taint", + "System.IO.Pipes;NamedPipeServerStream;false;WaitForConnectionAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO.Pipes;PipeStream;false;InitializeHandle;(Microsoft.Win32.SafeHandles.SafePipeHandle,System.Boolean,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Pipes;PipeStream;false;get_SafePipeHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Ports;SerialPort;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.IO.Ports;SerialPort;false;ReadExisting;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Ports;SerialPort;false;ReadLine;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Ports;SerialPort;false;ReadTo;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Ports;SerialPort;false;SerialPort;(System.String,System.Int32,System.IO.Ports.Parity,System.Int32,System.IO.Ports.StopBits);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Ports;SerialPort;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.IO.Ports;SerialPort;false;Write;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.IO.Ports;SerialPort;false;Write;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Ports;SerialPort;false;WriteLine;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Ports;SerialPort;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Ports;SerialPort;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Ports;SerialPort;false;get_NewLine;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Ports;SerialPort;false;get_PortName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO.Ports;SerialPort;false;set_Encoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Ports;SerialPort;false;set_NewLine;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO.Ports;SerialPort;false;set_PortName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;BinaryReader;false;BinaryReader;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;BinaryReader;false;BinaryReader;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;BinaryReader;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.IO;BinaryReader;false;ReadBytes;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;BinaryReader;false;ReadString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;BinaryReader;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;BinaryWriter;false;BinaryWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;BinaryWriter;false;BinaryWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;BinaryWriter;false;DisposeAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;BinaryWriter;false;Write;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.IO;BinaryWriter;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.IO;BinaryWriter;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;BufferedStream;false;get_UnderlyingStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;Directory;false;CreateDirectory;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;Directory;false;CreateSymbolicLink;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;Directory;false;GetParent;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;CreateSubdirectory;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;CreateSubdirectory;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;DirectoryInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;DirectoryInfo;false;EnumerateDirectories;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateDirectories;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateDirectories;(System.String,System.IO.EnumerationOptions);;Argument[1];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateDirectories;(System.String,System.IO.EnumerationOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateDirectories;(System.String,System.IO.SearchOption);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;(System.String,System.IO.EnumerationOptions);;Argument[1];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;(System.String,System.IO.EnumerationOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;(System.String,System.IO.SearchOption);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateFiles;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateFiles;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateFiles;(System.String,System.IO.EnumerationOptions);;Argument[1];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateFiles;(System.String,System.IO.EnumerationOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;EnumerateFiles;(System.String,System.IO.SearchOption);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DirectoryInfo;false;MoveTo;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;DirectoryInfo;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DriveInfo;false;DriveInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;DriveInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DriveInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DriveInfo;false;get_RootDirectory;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;DriveInfo;false;get_VolumeLabel;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;ErrorEventArgs;false;ErrorEventArgs;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;ErrorEventArgs;false;GetException;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;File;false;AppendAllLinesAsync;(System.String,System.Collections.Generic.IEnumerable,System.Text.Encoding,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.IO;File;false;AppendAllLinesAsync;(System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.IO;File;false;AppendAllTextAsync;(System.String,System.String,System.Text.Encoding,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.IO;File;false;AppendAllTextAsync;(System.String,System.String,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.IO;File;false;CreateSymbolicLink;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;File;false;OpenHandle;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.IO.FileOptions,System.Int64);;Argument[0];ReturnValue;generated:taint", + "System.IO;File;false;ReadLines;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;File;false;ReadLines;(System.String,System.Text.Encoding);;Argument[0];ReturnValue;generated:taint", + "System.IO;File;false;ReadLines;(System.String,System.Text.Encoding);;Argument[1];ReturnValue;generated:taint", + "System.IO;File;false;WriteAllBytesAsync;(System.String,System.Byte[],System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.IO;File;false;WriteAllLinesAsync;(System.String,System.Collections.Generic.IEnumerable,System.Text.Encoding,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.IO;File;false;WriteAllLinesAsync;(System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.IO;File;false;WriteAllTextAsync;(System.String,System.String,System.Text.Encoding,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.IO;File;false;WriteAllTextAsync;(System.String,System.String,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.IO;FileFormatException;false;FileFormatException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;FileFormatException;false;FileFormatException;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;FileFormatException;false;FileFormatException;(System.Uri,System.Exception);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;FileFormatException;false;FileFormatException;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;FileFormatException;false;FileFormatException;(System.Uri,System.String,System.Exception);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;FileFormatException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.IO;FileFormatException;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileInfo;false;CopyTo;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;FileInfo;false;CopyTo;(System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.IO;FileInfo;false;MoveTo;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;FileInfo;false;MoveTo;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;FileInfo;false;get_Directory;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileInfo;false;get_DirectoryName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileLoadException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.IO;FileLoadException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileNotFoundException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.IO;FileNotFoundException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileNotFoundException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileStream;false;get_SafeFileHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileSystemEventArgs;false;FileSystemEventArgs;(System.IO.WatcherChangeTypes,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;FileSystemEventArgs;false;FileSystemEventArgs;(System.IO.WatcherChangeTypes,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.IO;FileSystemEventArgs;false;get_FullPath;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileSystemEventArgs;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileSystemInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileSystemInfo;false;get_Extension;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileSystemInfo;false;get_LinkTarget;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileSystemInfo;true;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileSystemInfo;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileSystemWatcher;false;FileSystemWatcher;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;FileSystemWatcher;false;FileSystemWatcher;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;FileSystemWatcher;false;FileSystemWatcher;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;FileSystemWatcher;false;get_Filter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileSystemWatcher;false;get_Filters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileSystemWatcher;false;get_Path;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileSystemWatcher;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;FileSystemWatcher;false;set_Filter;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;FileSystemWatcher;false;set_Path;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;FileSystemWatcher;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;MemoryStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO;MemoryStream;false;GetBuffer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;MemoryStream;false;TryGetBuffer;(System.ArraySegment);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;MemoryStream;false;WriteTo;(System.IO.Stream);;Argument[Qualifier];Argument[0];generated:taint", + "System.IO;Path;false;ChangeExtension;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[1];ReturnValue;generated:taint", + "System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[1];ReturnValue;generated:taint", + "System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[2];ReturnValue;generated:taint", + "System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[1];ReturnValue;generated:taint", + "System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[2];ReturnValue;generated:taint", + "System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[3];ReturnValue;generated:taint", + "System.IO;Path;false;TrimEndingDirectorySeparator;(System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System.IO;Path;false;TrimEndingDirectorySeparator;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;RandomAccess;false;ReadAsync;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Collections.Generic.IReadOnlyList>,System.Int64,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO;RandomAccess;false;ReadAsync;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Collections.Generic.IReadOnlyList>,System.Int64,System.Threading.CancellationToken);;Argument[1].Element;ReturnValue;generated:taint", + "System.IO;RandomAccess;false;ReadAsync;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Collections.Generic.IReadOnlyList>,System.Int64,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.IO;RandomAccess;false;ReadAsync;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Memory,System.Int64,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO;RandomAccess;false;ReadAsync;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Memory,System.Int64,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.IO;RandomAccess;false;WriteAsync;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Collections.Generic.IReadOnlyList>,System.Int64,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO;RandomAccess;false;WriteAsync;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Collections.Generic.IReadOnlyList>,System.Int64,System.Threading.CancellationToken);;Argument[1].Element;ReturnValue;generated:taint", + "System.IO;RandomAccess;false;WriteAsync;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Collections.Generic.IReadOnlyList>,System.Int64,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.IO;RandomAccess;false;WriteAsync;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.ReadOnlyMemory,System.Int64,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO;RandomAccess;false;WriteAsync;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.ReadOnlyMemory,System.Int64,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;RandomAccess;false;WriteAsync;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.ReadOnlyMemory,System.Int64,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.IO;RenamedEventArgs;false;RenamedEventArgs;(System.IO.WatcherChangeTypes,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;RenamedEventArgs;false;RenamedEventArgs;(System.IO.WatcherChangeTypes,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.IO;RenamedEventArgs;false;get_OldFullPath;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;RenamedEventArgs;false;get_OldName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;Stream;false;FlushAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;Stream;false;Synchronized;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint", + "System.IO;Stream;true;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;Stream;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamReader;false;StreamReader;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StreamReader;false;StreamReader;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Int32,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;StreamReader;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamReader;false;get_CurrentEncoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;FlushAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;StreamWriter;(System.IO.Stream,System.Text.Encoding,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;StreamWriter;(System.IO.Stream,System.Text.Encoding,System.Int32,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;WriteAsync;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteAsync;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteLine;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;WriteLine;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[3];Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;WriteLine;(System.String,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;WriteLine;(System.String,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.IO;StreamWriter;false;WriteLineAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteLineAsync;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteLineAsync;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;WriteLineAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StreamWriter;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StringWriter;false;GetStringBuilder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StringWriter;false;StringWriter;(System.Text.StringBuilder,System.IFormatProvider);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StringWriter;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;StringWriter;false;Write;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.IO;StringWriter;false;Write;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StringWriter;false;Write;(System.Text.StringBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StringWriter;false;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.IO;StringWriter;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;StringWriter;false;WriteAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StringWriter;false;WriteAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StringWriter;false;WriteAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;StringWriter;false;WriteLine;(System.Text.StringBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StringWriter;false;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.IO;StringWriter;false;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;StringWriter;false;WriteLineAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StringWriter;false;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;StringWriter;false;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;StringWriter;false;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextReader;false;Synchronized;(System.IO.TextReader);;Argument[0];ReturnValue;generated:taint", + "System.IO;TextWriter;false;Synchronized;(System.IO.TextWriter);;Argument[0];ReturnValue;generated:taint", + "System.IO;TextWriter;false;TextWriter;(System.IFormatProvider);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;false;WriteAsync;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.IO;TextWriter;false;WriteAsync;(System.Char[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.IO;TextWriter;false;WriteAsync;(System.Char[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;false;WriteLineAsync;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.IO;TextWriter;false;WriteLineAsync;(System.Char[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.IO;TextWriter;false;WriteLineAsync;(System.Char[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;FlushAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;Write;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;Write;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;Write;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;Write;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object,System.Object);;Argument[3];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;Write;(System.String,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;Write;(System.String,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteAsync;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteAsync;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[3];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.String,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.String,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLine;(System.Text.StringBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;TextWriter;true;WriteLineAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteLineAsync;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteLineAsync;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteLineAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.IO;TextWriter;true;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;get_FormatProvider;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;get_NewLine;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.IO;TextWriter;true;set_NewLine;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;UnmanagedMemoryAccessor;false;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;UnmanagedMemoryAccessor;false;UnmanagedMemoryAccessor;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;UnmanagedMemoryAccessor;false;UnmanagedMemoryAccessor;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;UnmanagedMemoryStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.IO;UnmanagedMemoryStream;false;Initialize;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;UnmanagedMemoryStream;false;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Byte*,System.Int64);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint", + "System.IO;UnmanagedMemoryStream;false;get_PositionPointer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions.Interpreter;LightLambda;false;Run;(System.Object[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;BinaryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint", + "System.Linq.Expressions;BinaryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;BinaryExpression;false;Reduce;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;BinaryExpression;false;Update;(System.Linq.Expressions.Expression,System.Linq.Expressions.LambdaExpression,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;BinaryExpression;false;get_Conversion;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;BinaryExpression;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;BlockExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint", + "System.Linq.Expressions;BlockExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;BlockExpression;false;Update;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;BlockExpression;false;get_Expressions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;BlockExpression;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;BlockExpression;false;get_Variables;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;CatchBlock;false;Update;(System.Linq.Expressions.ParameterExpression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;ConditionalExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint", + "System.Linq.Expressions;ConditionalExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;ConditionalExpression;false;Update;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;ConditionalExpression;false;get_IfFalse;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;ConstantExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;DebugInfoExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;DefaultExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Rewrite;(System.Linq.Expressions.Expression[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpression;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;DynamicExpression;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;DynamicExpressionVisitor;false;VisitDynamic;(System.Linq.Expressions.DynamicExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ElementInit;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ArrayAccess;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ArrayIndex;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Bind;(System.Reflection.MemberInfo,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Bind;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Type,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Block;(System.Type,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Coalesce;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Condition;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Condition;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Field;(System.Linq.Expressions.Expression,System.Reflection.FieldInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Field;(System.Linq.Expressions.Expression,System.Type,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;GetActionType;(System.Type[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;GetFuncType;(System.Type[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;IfThenElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Invoke;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Lambda<>;(System.Linq.Expressions.Expression,System.Boolean,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Lambda<>;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Lambda<>;(System.Linq.Expressions.Expression,System.String,System.Boolean,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Lambda<>;(System.Linq.Expressions.Expression,System.String,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[5];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeIndex;(System.Linq.Expressions.Expression,System.Reflection.PropertyInfo,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MakeMemberAccess;(System.Linq.Expressions.Expression,System.Reflection.MemberInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;New;(System.Reflection.ConstructorInfo,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;New;(System.Reflection.ConstructorInfo,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;New;(System.Reflection.ConstructorInfo,System.Collections.Generic.IEnumerable,System.Reflection.MemberInfo[]);;Argument[1].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;PowerAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;PowerAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;PowerAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Property;(System.Linq.Expressions.Expression,System.Reflection.PropertyInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Property;(System.Linq.Expressions.Expression,System.Reflection.PropertyInfo,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Property;(System.Linq.Expressions.Expression,System.Type,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ReduceAndCheck;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ReduceExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;TryGetActionType;(System.Type[],System.Type);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;false;TryGetFuncType;(System.Type[],System.Type);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;true;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint", + "System.Linq.Expressions;Expression;true;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression;true;Reduce;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;Expression;true;VisitChildren;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint", + "System.Linq.Expressions;Expression;true;VisitChildren;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression<>;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint", + "System.Linq.Expressions;Expression<>;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;Expression<>;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;false;Visit;(System.Collections.ObjectModel.ReadOnlyCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Linq.Expressions;ExpressionVisitor;false;Visit;(System.Collections.ObjectModel.ReadOnlyCollection);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;false;VisitAndConvert<>;(System.Collections.ObjectModel.ReadOnlyCollection,System.String);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Linq.Expressions;ExpressionVisitor;false;VisitAndConvert<>;(System.Collections.ObjectModel.ReadOnlyCollection,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;false;VisitAndConvert<>;(T,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Linq.Expressions;ExpressionVisitor;false;VisitAndConvert<>;(T,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;Visit;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;Visit;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitBinary;(System.Linq.Expressions.BinaryExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitBinary;(System.Linq.Expressions.BinaryExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitBlock;(System.Linq.Expressions.BlockExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitBlock;(System.Linq.Expressions.BlockExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitCatchBlock;(System.Linq.Expressions.CatchBlock);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitConditional;(System.Linq.Expressions.ConditionalExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitConditional;(System.Linq.Expressions.ConditionalExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitConstant;(System.Linq.Expressions.ConstantExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitDebugInfo;(System.Linq.Expressions.DebugInfoExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitDefault;(System.Linq.Expressions.DefaultExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitDynamic;(System.Linq.Expressions.DynamicExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitElementInit;(System.Linq.Expressions.ElementInit);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitExtension;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitExtension;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitGoto;(System.Linq.Expressions.GotoExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitIndex;(System.Linq.Expressions.IndexExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitInvocation;(System.Linq.Expressions.InvocationExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitLabel;(System.Linq.Expressions.LabelExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitLabelTarget;(System.Linq.Expressions.LabelTarget);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitLambda<>;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitLambda<>;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitListInit;(System.Linq.Expressions.ListInitExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitLoop;(System.Linq.Expressions.LoopExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitMember;(System.Linq.Expressions.MemberExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitMemberAssignment;(System.Linq.Expressions.MemberAssignment);;Argument[0];Argument[Qualifier];generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitMemberAssignment;(System.Linq.Expressions.MemberAssignment);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitMemberBinding;(System.Linq.Expressions.MemberBinding);;Argument[0];Argument[Qualifier];generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitMemberBinding;(System.Linq.Expressions.MemberBinding);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitMemberInit;(System.Linq.Expressions.MemberInitExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitMemberListBinding;(System.Linq.Expressions.MemberListBinding);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitMemberMemberBinding;(System.Linq.Expressions.MemberMemberBinding);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitMethodCall;(System.Linq.Expressions.MethodCallExpression);;Argument[0];Argument[Qualifier];generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitMethodCall;(System.Linq.Expressions.MethodCallExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitNew;(System.Linq.Expressions.NewExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitNewArray;(System.Linq.Expressions.NewArrayExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitParameter;(System.Linq.Expressions.ParameterExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitRuntimeVariables;(System.Linq.Expressions.RuntimeVariablesExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitSwitch;(System.Linq.Expressions.SwitchExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitSwitchCase;(System.Linq.Expressions.SwitchCase);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitTry;(System.Linq.Expressions.TryExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitTypeBinary;(System.Linq.Expressions.TypeBinaryExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;ExpressionVisitor;true;VisitUnary;(System.Linq.Expressions.UnaryExpression);;Argument[0];ReturnValue;generated:taint", + "System.Linq.Expressions;GotoExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;GotoExpression;false;Update;(System.Linq.Expressions.LabelTarget,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;IndexExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;IndexExpression;false;GetArgument;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;IndexExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;IndexExpression;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;InvocationExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;InvocationExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;LabelExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;LabelExpression;false;Update;(System.Linq.Expressions.LabelTarget,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;LambdaExpression;false;get_Body;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;LambdaExpression;false;get_Parameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;ListInitExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;ListInitExpression;false;Update;(System.Linq.Expressions.NewExpression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;LoopExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;LoopExpression;false;Update;(System.Linq.Expressions.LabelTarget,System.Linq.Expressions.LabelTarget,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;MemberAssignment;false;Update;(System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;MemberAssignment;false;get_Expression;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;MemberExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint", + "System.Linq.Expressions;MemberExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;MemberExpression;false;Update;(System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;MemberExpression;false;get_Member;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;MemberInitExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;MemberInitExpression;false;Update;(System.Linq.Expressions.NewExpression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;MemberListBinding;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;MemberMemberBinding;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;MethodCallExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint", + "System.Linq.Expressions;MethodCallExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;MethodCallExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;MethodCallExpression;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;MethodCallExpression;false;get_Object;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;NewArrayExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;NewArrayExpression;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;NewExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;NewExpression;false;GetArgument;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;NewExpression;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;NewExpression;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;ParameterExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint", + "System.Linq.Expressions;ParameterExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;RuntimeVariablesExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;RuntimeVariablesExpression;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;SwitchCase;false;Update;(System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;SwitchExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;SwitchExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;TryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;TryExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;TypeBinaryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;TypeBinaryExpression;false;Update;(System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;UnaryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq.Expressions;UnaryExpression;false;Reduce;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq.Expressions;UnaryExpression;false;Update;(System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq;Enumerable;false;Append<>;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue;generated:taint", + "System.Linq;Enumerable;false;ElementAt<>;(System.Collections.Generic.IEnumerable,System.Index);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;Enumerable;false;ElementAtOrDefault<>;(System.Collections.Generic.IEnumerable,System.Index);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;Enumerable;false;FirstOrDefault<>;(System.Collections.Generic.IEnumerable,TSource);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;Enumerable;false;FirstOrDefault<>;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue;generated:taint", + "System.Linq;Enumerable;false;LastOrDefault<>;(System.Collections.Generic.IEnumerable,TSource);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;Enumerable;false;LastOrDefault<>;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue;generated:taint", + "System.Linq;Enumerable;false;Max<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IComparer);;Argument[0].Element;Argument[1];generated:taint", + "System.Linq;Enumerable;false;Max<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;Enumerable;false;Min<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IComparer);;Argument[0].Element;Argument[1];generated:taint", + "System.Linq;Enumerable;false;Min<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;Enumerable;false;Prepend<>;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue;generated:taint", + "System.Linq;Enumerable;false;Repeat<>;(TResult,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Linq;Enumerable;false;SingleOrDefault<>;(System.Collections.Generic.IEnumerable,TSource);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;Enumerable;false;SingleOrDefault<>;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue;generated:taint", + "System.Linq;Enumerable;false;SkipLast<>;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;Enumerable;false;Take<>;(System.Collections.Generic.IEnumerable,System.Range);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;Enumerable;false;TakeLast<>;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;EnumerableExecutor<>;false;EnumerableExecutor;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint", + "System.Linq;EnumerableQuery<>;false;CreateQuery<>;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint", + "System.Linq;EnumerableQuery<>;false;EnumerableQuery;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Linq;EnumerableQuery<>;false;EnumerableQuery;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint", + "System.Linq;EnumerableQuery<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq;EnumerableQuery<>;false;get_Expression;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq;EnumerableQuery<>;false;get_Provider;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Linq;Grouping<,>;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq;ImmutableArrayExtensions;false;ElementAt<>;(System.Collections.Immutable.ImmutableArray,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ImmutableArrayExtensions;false;ElementAtOrDefault<>;(System.Collections.Immutable.ImmutableArray,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ImmutableArrayExtensions;false;First<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ImmutableArrayExtensions;false;FirstOrDefault<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ImmutableArrayExtensions;false;Last<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ImmutableArrayExtensions;false;Single<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;Lookup<,>;false;get_Item;(TKey);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Linq;ParallelEnumerable;false;AsOrdered;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ParallelEnumerable;false;AsOrdered<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ParallelEnumerable;false;AsParallel;(System.Collections.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ParallelEnumerable;false;AsParallel<>;(System.Collections.Concurrent.Partitioner);;Argument[0];ReturnValue;generated:taint", + "System.Linq;ParallelEnumerable;false;AsParallel<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ParallelEnumerable;false;AsSequential<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ParallelEnumerable;false;AsUnordered<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ParallelEnumerable;false;Repeat<>;(TResult,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Linq;ParallelEnumerable;false;WithCancellation<>;(System.Linq.ParallelQuery,System.Threading.CancellationToken);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ParallelEnumerable;false;WithDegreeOfParallelism<>;(System.Linq.ParallelQuery,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ParallelEnumerable;false;WithExecutionMode<>;(System.Linq.ParallelQuery,System.Linq.ParallelExecutionMode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Linq;ParallelEnumerable;false;WithMergeOptions<>;(System.Linq.ParallelQuery,System.Linq.ParallelMergeOptions);;Argument[0].Element;ReturnValue;generated:taint", + "System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.DateTime);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan,System.TimeSpan);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan,System.TimeSpan);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan,System.TimeSpan,System.DateTime);;Argument[3];Argument[Qualifier];generated:taint", + "System.Net.Cache;HttpRequestCachePolicy;false;get_CacheSyncDate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Cache;HttpRequestCachePolicy;false;get_MaxAge;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Cache;HttpRequestCachePolicy;false;get_MaxStale;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Cache;HttpRequestCachePolicy;false;get_MinFresh;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;AuthenticationHeaderValue;false;AuthenticationHeaderValue;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;AuthenticationHeaderValue;false;AuthenticationHeaderValue;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;AuthenticationHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;AuthenticationHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;AuthenticationHeaderValue;false;get_Parameter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;AuthenticationHeaderValue;false;get_Scheme;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;CacheControlHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;CacheControlHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;CacheControlHeaderValue;false;get_MaxAge;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;CacheControlHeaderValue;false;get_MaxStaleLimit;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;CacheControlHeaderValue;false;get_MinFresh;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;CacheControlHeaderValue;false;get_SharedMaxAge;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;CacheControlHeaderValue;false;set_MaxAge;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;CacheControlHeaderValue;false;set_MaxStaleLimit;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;CacheControlHeaderValue;false;set_MinFresh;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;CacheControlHeaderValue;false;set_SharedMaxAge;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;ContentDispositionHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ContentDispositionHeaderValue;false;ContentDispositionHeaderValue;(System.Net.Http.Headers.ContentDispositionHeaderValue);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;ContentDispositionHeaderValue;false;ContentDispositionHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;ContentDispositionHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ContentDispositionHeaderValue;false;get_DispositionType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ContentDispositionHeaderValue;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ContentDispositionHeaderValue;false;get_FileNameStar;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ContentDispositionHeaderValue;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ContentDispositionHeaderValue;false;set_DispositionType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;ContentRangeHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ContentRangeHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ContentRangeHeaderValue;false;get_From;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ContentRangeHeaderValue;false;get_Length;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ContentRangeHeaderValue;false;get_To;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ContentRangeHeaderValue;false;get_Unit;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ContentRangeHeaderValue;false;set_Unit;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;EntityTagHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;EntityTagHeaderValue;false;EntityTagHeaderValue;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;EntityTagHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;EntityTagHeaderValue;false;get_Tag;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HeaderStringValues+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HeaderStringValues;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HeaderStringValues;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpHeaders;false;get_NonValidated;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpHeadersNonValidated+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpHeadersNonValidated;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpHeadersNonValidated;false;TryGetValue;(System.String,System.Net.Http.Headers.HeaderStringValues);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpHeadersNonValidated;false;TryGetValues;(System.String,System.Net.Http.Headers.HeaderStringValues);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpHeadersNonValidated;false;get_Item;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpHeadersNonValidated;false;get_Keys;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpHeadersNonValidated;false;get_Values;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpResponseHeaders;false;get_AcceptRanges;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpResponseHeaders;false;get_ProxyAuthenticate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpResponseHeaders;false;get_Server;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpResponseHeaders;false;get_Vary;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;HttpResponseHeaders;false;get_WwwAuthenticate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;MediaTypeHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;MediaTypeHeaderValue;false;MediaTypeHeaderValue;(System.Net.Http.Headers.MediaTypeHeaderValue);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;MediaTypeHeaderValue;false;MediaTypeHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;MediaTypeHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;MediaTypeHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.MediaTypeHeaderValue);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http.Headers;MediaTypeHeaderValue;false;get_CharSet;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;MediaTypeHeaderValue;false;get_MediaType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;MediaTypeHeaderValue;false;set_MediaType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;MediaTypeWithQualityHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.MediaTypeWithQualityHeaderValue);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http.Headers;NameValueHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;NameValueHeaderValue;false;NameValueHeaderValue;(System.Net.Http.Headers.NameValueHeaderValue);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;NameValueHeaderValue;false;NameValueHeaderValue;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;NameValueHeaderValue;false;NameValueHeaderValue;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;NameValueHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;NameValueHeaderValue;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;NameValueHeaderValue;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;NameValueHeaderValue;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;NameValueWithParametersHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ProductHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ProductHeaderValue;false;ProductHeaderValue;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;ProductHeaderValue;false;ProductHeaderValue;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;ProductHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ProductHeaderValue;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ProductHeaderValue;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ProductInfoHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ProductInfoHeaderValue;false;Parse;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http.Headers;ProductInfoHeaderValue;false;ProductInfoHeaderValue;(System.Net.Http.Headers.ProductHeaderValue);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;ProductInfoHeaderValue;false;ProductInfoHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;ProductInfoHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ProductInfoHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.ProductInfoHeaderValue);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http.Headers;ProductInfoHeaderValue;false;get_Comment;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ProductInfoHeaderValue;false;get_Product;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RangeConditionHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RangeConditionHeaderValue;false;RangeConditionHeaderValue;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;RangeConditionHeaderValue;false;RangeConditionHeaderValue;(System.Net.Http.Headers.EntityTagHeaderValue);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;RangeConditionHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RangeConditionHeaderValue;false;get_Date;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RangeConditionHeaderValue;false;get_EntityTag;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RangeHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RangeHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RangeHeaderValue;false;get_Unit;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RangeHeaderValue;false;set_Unit;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;RangeItemHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RangeItemHeaderValue;false;RangeItemHeaderValue;(System.Nullable,System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;RangeItemHeaderValue;false;RangeItemHeaderValue;(System.Nullable,System.Nullable);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;RangeItemHeaderValue;false;get_From;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RangeItemHeaderValue;false;get_To;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RetryConditionHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RetryConditionHeaderValue;false;RetryConditionHeaderValue;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;RetryConditionHeaderValue;false;RetryConditionHeaderValue;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;RetryConditionHeaderValue;false;get_Date;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;RetryConditionHeaderValue;false;get_Delta;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;StringWithQualityHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;StringWithQualityHeaderValue;false;StringWithQualityHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;StringWithQualityHeaderValue;false;StringWithQualityHeaderValue;(System.String,System.Double);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;StringWithQualityHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;StringWithQualityHeaderValue;false;get_Quality;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;StringWithQualityHeaderValue;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;TransferCodingHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;TransferCodingHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;TransferCodingHeaderValue;false;TransferCodingHeaderValue;(System.Net.Http.Headers.TransferCodingHeaderValue);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;TransferCodingHeaderValue;false;TransferCodingHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;TransferCodingHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.TransferCodingHeaderValue);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http.Headers;TransferCodingHeaderValue;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;TransferCodingWithQualityHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.TransferCodingWithQualityHeaderValue);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http.Headers;ViaHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ViaHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ViaHeaderValue;false;ViaHeaderValue;(System.String,System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;ViaHeaderValue;false;ViaHeaderValue;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;ViaHeaderValue;false;ViaHeaderValue;(System.String,System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;ViaHeaderValue;false;ViaHeaderValue;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;ViaHeaderValue;false;get_Comment;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ViaHeaderValue;false;get_ProtocolName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ViaHeaderValue;false;get_ProtocolVersion;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;ViaHeaderValue;false;get_ReceivedBy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;WarningHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;WarningHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String,System.DateTimeOffset);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String,System.DateTimeOffset);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String,System.DateTimeOffset);;Argument[3];Argument[Qualifier];generated:taint", + "System.Net.Http.Headers;WarningHeaderValue;false;get_Agent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;WarningHeaderValue;false;get_Date;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Headers;WarningHeaderValue;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http.Json;JsonContent;false;Create;(System.Object,System.Type,System.Net.Http.Headers.MediaTypeHeaderValue,System.Text.Json.JsonSerializerOptions);;Argument[3];ReturnValue;generated:taint", + "System.Net.Http.Json;JsonContent;false;Create<>;(T,System.Net.Http.Headers.MediaTypeHeaderValue,System.Text.Json.JsonSerializerOptions);;Argument[2];ReturnValue;generated:taint", + "System.Net.Http;ByteArrayContent;false;ByteArrayContent;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net.Http;ByteArrayContent;false;ByteArrayContent;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net.Http;ByteArrayContent;false;CreateContentReadStream;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;ByteArrayContent;false;CreateContentReadStreamAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;ByteArrayContent;false;SerializeToStream;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;DelegatingHandler;false;DelegatingHandler;(System.Net.Http.HttpMessageHandler);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;DelegatingHandler;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Http;DelegatingHandler;false;get_InnerHandler;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;DelegatingHandler;false;set_InnerHandler;(System.Net.Http.HttpMessageHandler);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;FormUrlEncodedContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http;FormUrlEncodedContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Http;FormUrlEncodedContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;FormUrlEncodedContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpClient;false;Send;(System.Net.Http.HttpRequestMessage);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpClient;false;Send;(System.Net.Http.HttpRequestMessage,System.Net.Http.HttpCompletionOption);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpClient;false;Send;(System.Net.Http.HttpRequestMessage,System.Net.Http.HttpCompletionOption,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpClient;false;Send;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpClient;false;SendAsync;(System.Net.Http.HttpRequestMessage);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpClient;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Net.Http.HttpCompletionOption);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpClient;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Net.Http.HttpCompletionOption,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpClient;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpClient;false;get_BaseAddress;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpClient;false;get_DefaultRequestVersion;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpClient;false;get_Timeout;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpClient;false;set_BaseAddress;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpClient;false;set_DefaultRequestVersion;(System.Version);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpClient;false;set_Timeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpClientHandler;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Http;HttpContent;false;CopyTo;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpContent;false;CopyToAsync;(System.IO.Stream);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpContent;false;CopyToAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpContent;false;CopyToAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpContent;false;CopyToAsync;(System.IO.Stream,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpContent;false;ReadAsStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpContent;false;ReadAsStream;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpContent;false;ReadAsStreamAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpContent;false;ReadAsStreamAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpContent;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpContent;true;CreateContentReadStream;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpContent;true;CreateContentReadStreamAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpContent;true;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http;HttpContent;true;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;HttpContent;true;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpMessageInvoker;false;HttpMessageInvoker;(System.Net.Http.HttpMessageHandler,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpMessageInvoker;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Http;HttpMethod;false;HttpMethod;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpMethod;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpMethod;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpRequestMessage;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpRequestMessage;false;get_Content;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpRequestMessage;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpRequestMessage;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpRequestMessage;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpRequestMessage;false;set_Content;(System.Net.Http.HttpContent);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpRequestMessage;false;set_Method;(System.Net.Http.HttpMethod);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpRequestMessage;false;set_RequestUri;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpRequestMessage;false;set_Version;(System.Version);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpResponseMessage;false;EnsureSuccessStatusCode;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Net.Http;HttpResponseMessage;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpResponseMessage;false;get_ReasonPhrase;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpResponseMessage;false;get_RequestMessage;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpResponseMessage;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;HttpResponseMessage;false;set_Content;(System.Net.Http.HttpContent);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpResponseMessage;false;set_ReasonPhrase;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpResponseMessage;false;set_RequestMessage;(System.Net.Http.HttpRequestMessage);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;HttpResponseMessage;false;set_Version;(System.Version);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;MessageProcessingHandler;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Http;MultipartContent;false;MultipartContent;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Http;MultipartContent;false;SerializeToStream;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;MultipartContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;MultipartContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;MultipartFormDataContent;false;Add;(System.Net.Http.HttpContent,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;MultipartFormDataContent;false;Add;(System.Net.Http.HttpContent,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;MultipartFormDataContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;ReadOnlyMemoryContent;false;CreateContentReadStream;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;ReadOnlyMemoryContent;false;CreateContentReadStreamAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;ReadOnlyMemoryContent;false;ReadOnlyMemoryContent;(System.ReadOnlyMemory);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpConnectionContext;false;get_DnsEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpConnectionContext;false;get_InitialRequestMessage;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_ActivityHeadersPropagator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_ConnectCallback;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_ConnectTimeout;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_CookieContainer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_DefaultProxyCredentials;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_Expect100ContinueTimeout;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_KeepAlivePingDelay;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_KeepAlivePingTimeout;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_PlaintextStreamFilter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_PooledConnectionIdleTimeout;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_PooledConnectionLifetime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_Proxy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_RequestHeaderEncodingSelector;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_ResponseDrainTimeout;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_ResponseHeaderEncodingSelector;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;get_SslOptions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_ActivityHeadersPropagator;(System.Diagnostics.DistributedContextPropagator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_ConnectTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_CookieContainer;(System.Net.CookieContainer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_DefaultProxyCredentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_Expect100ContinueTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_KeepAlivePingDelay;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_KeepAlivePingTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_PooledConnectionIdleTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_PooledConnectionLifetime;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_ResponseDrainTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpHandler;false;set_SslOptions;(System.Net.Security.SslClientAuthenticationOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;SocketsHttpPlaintextStreamFilterContext;false;get_InitialRequestMessage;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpPlaintextStreamFilterContext;false;get_NegotiatedHttpVersion;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;SocketsHttpPlaintextStreamFilterContext;false;get_PlaintextStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;StreamContent;false;SerializeToStream;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Http;StreamContent;false;StreamContent;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;StreamContent;false;StreamContent;(System.IO.Stream,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Http;StringContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Http;StringContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Http;StringContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Http;StringContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;AlternateView;false;CreateAlternateViewFromString;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net.Mail;AlternateView;false;CreateAlternateViewFromString;(System.String,System.Net.Mime.ContentType);;Argument[0];ReturnValue;generated:taint", + "System.Net.Mail;AlternateView;false;CreateAlternateViewFromString;(System.String,System.Net.Mime.ContentType);;Argument[1];ReturnValue;generated:taint", + "System.Net.Mail;AlternateView;false;CreateAlternateViewFromString;(System.String,System.Text.Encoding,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net.Mail;AlternateView;false;get_BaseUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;AlternateViewCollection;false;InsertItem;(System.Int32,System.Net.Mail.AlternateView);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;AlternateViewCollection;false;SetItem;(System.Int32,System.Net.Mail.AlternateView);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;Attachment;false;Attachment;(System.IO.Stream,System.Net.Mime.ContentType);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;Attachment;false;Attachment;(System.IO.Stream,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;Attachment;false;Attachment;(System.IO.Stream,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;Attachment;false;Attachment;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;Attachment;false;Attachment;(System.String,System.Net.Mime.ContentType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;Attachment;false;Attachment;(System.String,System.Net.Mime.ContentType);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;Attachment;false;Attachment;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.Net.Mime.ContentType);;Argument[0];ReturnValue;generated:taint", + "System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.Net.Mime.ContentType);;Argument[1];ReturnValue;generated:taint", + "System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.String,System.Text.Encoding,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.String,System.Text.Encoding,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Net.Mail;Attachment;false;get_ContentDisposition;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;Attachment;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;Attachment;false;get_NameEncoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;Attachment;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;Attachment;false;set_NameEncoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.IO.Stream,System.Net.Mime.ContentType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.IO.Stream,System.Net.Mime.ContentType);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.IO.Stream,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.String,System.Net.Mime.ContentType);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;AttachmentBase;false;get_ContentId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;AttachmentBase;false;get_ContentStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;AttachmentBase;false;set_ContentType;(System.Net.Mime.ContentType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;AttachmentCollection;false;InsertItem;(System.Int32,System.Net.Mail.Attachment);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;AttachmentCollection;false;SetItem;(System.Int32,System.Net.Mail.Attachment);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;LinkedResource;false;CreateLinkedResourceFromString;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net.Mail;LinkedResource;false;CreateLinkedResourceFromString;(System.String,System.Net.Mime.ContentType);;Argument[0];ReturnValue;generated:taint", + "System.Net.Mail;LinkedResource;false;CreateLinkedResourceFromString;(System.String,System.Net.Mime.ContentType);;Argument[1];ReturnValue;generated:taint", + "System.Net.Mail;LinkedResource;false;CreateLinkedResourceFromString;(System.String,System.Text.Encoding,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net.Mail;LinkedResource;false;get_ContentLink;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;LinkedResourceCollection;false;InsertItem;(System.Int32,System.Net.Mail.LinkedResource);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;LinkedResourceCollection;false;SetItem;(System.Int32,System.Net.Mail.LinkedResource);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailAddress;false;MailAddress;(System.String,System.String,System.Text.Encoding);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailAddress;false;MailAddress;(System.String,System.String,System.Text.Encoding);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailAddress;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailAddress;false;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);;Argument[1];ReturnValue;generated:taint", + "System.Net.Mail;MailAddress;false;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);;Argument[1];ReturnValue;generated:taint", + "System.Net.Mail;MailAddress;false;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);;Argument[2];ReturnValue;generated:taint", + "System.Net.Mail;MailAddress;false;get_Address;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailAddress;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailAddress;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailAddress;false;get_User;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailAddressCollection;false;InsertItem;(System.Int32,System.Net.Mail.MailAddress);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailAddressCollection;false;SetItem;(System.Int32,System.Net.Mail.MailAddress);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailAddressCollection;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailMessage;false;MailMessage;(System.Net.Mail.MailAddress,System.Net.Mail.MailAddress);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailMessage;false;MailMessage;(System.String,System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailMessage;false;MailMessage;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailMessage;false;get_Body;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailMessage;false;get_BodyEncoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailMessage;false;get_From;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailMessage;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailMessage;false;get_HeadersEncoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailMessage;false;get_ReplyTo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailMessage;false;get_Sender;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailMessage;false;get_Subject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailMessage;false;get_SubjectEncoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;MailMessage;false;set_Body;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailMessage;false;set_BodyEncoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailMessage;false;set_From;(System.Net.Mail.MailAddress);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailMessage;false;set_HeadersEncoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailMessage;false;set_ReplyTo;(System.Net.Mail.MailAddress);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailMessage;false;set_Sender;(System.Net.Mail.MailAddress);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailMessage;false;set_Subject;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;MailMessage;false;set_SubjectEncoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;Send;(System.Net.Mail.MailMessage);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;Send;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;SendAsync;(System.Net.Mail.MailMessage,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;SendAsync;(System.String,System.String,System.String,System.String,System.Object);;Argument[3];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;SendMailAsync;(System.Net.Mail.MailMessage);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;SendMailAsync;(System.Net.Mail.MailMessage,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;SendMailAsync;(System.Net.Mail.MailMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Mail;SmtpClient;false;SendMailAsync;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;SendMailAsync;(System.String,System.String,System.String,System.String,System.Threading.CancellationToken);;Argument[3];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;SendMailAsync;(System.String,System.String,System.String,System.String,System.Threading.CancellationToken);;Argument[4];ReturnValue;generated:taint", + "System.Net.Mail;SmtpClient;false;SmtpClient;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;SmtpClient;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;SmtpClient;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;SmtpClient;false;get_PickupDirectoryLocation;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;SmtpClient;false;get_TargetName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;SmtpClient;false;set_Credentials;(System.Net.ICredentialsByHost);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;set_Host;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;set_PickupDirectoryLocation;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpClient;false;set_TargetName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Mail;SmtpFailedRecipientException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Mail;SmtpFailedRecipientException;false;SmtpFailedRecipientException;(System.Net.Mail.SmtpStatusCode,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpFailedRecipientException;false;SmtpFailedRecipientException;(System.Net.Mail.SmtpStatusCode,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpFailedRecipientException;false;SmtpFailedRecipientException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpFailedRecipientException;false;SmtpFailedRecipientException;(System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpFailedRecipientException;false;get_FailedRecipient;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mail;SmtpFailedRecipientsException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Mail;SmtpFailedRecipientsException;false;SmtpFailedRecipientsException;(System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpFailedRecipientsException;false;SmtpFailedRecipientsException;(System.String,System.Net.Mail.SmtpFailedRecipientException[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Net.Mail;SmtpFailedRecipientsException;false;get_InnerExceptions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mime;ContentDisposition;false;ContentDisposition;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mime;ContentDisposition;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mime;ContentDisposition;false;get_DispositionType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mime;ContentDisposition;false;set_DispositionType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mime;ContentType;false;ContentType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Mime;ContentType;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mime;ContentType;false;get_Boundary;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mime;ContentType;false;get_CharSet;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mime;ContentType;false;get_MediaType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mime;ContentType;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mime;ContentType;false;get_Parameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Mime;ContentType;false;set_MediaType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.NetworkInformation;GatewayIPAddressInformationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.NetworkInformation;IPAddressInformationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.NetworkInformation;MulticastIPAddressInformationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.NetworkInformation;NetworkInformationPermission;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Net.NetworkInformation;PhysicalAddress;false;PhysicalAddress;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net.NetworkInformation;UnicastIPAddressInformationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Quic;QuicConnection;false;OpenBidirectionalStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Quic;QuicConnection;false;OpenUnidirectionalStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Quic;QuicConnection;false;get_LocalEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Quic;QuicConnection;false;get_NegotiatedApplicationProtocol;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Quic;QuicConnection;false;get_RemoteEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Quic;QuicListener;false;QuicListener;(System.Net.Quic.Implementations.QuicImplementationProvider,System.Net.Quic.QuicListenerOptions);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Quic;QuicListener;false;get_ListenEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;AuthenticatedStream;false;AuthenticatedStream;(System.IO.Stream,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Security;AuthenticatedStream;false;DisposeAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;AuthenticatedStream;false;get_InnerStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsServer;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsServer;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsServerAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;AuthenticateAsServerAsync;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Security;NegotiateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Security;NegotiateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;NegotiateStream;false;get_RemoteIdentity;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;SslApplicationProtocol;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;SslApplicationProtocol;false;get_Protocol;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;SslCertificateTrust;false;CreateForX509Collection;(System.Security.Cryptography.X509Certificates.X509Certificate2Collection,System.Boolean);;Argument[0].Element;ReturnValue;generated:taint", + "System.Net.Security;SslCertificateTrust;false;CreateForX509Store;(System.Security.Cryptography.X509Certificates.X509Store,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Net.Security;SslStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Security;SslStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;SslStream;false;Write;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net.Security;SslStream;false;get_LocalCertificate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;SslStream;false;get_NegotiatedApplicationProtocol;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;SslStream;false;get_RemoteCertificate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;SslStream;false;get_TransportContext;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Security;SslStreamCertificateContext;false;Create;(System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Net.Security;SslStreamCertificateContext;false;Create;(System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection,System.Boolean,System.Net.Security.SslCertificateTrust);;Argument[0];ReturnValue;generated:taint", + "System.Net.Security;SslStreamCertificateContext;false;Create;(System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection,System.Boolean,System.Net.Security.SslCertificateTrust);;Argument[3];ReturnValue;generated:taint", + "System.Net.Sockets;IPPacketInformation;false;get_Address;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;IPv6MulticastOption;false;IPv6MulticastOption;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;IPv6MulticastOption;false;IPv6MulticastOption;(System.Net.IPAddress,System.Int64);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;IPv6MulticastOption;false;get_Group;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;IPv6MulticastOption;false;set_Group;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;MulticastOption;false;MulticastOption;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;MulticastOption;false;MulticastOption;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;MulticastOption;false;MulticastOption;(System.Net.IPAddress,System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;MulticastOption;false;MulticastOption;(System.Net.IPAddress,System.Net.IPAddress);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Sockets;MulticastOption;false;get_Group;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;MulticastOption;false;get_LocalAddress;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;MulticastOption;false;set_Group;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;MulticastOption;false;set_LocalAddress;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;NetworkStream;false;NetworkStream;(System.Net.Sockets.Socket,System.IO.FileAccess,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;NetworkStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;NetworkStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;NetworkStream;false;get_Socket;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;SafeSocketHandle;false;SafeSocketHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;Accept;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;AcceptAsync;(System.Net.Sockets.Socket);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;AcceptAsync;(System.Net.Sockets.Socket,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;AcceptAsync;(System.Net.Sockets.Socket,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;AcceptAsync;(System.Net.Sockets.Socket,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;AcceptAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Sockets;Socket;false;AcceptAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;AcceptAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;Bind;(System.Net.EndPoint);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;Connect;(System.Net.EndPoint);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;Connect;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;Connect;(System.Net.IPAddress[],System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.EndPoint);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.EndPoint,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.EndPoint,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.EndPoint,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.IPAddress,System.Int32,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.IPAddress,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Sockets;Socket;false;ConnectAsync;(System.String,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;DisconnectAsync;(System.Boolean,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;DisconnectAsync;(System.Boolean,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;DisconnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Sockets;Socket;false;EndAccept;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveAsync;(System.Memory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveAsync;(System.Memory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveAsync;(System.Memory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[4];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[4];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Net.EndPoint);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Net.EndPoint);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFrom;(System.Span,System.Net.EndPoint);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFrom;(System.Span,System.Net.EndPoint);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFrom;(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFrom;(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.ArraySegment,System.Net.EndPoint);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.ArraySegment,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.Memory,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.Memory,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.Memory,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.Memory,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.Memory,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.Memory,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.Memory,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.Memory,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);;Argument[4];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);;Argument[4];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFrom;(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFrom;(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.ArraySegment,System.Net.EndPoint);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.ArraySegment,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.Memory,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.Memory,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.Memory,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.Memory,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.Memory,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.Memory,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.Memory,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.Memory,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Sockets;Socket;false;SendAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Sockets;Socket;false;SendAsync;(System.ReadOnlyMemory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendAsync;(System.ReadOnlyMemory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendFileAsync;(System.String,System.ReadOnlyMemory,System.ReadOnlyMemory,System.Net.Sockets.TransmitFileOptions,System.Threading.CancellationToken);;Argument[4];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendFileAsync;(System.String,System.ReadOnlyMemory,System.ReadOnlyMemory,System.Net.Sockets.TransmitFileOptions,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendFileAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendFileAsync;(System.String,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendPacketsAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Sockets;Socket;false;SendTo;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[4];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;SendTo;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;SendTo;(System.Byte[],System.Net.EndPoint);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;SendTo;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;SendTo;(System.ReadOnlySpan,System.Net.EndPoint);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;SendTo;(System.ReadOnlySpan,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;SendToAsync;(System.ArraySegment,System.Net.EndPoint);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;SendToAsync;(System.ArraySegment,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;SendToAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;SendToAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net.Sockets;Socket;false;SendToAsync;(System.ReadOnlyMemory,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;SendToAsync;(System.ReadOnlyMemory,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendToAsync;(System.ReadOnlyMemory,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendToAsync;(System.ReadOnlyMemory,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendToAsync;(System.ReadOnlyMemory,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Sockets;Socket;false;SendToAsync;(System.ReadOnlyMemory,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendToAsync;(System.ReadOnlyMemory,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;SendToAsync;(System.ReadOnlyMemory,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;get_LocalEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;get_RemoteEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;Socket;false;get_SafeHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;SetBuffer;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;SetBuffer;(System.Memory);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;get_AcceptSocket;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;get_BufferList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;get_ConnectByNameError;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;get_ConnectSocket;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;get_MemoryBuffer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;get_ReceiveMessageFromPacketInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;get_RemoteEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;get_SendPacketsElements;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;get_UserToken;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;set_AcceptSocket;(System.Net.Sockets.Socket);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;set_BufferList;(System.Collections.Generic.IList>);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;set_RemoteEndPoint;(System.Net.EndPoint);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;set_SendPacketsElements;(System.Net.Sockets.SendPacketsElement[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net.Sockets;SocketAsyncEventArgs;false;set_UserToken;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;SocketException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;AcceptAsync;(System.Net.Sockets.Socket,System.Net.Sockets.Socket);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.EndPoint);;Argument[1];Argument[0];generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[1];Argument[0];generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.IPAddress,System.Int32);;Argument[1];Argument[0];generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.IPAddress,System.Int32,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.IPAddress,System.Int32,System.Threading.CancellationToken);;Argument[1];Argument[0];generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.String,System.Int32,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ReceiveAsync;(System.Net.Sockets.Socket,System.Memory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ReceiveAsync;(System.Net.Sockets.Socket,System.Memory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ReceiveAsync;(System.Net.Sockets.Socket,System.Memory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ReceiveFromAsync;(System.Net.Sockets.Socket,System.ArraySegment,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;ReceiveMessageFromAsync;(System.Net.Sockets.Socket,System.ArraySegment,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;SendAsync;(System.Net.Sockets.Socket,System.ReadOnlyMemory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;SendAsync;(System.Net.Sockets.Socket,System.ReadOnlyMemory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.Net.Sockets;SocketTaskExtensions;false;SendToAsync;(System.Net.Sockets.Socket,System.ArraySegment,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];Argument[0];generated:taint", + "System.Net.Sockets;TcpClient;false;Connect;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;TcpClient;false;ConnectAsync;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;TcpClient;false;ConnectAsync;(System.Net.IPEndPoint,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;TcpClient;false;GetStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;TcpClient;false;TcpClient;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;TcpClient;false;get_Client;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;TcpClient;false;set_Client;(System.Net.Sockets.Socket);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;TcpListener;false;AcceptSocket;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;TcpListener;false;AcceptSocketAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;TcpListener;false;AcceptSocketAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;TcpListener;false;AcceptTcpClient;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;TcpListener;false;EndAcceptSocket;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;TcpListener;false;EndAcceptTcpClient;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net.Sockets;TcpListener;false;TcpListener;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;TcpListener;false;TcpListener;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;TcpListener;false;get_LocalEndpoint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;TcpListener;false;get_Server;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;UdpClient;false;Connect;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;UdpClient;false;EndReceive;(System.IAsyncResult,System.Net.IPEndPoint);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;UdpClient;false;Receive;(System.Net.IPEndPoint);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;UdpClient;false;Send;(System.Byte[],System.Int32,System.Net.IPEndPoint);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Sockets;UdpClient;false;Send;(System.ReadOnlySpan,System.Net.IPEndPoint);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Sockets;UdpClient;false;SendAsync;(System.Byte[],System.Int32,System.Net.IPEndPoint);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net.Sockets;UdpClient;false;SendAsync;(System.ReadOnlyMemory,System.Net.IPEndPoint,System.Threading.CancellationToken);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Sockets;UdpClient;false;SendAsync;(System.ReadOnlyMemory,System.Net.IPEndPoint,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;UdpClient;false;SendAsync;(System.ReadOnlyMemory,System.Net.IPEndPoint,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint", + "System.Net.Sockets;UdpClient;false;SendAsync;(System.ReadOnlyMemory,System.Net.IPEndPoint,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;UdpClient;false;SendAsync;(System.ReadOnlyMemory,System.String,System.Int32,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint", + "System.Net.Sockets;UdpClient;false;SendAsync;(System.ReadOnlyMemory,System.String,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;UdpClient;false;SendAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Net.Sockets;UdpClient;false;SendAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;UdpClient;false;UdpClient;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;UdpClient;false;get_Client;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;UdpClient;false;set_Client;(System.Net.Sockets.Socket);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.Sockets;UdpReceiveResult;false;UdpReceiveResult;(System.Byte[],System.Net.IPEndPoint);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net.Sockets;UdpReceiveResult;false;UdpReceiveResult;(System.Byte[],System.Net.IPEndPoint);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net.Sockets;UdpReceiveResult;false;get_Buffer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;UdpReceiveResult;false;get_RemoteEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.Sockets;UnixDomainSocketEndPoint;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;ClientWebSocketOptions;false;SetBuffer;(System.Int32,System.Int32,System.ArraySegment);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Net.WebSockets;ClientWebSocketOptions;false;get_Cookies;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;ClientWebSocketOptions;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;ClientWebSocketOptions;false;get_KeepAliveInterval;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;ClientWebSocketOptions;false;get_Proxy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;ClientWebSocketOptions;false;get_RemoteCertificateValidationCallback;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;ClientWebSocketOptions;false;set_ClientCertificates;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net.WebSockets;ClientWebSocketOptions;false;set_Cookies;(System.Net.CookieContainer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.WebSockets;ClientWebSocketOptions;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.WebSockets;ClientWebSocketOptions;false;set_KeepAliveInterval;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.WebSockets;ClientWebSocketOptions;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.WebSockets;HttpListenerWebSocketContext;false;get_CookieCollection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;HttpListenerWebSocketContext;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;HttpListenerWebSocketContext;false;get_Origin;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;HttpListenerWebSocketContext;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;HttpListenerWebSocketContext;false;get_SecWebSocketKey;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;HttpListenerWebSocketContext;false;get_SecWebSocketProtocols;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;HttpListenerWebSocketContext;false;get_SecWebSocketVersion;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;HttpListenerWebSocketContext;false;get_User;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;HttpListenerWebSocketContext;false;get_WebSocket;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;WebSocket;false;CreateClientWebSocket;(System.IO.Stream,System.String,System.Int32,System.Int32,System.TimeSpan,System.Boolean,System.ArraySegment);;Argument[0];ReturnValue;generated:taint", + "System.Net.WebSockets;WebSocket;false;CreateClientWebSocket;(System.IO.Stream,System.String,System.Int32,System.Int32,System.TimeSpan,System.Boolean,System.ArraySegment);;Argument[1];ReturnValue;generated:taint", + "System.Net.WebSockets;WebSocket;false;CreateFromStream;(System.IO.Stream,System.Boolean,System.String,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "System.Net.WebSockets;WebSocket;false;CreateFromStream;(System.IO.Stream,System.Boolean,System.String,System.TimeSpan);;Argument[2];ReturnValue;generated:taint", + "System.Net.WebSockets;WebSocket;true;SendAsync;(System.ReadOnlyMemory,System.Net.WebSockets.WebSocketMessageType,System.Net.WebSockets.WebSocketMessageFlags,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;WebSocketCreationOptions;false;get_KeepAliveInterval;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;WebSocketCreationOptions;false;get_SubProtocol;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net.WebSockets;WebSocketCreationOptions;false;set_KeepAliveInterval;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.WebSockets;WebSocketCreationOptions;false;set_SubProtocol;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net.WebSockets;WebSocketException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net;Authorization;false;get_ProtectionRealm;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;Authorization;false;set_ProtectionRealm;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net;Cookie;false;Cookie;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;Cookie;false;Cookie;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;Cookie;false;Cookie;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net;Cookie;false;Cookie;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Net;Cookie;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;Cookie;false;get_Comment;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;Cookie;false;get_CommentUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;Cookie;false;get_Domain;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;Cookie;false;get_Expires;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;Cookie;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;Cookie;false;get_Path;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;Cookie;false;get_Port;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;Cookie;false;get_TimeStamp;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;Cookie;false;set_Comment;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;Cookie;false;set_CommentUri;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;Cookie;false;set_Domain;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;Cookie;false;set_Expires;(System.DateTime);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;Cookie;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;Cookie;false;set_Path;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;Cookie;false;set_Port;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;Cookie;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;CookieCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;CookieCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;CookieCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Net;CookieException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net;CredentialCache;false;GetCredential;(System.Uri,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;Dns;false;EndGetHostAddresses;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net;Dns;false;EndGetHostByName;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net;Dns;false;EndGetHostEntry;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net;Dns;false;EndResolve;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net;DnsEndPoint;false;DnsEndPoint;(System.String,System.Int32,System.Net.Sockets.AddressFamily);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;DnsEndPoint;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;DnsEndPoint;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;DownloadDataCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;DownloadStringCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FileWebRequest;false;EndGetRequestStream;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net;FileWebRequest;false;EndGetResponse;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net;FileWebRequest;false;GetRequestStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FileWebRequest;false;GetResponse;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FileWebRequest;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FileWebRequest;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FileWebRequest;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FileWebRequest;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FileWebRequest;false;set_Method;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;FileWebResponse;false;GetResponseStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FileWebResponse;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FileWebResponse;false;get_ResponseUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebRequest;false;EndGetRequestStream;(System.IAsyncResult);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebRequest;false;EndGetResponse;(System.IAsyncResult);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebRequest;false;GetRequestStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebRequest;false;GetResponse;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebRequest;false;get_ClientCertificates;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebRequest;false;get_ConnectionGroupName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebRequest;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebRequest;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebRequest;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebRequest;false;get_RenameTo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebRequest;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebRequest;false;set_ClientCertificates;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net;FtpWebRequest;false;set_ConnectionGroupName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;FtpWebRequest;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;FtpWebRequest;false;set_Headers;(System.Net.WebHeaderCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net;FtpWebRequest;false;set_RenameTo;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;FtpWebResponse;false;GetResponseStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebResponse;false;get_BannerMessage;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebResponse;false;get_ExitMessage;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebResponse;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebResponse;false;get_LastModified;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebResponse;false;get_ResponseUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebResponse;false;get_StatusDescription;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;FtpWebResponse;false;get_WelcomeMessage;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListener;false;get_AuthenticationSchemeSelectorDelegate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListener;false;get_DefaultServiceNames;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListener;false;get_ExtendedProtectionPolicy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListener;false;get_ExtendedProtectionSelectorDelegate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListener;false;get_Prefixes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListener;false;get_Realm;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListener;false;get_TimeoutManager;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListener;false;set_ExtendedProtectionPolicy;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;HttpListener;false;set_Realm;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;HttpListenerContext;false;get_Response;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerContext;false;get_User;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerRequest;false;EndGetClientCertificate;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net;HttpListenerRequest;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerRequest;false;get_Cookies;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerRequest;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerRequest;false;get_HttpMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerRequest;false;get_InputStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerRequest;false;get_ProtocolVersion;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerRequest;false;get_RawUrl;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerRequest;false;get_Url;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerRequest;false;get_UrlReferrer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerRequest;false;get_UserAgent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerRequest;false;get_UserHostName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerResponse;false;AppendCookie;(System.Net.Cookie);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;HttpListenerResponse;false;Close;(System.Byte[],System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net;HttpListenerResponse;false;CopyFrom;(System.Net.HttpListenerResponse);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;HttpListenerResponse;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerResponse;false;get_Cookies;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerResponse;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerResponse;false;get_OutputStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerResponse;false;get_ProtocolVersion;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerResponse;false;get_RedirectLocation;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerResponse;false;get_StatusDescription;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerResponse;false;set_Cookies;(System.Net.CookieCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net;HttpListenerResponse;false;set_StatusDescription;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;HttpListenerTimeoutManager;false;get_DrainEntityBody;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerTimeoutManager;false;get_IdleConnection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpListenerTimeoutManager;false;set_DrainEntityBody;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;HttpListenerTimeoutManager;false;set_IdleConnection;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;HttpWebRequest;false;EndGetRequestStream;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;EndGetRequestStream;(System.IAsyncResult,System.Net.TransportContext);;Argument[0];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;EndGetResponse;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;GetRequestStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;GetRequestStream;(System.Net.TransportContext);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;GetResponse;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_Accept;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_Address;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_Connection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_ContinueDelegate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_CookieContainer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_Expect;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_Proxy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_Referer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_TransferEncoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;get_UserAgent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebRequest;false;set_ClientCertificates;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net;HttpWebRequest;false;set_CookieContainer;(System.Net.CookieContainer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;HttpWebRequest;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;HttpWebRequest;false;set_Host;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;HttpWebRequest;false;set_Method;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;HttpWebRequest;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;HttpWebResponse;false;GetResponseHeader;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebResponse;false;get_CharacterSet;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebResponse;false;get_Cookies;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebResponse;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebResponse;false;get_Server;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebResponse;false;get_StatusDescription;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;HttpWebResponse;false;set_Cookies;(System.Net.CookieCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net;IPAddress;false;MapToIPv4;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Net;IPAddress;false;MapToIPv6;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Net;IPAddress;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;IPEndPoint;false;IPEndPoint;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;IPEndPoint;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;IPEndPoint;false;get_Address;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;IPEndPoint;false;set_Address;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;NetworkCredential;false;GetCredential;(System.String,System.Int32,System.String);;Argument[Qualifier];ReturnValue;generated:value", + "System.Net;NetworkCredential;false;GetCredential;(System.Uri,System.String);;Argument[Qualifier];ReturnValue;generated:value", + "System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.Security.SecureString,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.Security.SecureString,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Net;NetworkCredential;false;get_Domain;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;NetworkCredential;false;get_Password;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;NetworkCredential;false;get_UserName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;NetworkCredential;false;set_Domain;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;NetworkCredential;false;set_Password;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;NetworkCredential;false;set_UserName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;OpenReadCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;OpenWriteCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;PathList;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;PathList;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;PathList;false;get_Values;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;ProtocolViolationException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net;UploadDataCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;UploadFileCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;UploadStringCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;UploadValuesCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;DownloadData;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadData;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadDataAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadDataAsync;(System.Uri,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadDataTaskAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadDataTaskAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadFile;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadFile;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadFileAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadFileAsync;(System.Uri,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadFileTaskAsync;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadFileTaskAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadString;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadString;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadStringAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadStringAsync;(System.Uri,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadStringTaskAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;DownloadStringTaskAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;GetWebRequest;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebClient;false;GetWebRequest;(System.Uri);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest,System.IAsyncResult);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest,System.IAsyncResult);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest,System.IAsyncResult);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest,System.IAsyncResult);;Argument[1];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenRead;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenRead;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenRead;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenRead;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenRead;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenRead;(System.Uri);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenReadAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenReadAsync;(System.Uri,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenReadTaskAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenReadTaskAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.Uri);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;OpenWriteAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWriteAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWriteAsync;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWriteAsync;(System.Uri,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWriteAsync;(System.Uri,System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWriteTaskAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWriteTaskAsync;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWriteTaskAsync;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWriteTaskAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWriteTaskAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;OpenWriteTaskAsync;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadData;(System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadData;(System.String,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadData;(System.String,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadData;(System.Uri,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadData;(System.Uri,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadData;(System.Uri,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.String,System.Byte[],System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.String,System.Byte[],System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadDataTaskAsync;(System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadDataTaskAsync;(System.String,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadDataTaskAsync;(System.String,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadDataTaskAsync;(System.Uri,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadDataTaskAsync;(System.Uri,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadDataTaskAsync;(System.Uri,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFile;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFile;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFile;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFile;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFile;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFile;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String,System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFileTaskAsync;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFileTaskAsync;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFileTaskAsync;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFileTaskAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFileTaskAsync;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadFileTaskAsync;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadString;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadString;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadString;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadString;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadString;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadString;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String,System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadStringTaskAsync;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadStringTaskAsync;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadStringTaskAsync;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadStringTaskAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadStringTaskAsync;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadStringTaskAsync;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValues;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValues;(System.String,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValues;(System.String,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValues;(System.Uri,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValues;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValues;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValuesTaskAsync;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValuesTaskAsync;(System.String,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValuesTaskAsync;(System.String,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValuesTaskAsync;(System.Uri,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValuesTaskAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;UploadValuesTaskAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;get_BaseAddress;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;get_Proxy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;get_ResponseHeaders;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebClient;false;set_BaseAddress;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;set_Encoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;set_Headers;(System.Net.WebHeaderCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint", + "System.Net;WebClient;false;set_QueryString;(System.Collections.Specialized.NameValueCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Net;WebException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Net;WebException;false;WebException;(System.String,System.Exception,System.Net.WebExceptionStatus,System.Net.WebResponse);;Argument[3];Argument[Qualifier];generated:taint", + "System.Net;WebException;false;get_Response;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebHeaderCollection;false;ToByteArray;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebHeaderCollection;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebHeaderCollection;false;get_AllKeys;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebHeaderCollection;false;get_Item;(System.Net.HttpRequestHeader);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebHeaderCollection;false;get_Item;(System.Net.HttpResponseHeader);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebHeaderCollection;false;get_Keys;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebProxy;false;GetProxy;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebProxy;false;get_BypassArrayList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebProxy;false;get_BypassList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Net;WebRequest;false;Create;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebRequest;false;Create;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebRequest;false;CreateDefault;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebRequest;false;CreateHttp;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebRequest;false;CreateHttp;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebUtility;false;HtmlDecode;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Net;WebUtility;false;HtmlDecode;(System.String,System.IO.TextWriter);;Argument[0];Argument[1];generated:taint", + "System.Net;WebUtility;false;UrlDecode;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Numerics.Tensors;ArrayTensorExtensions;false;ToTensor<>;(System.Array,System.Boolean);;Argument[0].Element;ReturnValue;generated:taint", + "System.Numerics.Tensors;ArrayTensorExtensions;false;ToTensor<>;(T[,,],System.Boolean);;Argument[0].Element;ReturnValue;generated:taint", + "System.Numerics.Tensors;ArrayTensorExtensions;false;ToTensor<>;(T[,],System.Boolean);;Argument[0].Element;ReturnValue;generated:taint", + "System.Numerics.Tensors;ArrayTensorExtensions;false;ToTensor<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Numerics.Tensors;CompressedSparseTensor<>;false;CompressedSparseTensor;(System.Memory,System.Memory,System.Memory,System.Int32,System.ReadOnlySpan,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Numerics.Tensors;CompressedSparseTensor<>;false;CompressedSparseTensor;(System.Memory,System.Memory,System.Memory,System.Int32,System.ReadOnlySpan,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.Numerics.Tensors;CompressedSparseTensor<>;false;CompressedSparseTensor;(System.Memory,System.Memory,System.Memory,System.Int32,System.ReadOnlySpan,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint", + "System.Numerics.Tensors;CompressedSparseTensor<>;false;get_CompressedCounts;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Numerics.Tensors;CompressedSparseTensor<>;false;get_Indices;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Numerics.Tensors;CompressedSparseTensor<>;false;get_Values;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Numerics.Tensors;DenseTensor<>;false;DenseTensor;(System.Memory,System.ReadOnlySpan,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Numerics.Tensors;DenseTensor<>;false;Reshape;(System.ReadOnlySpan);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Numerics.Tensors;DenseTensor<>;false;get_Buffer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Numerics.Tensors;SparseTensor<>;false;Reshape;(System.ReadOnlySpan);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Numerics.Tensors;Tensor<>;false;GetArrayString;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Numerics.Tensors;Tensor<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Numerics.Tensors;Tensor<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Numerics.Tensors;Tensor<>;true;get_Item;(System.Int32[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;Abs;(System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;DivRem;(System.Numerics.BigInteger,System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;Max;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;Max;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[1];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;Min;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;Min;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[1];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;Negate;(System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;Pow;(System.Numerics.BigInteger,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;Remainder;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;op_BitwiseOr;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;op_BitwiseOr;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[1];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;op_LeftShift;(System.Numerics.BigInteger,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;op_Modulus;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;op_RightShift;(System.Numerics.BigInteger,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;op_UnaryNegation;(System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;BigInteger;false;op_UnaryPlus;(System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Complex;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Complex;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System.Numerics;Matrix4x4;false;Add;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Matrix4x4;false;Lerp;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4,System.Single);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Matrix4x4;false;Multiply;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Matrix4x4;false;Multiply;(System.Numerics.Matrix4x4,System.Single);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Matrix4x4;false;Negate;(System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Matrix4x4;false;Subtract;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Matrix4x4;false;Transpose;(System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Matrix4x4;false;op_Addition;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Matrix4x4;false;op_Multiply;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Matrix4x4;false;op_Multiply;(System.Numerics.Matrix4x4,System.Single);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Matrix4x4;false;op_Subtraction;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Matrix4x4;false;op_UnaryNegation;(System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Plane;false;Normalize;(System.Numerics.Plane);;Argument[0];ReturnValue;generated:taint", + "System.Numerics;Plane;false;Plane;(System.Numerics.Vector3,System.Single);;Argument[0];Argument[Qualifier];generated:taint", + "System.Numerics;Plane;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Numerics;Vector2;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System.Numerics;Vector3;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System.Numerics;Vector4;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System.Numerics;Vector;false;Abs<>;(System.Numerics.Vector);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Context;CustomReflectionContext;false;MapAssembly;(System.Reflection.Assembly);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Context;CustomReflectionContext;false;MapType;(System.Reflection.TypeInfo);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Context;CustomReflectionContext;true;GetCustomAttributes;(System.Reflection.MemberInfo,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Reflection.Context;CustomReflectionContext;true;GetCustomAttributes;(System.Reflection.ParameterInfo,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;AssemblyBuilder;false;DefineDynamicAssembly;(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;AssemblyBuilder;false;DefineDynamicAssembly;(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess,System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;AssemblyBuilder;false;DefineDynamicAssembly;(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;AssemblyBuilder;false;DefineDynamicModule;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;AssemblyBuilder;false;GetDynamicModule;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;AssemblyBuilder;false;GetModule;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;AssemblyBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;AssemblyBuilder;false;get_ManifestModule;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ConstructorBuilder;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;ConstructorBuilder;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ConstructorBuilder;false;GetILGenerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ConstructorBuilder;false;GetILGenerator;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ConstructorBuilder;false;GetParameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ConstructorBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;ConstructorBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ConstructorBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ConstructorBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[3].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[]);;Argument[3].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[3].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[4].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[5].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;DynamicILInfo;false;get_DynamicMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;DynamicMethod;false;CreateDelegate;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;DynamicMethod;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;DynamicMethod;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;DynamicMethod;false;GetBaseDefinition;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Emit;DynamicMethod;false;GetDynamicILInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;DynamicMethod;false;GetILGenerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;DynamicMethod;false;GetILGenerator;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;DynamicMethod;false;GetParameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;DynamicMethod;false;get_MethodHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;DynamicMethod;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;DynamicMethod;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;DynamicMethod;false;get_ReturnParameter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;DynamicMethod;false;get_ReturnType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;CreateType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;CreateTypeInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;DefineLiteral;(System.String,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;DefineLiteral;(System.String,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;DefineLiteral;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetConstructorImpl;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetConstructors;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetEnumUnderlyingType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetEvent;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetEvents;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetField;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetFields;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetInterfaceMap;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetInterfaceMap;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetMember;(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetMembers;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetMethodImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;GetProperties;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;get_UnderlyingField;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EnumBuilder;false;get_UnderlyingSystemType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;EventBuilder;false;AddOtherMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;EventBuilder;false;SetAddOnMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;EventBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;EventBuilder;false;SetRaiseMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;EventBuilder;false;SetRemoveOnMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;FieldBuilder;false;SetConstant;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;FieldBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;FieldBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;FieldBuilder;false;get_FieldType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;FieldBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;FieldBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;GenericTypeParameterBuilder;false;SetBaseTypeConstraint;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;GenericTypeParameterBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;GenericTypeParameterBuilder;false;SetInterfaceConstraints;(System.Type[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;GenericTypeParameterBuilder;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;GenericTypeParameterBuilder;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;GenericTypeParameterBuilder;false;get_DeclaringMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;GenericTypeParameterBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;GenericTypeParameterBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;GenericTypeParameterBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;GenericTypeParameterBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;GenericTypeParameterBuilder;false;get_UnderlyingSystemType;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Emit;ILGenerator;false;DeclareLocal;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ILGenerator;false;DeclareLocal;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ILGenerator;false;DeclareLocal;(System.Type,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ILGenerator;false;DeclareLocal;(System.Type,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;LocalBuilder;false;get_LocalType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;DefineGenericParameters;(System.String[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;DefineGenericParameters;(System.String[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;GetBaseDefinition;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Emit;MethodBuilder;false;GetGenericArguments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;GetGenericMethodDefinition;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Emit;MethodBuilder;false;GetILGenerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;GetILGenerator;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;GetModule;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;GetParameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;MakeGenericMethod;(System.Type[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;MakeGenericMethod;(System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;MethodBuilder;false;SetReturnType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[5].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Emit;MethodBuilder;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;get_ReturnParameter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;MethodBuilder;false;get_ReturnType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineEnum;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineEnum;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineEnum;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[3];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[3];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[5].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[7].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[8].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineInitializedData;(System.String,System.Byte[],System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineInitializedData;(System.String,System.Byte[],System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineUninitializedData;(System.String,System.Int32,System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;DefineUninitializedData;(System.String,System.Int32,System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;GetArrayMethod;(System.Type,System.String,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;GetArrayMethod;(System.Type,System.String,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;GetArrayMethod;(System.Type,System.String,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[3];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;GetField;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;GetFields;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;GetMethodImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;GetMethods;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;GetType;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;GetType;(System.String,System.Boolean,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;get_Assembly;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;get_FullyQualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ModuleBuilder;false;get_ScopeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;ParameterBuilder;false;SetConstant;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;ParameterBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;ParameterBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;PropertyBuilder;false;GetGetMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;PropertyBuilder;false;GetSetMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;PropertyBuilder;false;SetConstant;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;PropertyBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;PropertyBuilder;false;SetGetMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;PropertyBuilder;false;SetSetMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;PropertyBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;PropertyBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;PropertyBuilder;false;get_PropertyType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;PropertyBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;SignatureHelper;false;GetFieldSigHelper;(System.Reflection.Module);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;SignatureHelper;false;GetLocalVarSigHelper;(System.Reflection.Module);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.CallingConventions,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Reflection.CallingConventions,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Reflection.CallingConventions,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Runtime.InteropServices.CallingConvention,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Runtime.InteropServices.CallingConvention,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Type,System.Type[]);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Type,System.Type[]);;Argument[2].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Runtime.InteropServices.CallingConvention,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;AddInterfaceImplementation;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;TypeBuilder;false;CreateType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;CreateTypeInfo;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Emit;TypeBuilder;false;DefineConstructor;(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineConstructor;(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][]);;Argument[3].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineConstructor;(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineConstructor;(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineDefaultConstructor;(System.Reflection.MethodAttributes);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineEvent;(System.String,System.Reflection.EventAttributes,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineEvent;(System.String,System.Reflection.EventAttributes,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineEvent;(System.String,System.Reflection.EventAttributes,System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Reflection.FieldAttributes);;Argument[1];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Reflection.FieldAttributes);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[1];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[2].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[3].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineGenericParameters;(System.String[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineGenericParameters;(System.String[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineInitializedData;(System.String,System.Byte[],System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineInitializedData;(System.String,System.Byte[],System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[3];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[3];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[5].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[7].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[8].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[3];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[3];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[5].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[7].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[8].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[2];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[3].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[6].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[7].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineTypeInitializer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineUninitializedData;(System.String,System.Int32,System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;DefineUninitializedData;(System.String,System.Int32,System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetConstructor;(System.Type,System.Reflection.ConstructorInfo);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetConstructor;(System.Type,System.Reflection.ConstructorInfo);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetConstructorImpl;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetConstructors;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetEvent;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetEvents;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetField;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetField;(System.Type,System.Reflection.FieldInfo);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetField;(System.Type,System.Reflection.FieldInfo);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetFields;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetGenericArguments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetGenericTypeDefinition;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Emit;TypeBuilder;false;GetInterface;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetInterfaceMap;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetInterfaceMap;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetMember;(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetMembers;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetMethod;(System.Type,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetMethod;(System.Type,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetMethodImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetNestedType;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;GetProperties;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;MakeGenericType;(System.Type[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;MakeGenericType;(System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;TypeBuilder;false;SetParent;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Emit;TypeBuilder;false;get_Assembly;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Emit;TypeBuilder;false;get_UnderlyingSystemType;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Metadata.Ecma335;CustomModifiersEncoder;false;AddModifier;(System.Reflection.Metadata.EntityHandle,System.Boolean);;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;Add;(System.Reflection.Metadata.ExceptionRegionKind,System.Int32,System.Int32,System.Int32,System.Int32,System.Reflection.Metadata.EntityHandle,System.Int32);;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;AddCatch;(System.Int32,System.Int32,System.Int32,System.Int32,System.Reflection.Metadata.EntityHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;AddFault;(System.Int32,System.Int32,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;AddFilter;(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;AddFinally;(System.Int32,System.Int32,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddAssembly;(System.Reflection.Metadata.StringHandle,System.Version,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.BlobHandle,System.Reflection.AssemblyFlags,System.Reflection.AssemblyHashAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddAssembly;(System.Reflection.Metadata.StringHandle,System.Version,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.BlobHandle,System.Reflection.AssemblyFlags,System.Reflection.AssemblyHashAlgorithm);;Argument[1];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddAssembly;(System.Reflection.Metadata.StringHandle,System.Version,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.BlobHandle,System.Reflection.AssemblyFlags,System.Reflection.AssemblyHashAlgorithm);;Argument[2];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddAssembly;(System.Reflection.Metadata.StringHandle,System.Version,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.BlobHandle,System.Reflection.AssemblyFlags,System.Reflection.AssemblyHashAlgorithm);;Argument[3];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddModule;(System.Int32,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle);;Argument[1];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddModule;(System.Int32,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle);;Argument[2];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddModule;(System.Int32,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle);;Argument[3];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddModule;(System.Int32,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle);;Argument[4];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;MetadataRootBuilder;false;MetadataRootBuilder;(System.Reflection.Metadata.Ecma335.MetadataBuilder,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;MetadataRootBuilder;false;get_Sizes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata.Ecma335;PermissionSetEncoder;false;AddPermission;(System.String,System.Collections.Immutable.ImmutableArray);;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Metadata.Ecma335;PermissionSetEncoder;false;AddPermission;(System.String,System.Reflection.Metadata.BlobBuilder);;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Metadata.Ecma335;PortablePdbBuilder;false;Serialize;(System.Reflection.Metadata.BlobBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;SignatureDecoder<,>;false;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;SignatureDecoder<,>;false;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);;Argument[1];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;SignatureDecoder<,>;false;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);;Argument[2];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;false;Array;(System.Reflection.Metadata.Ecma335.SignatureTypeEncoder,System.Reflection.Metadata.Ecma335.ArrayShapeEncoder);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;false;Pointer;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;false;SZArray;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Metadata;AssemblyDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;AssemblyDefinition;false;GetDeclarativeSecurityAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;AssemblyFile;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;AssemblyReference;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;AssemblyReferenceHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;Blob;false;GetBytes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;BlobBuilder+Blobs;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection.Metadata;BlobBuilder;false;GetBlobs;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;BlobBuilder;false;LinkPrefix;(System.Reflection.Metadata.BlobBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata;BlobBuilder;false;LinkPrefix;(System.Reflection.Metadata.BlobBuilder);;Argument[Qualifier];Argument[0];generated:taint", + "System.Reflection.Metadata;BlobBuilder;false;LinkSuffix;(System.Reflection.Metadata.BlobBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata;BlobBuilder;false;LinkSuffix;(System.Reflection.Metadata.BlobBuilder);;Argument[Qualifier];Argument[0];generated:taint", + "System.Reflection.Metadata;BlobBuilder;false;ReserveBytes;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;BlobBuilder;false;TryWriteBytes;(System.IO.Stream,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata;BlobReader;false;ReadConstant;(System.Reflection.Metadata.ConstantTypeCode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;BlobReader;false;ReadSerializedString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;BlobReader;false;ReadUTF16;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;BlobReader;false;ReadUTF8;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;BlobReader;false;get_CurrentPointer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;BlobReader;false;get_StartPointer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;BlobWriter;false;BlobWriter;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Reflection.Metadata;BlobWriter;false;WriteBytes;(System.IO.Stream,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.Metadata;BlobWriter;false;get_Blob;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;CustomAttributeHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;CustomDebugInformationHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;DeclarativeSecurityAttributeHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;DocumentHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;EventAccessors;false;get_Others;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;EventDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;EventDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;ExportedType;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;FieldDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;FieldDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;GenericParameter;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;GenericParameterConstraint;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;ImportDefinitionCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;ImportDefinitionCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;ImportScopeCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;InterfaceImplementation;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;InterfaceImplementationHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;LocalConstantHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;LocalScope;false;GetChildren;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;LocalScope;false;GetLocalConstants;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;LocalScope;false;GetLocalVariables;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;LocalScopeHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;LocalVariableHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;ManifestResource;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MemberReference;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetAssemblyDefinition;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetAssemblyFile;(System.Reflection.Metadata.AssemblyFileHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetAssemblyReference;(System.Reflection.Metadata.AssemblyReferenceHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetConstant;(System.Reflection.Metadata.ConstantHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetCustomAttribute;(System.Reflection.Metadata.CustomAttributeHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetCustomAttributes;(System.Reflection.Metadata.EntityHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetCustomDebugInformation;(System.Reflection.Metadata.CustomDebugInformationHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetCustomDebugInformation;(System.Reflection.Metadata.EntityHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetDeclarativeSecurityAttribute;(System.Reflection.Metadata.DeclarativeSecurityAttributeHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetDocument;(System.Reflection.Metadata.DocumentHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetEventDefinition;(System.Reflection.Metadata.EventDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetExportedType;(System.Reflection.Metadata.ExportedTypeHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetFieldDefinition;(System.Reflection.Metadata.FieldDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetGenericParameter;(System.Reflection.Metadata.GenericParameterHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetGenericParameterConstraint;(System.Reflection.Metadata.GenericParameterConstraintHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetImportScope;(System.Reflection.Metadata.ImportScopeHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetInterfaceImplementation;(System.Reflection.Metadata.InterfaceImplementationHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetLocalConstant;(System.Reflection.Metadata.LocalConstantHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetLocalScope;(System.Reflection.Metadata.LocalScopeHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetLocalScopes;(System.Reflection.Metadata.MethodDebugInformationHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetLocalScopes;(System.Reflection.Metadata.MethodDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetLocalVariable;(System.Reflection.Metadata.LocalVariableHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetManifestResource;(System.Reflection.Metadata.ManifestResourceHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetMemberReference;(System.Reflection.Metadata.MemberReferenceHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetMethodDebugInformation;(System.Reflection.Metadata.MethodDebugInformationHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetMethodDebugInformation;(System.Reflection.Metadata.MethodDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetMethodDefinition;(System.Reflection.Metadata.MethodDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetMethodImplementation;(System.Reflection.Metadata.MethodImplementationHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetMethodSpecification;(System.Reflection.Metadata.MethodSpecificationHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetModuleDefinition;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetModuleReference;(System.Reflection.Metadata.ModuleReferenceHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetNamespaceDefinitionRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetParameter;(System.Reflection.Metadata.ParameterHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetPropertyDefinition;(System.Reflection.Metadata.PropertyDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetStandaloneSignature;(System.Reflection.Metadata.StandaloneSignatureHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetTypeDefinition;(System.Reflection.Metadata.TypeDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetTypeReference;(System.Reflection.Metadata.TypeReferenceHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;GetTypeSpecification;(System.Reflection.Metadata.TypeSpecificationHandle);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_AssemblyReferences;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_CustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_CustomDebugInformation;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_DebugMetadataHeader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_DeclarativeSecurityAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_Documents;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_EventDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_FieldDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_ImportScopes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_LocalConstants;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_LocalScopes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_LocalVariables;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_MetadataPointer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_MetadataVersion;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_MethodDebugInformation;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_MethodDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_PropertyDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReader;false;get_StringComparer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReaderProvider;false;FromMetadataImage;(System.Byte*,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReaderProvider;false;FromMetadataImage;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReaderProvider;false;FromMetadataStream;(System.IO.Stream,System.Reflection.Metadata.MetadataStreamOptions,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReaderProvider;false;FromPortablePdbImage;(System.Byte*,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReaderProvider;false;FromPortablePdbImage;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReaderProvider;false;FromPortablePdbStream;(System.IO.Stream,System.Reflection.Metadata.MetadataStreamOptions,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataReaderProvider;false;GetMetadataReader;(System.Reflection.Metadata.MetadataReaderOptions,System.Reflection.Metadata.MetadataStringDecoder);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MetadataStringDecoder;false;GetString;(System.Byte*,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodBodyBlock;false;Create;(System.Reflection.Metadata.BlobReader);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodBodyBlock;false;GetILReader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodBodyBlock;false;get_ExceptionRegions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodBodyBlock;false;get_LocalSignature;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodDebugInformationHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodDefinition;false;GetDeclarativeSecurityAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodDefinition;false;GetParameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodImplementation;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodImport;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodImport;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;MethodSpecification;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;ModuleDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;ModuleReference;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;NamespaceDefinition;false;get_ExportedTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;NamespaceDefinition;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;NamespaceDefinition;false;get_NamespaceDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;NamespaceDefinition;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;NamespaceDefinition;false;get_TypeDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;PEReaderExtensions;false;GetMetadataReader;(System.Reflection.PortableExecutable.PEReader);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Metadata;PEReaderExtensions;false;GetMetadataReader;(System.Reflection.PortableExecutable.PEReader,System.Reflection.Metadata.MetadataReaderOptions);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Metadata;PEReaderExtensions;false;GetMetadataReader;(System.Reflection.PortableExecutable.PEReader,System.Reflection.Metadata.MetadataReaderOptions,System.Reflection.Metadata.MetadataStringDecoder);;Argument[0];ReturnValue;generated:taint", + "System.Reflection.Metadata;Parameter;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;ParameterHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;PropertyAccessors;false;get_Others;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;PropertyDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;PropertyDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;SequencePointCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;SequencePointCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;StandaloneSignature;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;TypeDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;TypeDefinition;false;GetDeclarativeSecurityAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;TypeDefinition;false;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;TypeDefinition;false;GetFields;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;TypeDefinition;false;GetInterfaceImplementations;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;TypeDefinition;false;GetMethods;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;TypeDefinition;false;GetProperties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.Metadata;TypeSpecification;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;ManagedPEBuilder;false;GetDirectories;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;ManagedPEBuilder;false;SerializeSection;(System.String,System.Reflection.PortableExecutable.SectionLocation);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;PEBuilder+Section;false;Section;(System.String,System.Reflection.PortableExecutable.SectionCharacteristics);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.PortableExecutable;PEBuilder;false;GetSections;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;PEBuilder;false;Serialize;(System.Reflection.Metadata.BlobBuilder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.PortableExecutable;PEHeaders;false;get_CoffHeader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;PEHeaders;false;get_CorHeader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;PEHeaders;false;get_PEHeader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;PEHeaders;false;get_SectionHeaders;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;PEMemoryBlock;false;get_Pointer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;PEReader;false;GetEntireImage;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;PEReader;false;GetMetadata;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;PEReader;false;GetSectionData;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;PEReader;false;GetSectionData;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection.PortableExecutable;PEReader;false;PEReader;(System.Byte*,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.PortableExecutable;PEReader;false;PEReader;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Reflection.PortableExecutable;PEReader;false;PEReader;(System.IO.Stream,System.Reflection.PortableExecutable.PEStreamOptions,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection.PortableExecutable;PEReader;false;get_PEHeaders;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;Assembly;false;CreateQualifiedName;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;Assembly;false;CreateQualifiedName;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Reflection;Assembly;false;GetAssembly;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;Assembly;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;Assembly;true;GetName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;Assembly;true;GetType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;Assembly;true;GetType;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;AssemblyName;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;AssemblyName;false;GetPublicKey;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;AssemblyName;false;SetPublicKey;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Reflection;AssemblyName;false;SetPublicKeyToken;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Reflection;AssemblyName;false;get_CodeBase;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;AssemblyName;false;get_CultureInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;AssemblyName;false;get_EscapedCodeBase;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;AssemblyName;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;AssemblyName;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;AssemblyName;false;set_CodeBase;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection;AssemblyName;false;set_CultureInfo;(System.Globalization.CultureInfo);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection;AssemblyName;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection;AssemblyName;false;set_Version;(System.Version);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection;CustomAttributeData;false;get_AttributeType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;CustomAttributeNamedArgument;false;CustomAttributeNamedArgument;(System.Reflection.MemberInfo,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection;CustomAttributeNamedArgument;false;CustomAttributeNamedArgument;(System.Reflection.MemberInfo,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Reflection;CustomAttributeNamedArgument;false;CustomAttributeNamedArgument;(System.Reflection.MemberInfo,System.Reflection.CustomAttributeTypedArgument);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection;CustomAttributeNamedArgument;false;CustomAttributeNamedArgument;(System.Reflection.MemberInfo,System.Reflection.CustomAttributeTypedArgument);;Argument[1];Argument[Qualifier];generated:taint", + "System.Reflection;CustomAttributeNamedArgument;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;CustomAttributeNamedArgument;false;get_MemberInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;CustomAttributeNamedArgument;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;CustomAttributeNamedArgument;false;get_TypedValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;CustomAttributeTypedArgument;false;CustomAttributeTypedArgument;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection;CustomAttributeTypedArgument;false;CustomAttributeTypedArgument;(System.Type,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection;CustomAttributeTypedArgument;false;CustomAttributeTypedArgument;(System.Type,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Reflection;CustomAttributeTypedArgument;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;CustomAttributeTypedArgument;false;get_ArgumentType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;CustomAttributeTypedArgument;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;EventInfo;false;GetAddMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;EventInfo;false;GetRaiseMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;EventInfo;false;GetRemoveMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;EventInfo;true;get_AddMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;EventInfo;true;get_RaiseMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;EventInfo;true;get_RemoveMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;EventInfoExtensions;false;GetAddMethod;(System.Reflection.EventInfo);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;EventInfoExtensions;false;GetAddMethod;(System.Reflection.EventInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;EventInfoExtensions;false;GetRaiseMethod;(System.Reflection.EventInfo);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;EventInfoExtensions;false;GetRaiseMethod;(System.Reflection.EventInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;EventInfoExtensions;false;GetRemoveMethod;(System.Reflection.EventInfo);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;EventInfoExtensions;false;GetRemoveMethod;(System.Reflection.EventInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;ExceptionHandlingClause;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;IntrospectionExtensions;false;GetTypeInfo;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;LocalVariableInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;MetadataLoadContext;false;MetadataLoadContext;(System.Reflection.MetadataAssemblyResolver,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection;MetadataLoadContext;false;get_CoreAssembly;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;MethodInfo;false;CreateDelegate<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;MethodInfoExtensions;false;GetBaseDefinition;(System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;Module;false;GetField;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;Module;false;GetFields;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;Module;false;GetMethod;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;Module;false;GetMethod;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;Module;false;GetMethod;(System.String,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;Module;false;GetMethods;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;Module;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;Module;true;GetType;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;ParameterInfo;false;GetRealObject;(System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;ParameterInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;ParameterInfo;false;get_Member;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;ParameterInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;ParameterInfo;false;get_ParameterType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;Pointer;false;Box;(System.Void*,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;Pointer;false;Unbox;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;PropertyInfo;false;GetAccessors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;PropertyInfo;false;GetGetMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;PropertyInfo;false;GetSetMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;PropertyInfo;true;get_GetMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;PropertyInfo;true;get_SetMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;PropertyInfoExtensions;false;GetAccessors;(System.Reflection.PropertyInfo);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;PropertyInfoExtensions;false;GetAccessors;(System.Reflection.PropertyInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;PropertyInfoExtensions;false;GetGetMethod;(System.Reflection.PropertyInfo);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;PropertyInfoExtensions;false;GetGetMethod;(System.Reflection.PropertyInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;PropertyInfoExtensions;false;GetSetMethod;(System.Reflection.PropertyInfo);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;PropertyInfoExtensions;false;GetSetMethod;(System.Reflection.PropertyInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;ReflectionTypeLoadException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Reflection;ReflectionTypeLoadException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;RuntimeReflectionExtensions;false;GetMethodInfo;(System.Delegate);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeBaseDefinition;(System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeEvent;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeEvents;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeField;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeFields;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeInterfaceMap;(System.Reflection.TypeInfo,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeInterfaceMap;(System.Reflection.TypeInfo,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeMethod;(System.Type,System.String,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeMethods;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeProperties;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeProperty;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetConstructorImpl;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetConstructors;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetElementType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetEvent;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetEvents;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetField;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetFields;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetInterface;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetInterfaceMap;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetInterfaceMap;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetMember;(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetMemberWithSameMetadataDefinitionAs;(System.Reflection.MemberInfo);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetMembers;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetMethodImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetMethods;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetNestedType;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetNestedTypes;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetProperties;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;GetPropertyImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;TypeDelegator;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Reflection;TypeDelegator;false;get_Assembly;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;get_AssemblyQualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeDelegator;false;get_UnderlyingSystemType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetConstructor;(System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetConstructors;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetConstructors;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetDefaultMembers;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetEvent;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetEvent;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetEvents;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetEvents;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetField;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetField;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetFields;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetFields;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetGenericArguments;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetInterfaces;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetMember;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetMember;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetMembers;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetMembers;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetMethod;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetMethod;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetMethod;(System.Type,System.String,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetMethods;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetMethods;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetNestedType;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetNestedTypes;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetProperties;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetProperties;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetProperty;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetProperty;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetProperty;(System.Type,System.String,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeExtensions;false;GetProperty;(System.Type,System.String,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;false;GetTypeInfo;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection;TypeInfo;true;AsType;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Reflection;TypeInfo;true;GetDeclaredEvent;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;true;GetDeclaredField;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;true;GetDeclaredMethod;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;true;GetDeclaredNestedType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;true;GetDeclaredProperty;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;true;get_DeclaredConstructors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;true;get_DeclaredEvents;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;true;get_DeclaredFields;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;true;get_DeclaredMembers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;true;get_DeclaredMethods;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;true;get_DeclaredProperties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;true;get_GenericTypeParameters;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Reflection;TypeInfo;true;get_ImplementedInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Resources.Extensions;DeserializingResourceReader;false;DeserializingResourceReader;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Resources.Extensions;DeserializingResourceReader;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Resources.Extensions;PreserializedResourceWriter;false;PreserializedResourceWriter;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Resources;MissingSatelliteAssemblyException;false;MissingSatelliteAssemblyException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Resources;MissingSatelliteAssemblyException;false;get_CultureName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Resources;ResourceManager;false;CreateFileBasedResourceManager;(System.String,System.String,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Resources;ResourceManager;false;CreateFileBasedResourceManager;(System.String,System.String,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Resources;ResourceManager;false;CreateFileBasedResourceManager;(System.String,System.String,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Resources;ResourceManager;false;GetResourceFileName;(System.Globalization.CultureInfo);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly);;Argument[0];Argument[Qualifier];generated:taint", + "System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly);;Argument[1];Argument[Qualifier];generated:taint", + "System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly,System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly,System.Type);;Argument[1];Argument[Qualifier];generated:taint", + "System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly,System.Type);;Argument[2];Argument[Qualifier];generated:taint", + "System.Resources;ResourceManager;false;ResourceManager;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Resources;ResourceManager;false;get_BaseName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Resources;ResourceManager;false;get_ResourceSetType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Resources;ResourceReader;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Resources;ResourceReader;false;GetResourceData;(System.String,System.String,System.Byte[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Resources;ResourceReader;false;ResourceReader;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Resources;ResourceSet;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Resources;ResourceSet;false;ResourceSet;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Resources;ResourceSet;false;ResourceSet;(System.Resources.IResourceReader);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Resources;ResourceWriter;false;ResourceWriter;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Caching;CacheEntryRemovedArguments;false;CacheEntryRemovedArguments;(System.Runtime.Caching.ObjectCache,System.Runtime.Caching.CacheEntryRemovedReason,System.Runtime.Caching.CacheItem);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Runtime.Caching;CacheEntryRemovedArguments;false;CacheEntryRemovedArguments;(System.Runtime.Caching.ObjectCache,System.Runtime.Caching.CacheEntryRemovedReason,System.Runtime.Caching.CacheItem);;Argument[2];Argument[Qualifier];generated:taint", + "System.Runtime.Caching;CacheEntryRemovedArguments;false;get_CacheItem;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;CacheEntryRemovedArguments;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;CacheEntryUpdateArguments;false;CacheEntryUpdateArguments;(System.Runtime.Caching.ObjectCache,System.Runtime.Caching.CacheEntryRemovedReason,System.String,System.String);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Runtime.Caching;CacheEntryUpdateArguments;false;CacheEntryUpdateArguments;(System.Runtime.Caching.ObjectCache,System.Runtime.Caching.CacheEntryRemovedReason,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Runtime.Caching;CacheEntryUpdateArguments;false;CacheEntryUpdateArguments;(System.Runtime.Caching.ObjectCache,System.Runtime.Caching.CacheEntryRemovedReason,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Runtime.Caching;CacheEntryUpdateArguments;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;CacheEntryUpdateArguments;false;get_RegionName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;CacheEntryUpdateArguments;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;CacheEntryUpdateArguments;false;get_UpdatedCacheItem;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;CacheEntryUpdateArguments;false;get_UpdatedCacheItemPolicy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;CacheEntryUpdateArguments;false;set_UpdatedCacheItem;(System.Runtime.Caching.CacheItem);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Caching;CacheEntryUpdateArguments;false;set_UpdatedCacheItemPolicy;(System.Runtime.Caching.CacheItemPolicy);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Caching;CacheItemPolicy;false;get_AbsoluteExpiration;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;CacheItemPolicy;false;get_ChangeMonitors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;CacheItemPolicy;false;get_RemovedCallback;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;CacheItemPolicy;false;get_SlidingExpiration;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;CacheItemPolicy;false;get_UpdateCallback;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;CacheItemPolicy;false;set_AbsoluteExpiration;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Caching;CacheItemPolicy;false;set_SlidingExpiration;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Caching;HostFileChangeMonitor;false;get_FilePaths;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;HostFileChangeMonitor;false;get_LastModified;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;HostFileChangeMonitor;false;get_UniqueId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Caching;MemoryCache;false;CreateCacheEntryChangeMonitor;(System.Collections.Generic.IEnumerable,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Runtime.Caching;MemoryCache;false;MemoryCache;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Caching;MemoryCache;false;MemoryCache;(System.String,System.Collections.Specialized.NameValueCollection,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Caching;MemoryCache;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;AsyncTaskMethodBuilder;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;AsyncTaskMethodBuilder;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;AsyncTaskMethodBuilder;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;AsyncTaskMethodBuilder<>;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;AsyncTaskMethodBuilder<>;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;AsyncTaskMethodBuilder<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;AsyncTaskMethodBuilder<>;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder<>;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder<>;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder<>;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;CallSite;false;get_Binder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;CallSiteOps;false;AddRule<>;(System.Runtime.CompilerServices.CallSite,T);;Argument[1];Argument[0];generated:taint", + "System.Runtime.CompilerServices;CallSiteOps;false;GetCachedRules<>;(System.Runtime.CompilerServices.RuleCache);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;CallSiteOps;false;GetRules<>;(System.Runtime.CompilerServices.CallSite);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;Closure;false;Closure;(System.Object[],System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;Closure;false;Closure;(System.Object[],System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;ConditionalWeakTable<,>;false;GetOrCreateValue;(TKey);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;ConfiguredCancelableAsyncEnumerable<>;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;ConfiguredCancelableAsyncEnumerable<>;false;GetAsyncEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;ConfiguredCancelableAsyncEnumerable<>;false;WithCancellation;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;ConfiguredCancelableAsyncEnumerable<>;false;WithCancellation;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;ConfiguredTaskAwaitable;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;ConfiguredValueTaskAwaitable;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;ConfiguredValueTaskAwaitable<>+ConfiguredValueTaskAwaiter;false;GetResult;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;ConfiguredValueTaskAwaitable<>;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;ContractHelper;false;RaiseContractFailedEvent;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[1];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;ContractHelper;false;RaiseContractFailedEvent;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[2];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;DateTimeConstantAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;DefaultInterpolatedStringHandler;false;DefaultInterpolatedStringHandler;(System.Int32,System.Int32,System.IFormatProvider);;Argument[2];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;DefaultInterpolatedStringHandler;false;DefaultInterpolatedStringHandler;(System.Int32,System.Int32,System.IFormatProvider,System.Span);;Argument[2];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;DefaultInterpolatedStringHandler;false;DefaultInterpolatedStringHandler;(System.Int32,System.Int32,System.IFormatProvider,System.Span);;Argument[3];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;DynamicAttribute;false;DynamicAttribute;(System.Boolean[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;DynamicAttribute;false;get_TransformFlags;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;FormattableStringFactory;false;Create;(System.String,System.Object[]);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;FormattableStringFactory;false;Create;(System.String,System.Object[]);;Argument[1].Element;ReturnValue;generated:taint", + "System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder<>;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder<>;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder<>;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;ReadOnlyCollectionBuilder;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Runtime.CompilerServices;RuntimeOps;false;CreateRuntimeVariables;(System.Object[],System.Int64[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Runtime.CompilerServices;RuntimeOps;false;CreateRuntimeVariables;(System.Object[],System.Int64[]);;Argument[1].Element;ReturnValue;generated:taint", + "System.Runtime.CompilerServices;RuntimeOps;false;ExpandoPromoteClass;(System.Dynamic.ExpandoObject,System.Object,System.Object);;Argument[2];Argument[0].Element;generated:taint", + "System.Runtime.CompilerServices;RuntimeOps;false;ExpandoTryGetValue;(System.Dynamic.ExpandoObject,System.Object,System.Int32,System.String,System.Boolean,System.Object);;Argument[0].Element;ReturnValue;generated:taint", + "System.Runtime.CompilerServices;RuntimeOps;false;ExpandoTrySetValue;(System.Dynamic.ExpandoObject,System.Object,System.Int32,System.Object,System.String,System.Boolean);;Argument[3];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;RuntimeOps;false;MergeRuntimeVariables;(System.Runtime.CompilerServices.IRuntimeVariables,System.Runtime.CompilerServices.IRuntimeVariables,System.Int32[]);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;RuntimeOps;false;MergeRuntimeVariables;(System.Runtime.CompilerServices.IRuntimeVariables,System.Runtime.CompilerServices.IRuntimeVariables,System.Int32[]);;Argument[1];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;RuntimeOps;false;MergeRuntimeVariables;(System.Runtime.CompilerServices.IRuntimeVariables,System.Runtime.CompilerServices.IRuntimeVariables,System.Int32[]);;Argument[2].Element;ReturnValue;generated:taint", + "System.Runtime.CompilerServices;RuntimeOps;false;Quote;(System.Linq.Expressions.Expression,System.Object,System.Object[]);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;RuntimeWrappedException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Runtime.CompilerServices;RuntimeWrappedException;false;RuntimeWrappedException;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;RuntimeWrappedException;false;get_WrappedException;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;StrongBox<>;false;StrongBox;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;StrongBox<>;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;StrongBox<>;false;set_Value;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;SwitchExpressionException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Runtime.CompilerServices;SwitchExpressionException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;TupleElementNamesAttribute;false;TupleElementNamesAttribute;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Runtime.CompilerServices;TupleElementNamesAttribute;false;get_TransformNames;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.CompilerServices;ValueTaskAwaiter<>;false;GetResult;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.ExceptionServices;ExceptionDispatchInfo;false;Capture;(System.Exception);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.ExceptionServices;ExceptionDispatchInfo;false;SetCurrentStackTrace;(System.Exception);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.ExceptionServices;ExceptionDispatchInfo;false;SetRemoteStackTrace;(System.Exception,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.ExceptionServices;ExceptionDispatchInfo;false;SetRemoteStackTrace;(System.Exception,System.String);;Argument[1];Argument[0];generated:taint", + "System.Runtime.ExceptionServices;ExceptionDispatchInfo;false;SetRemoteStackTrace;(System.Exception,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Runtime.ExceptionServices;ExceptionDispatchInfo;false;get_SourceException;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;ArrayWithOffset;false;ArrayWithOffset;(System.Object,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.InteropServices;ArrayWithOffset;false;GetArray;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;CLong;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;COMException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;CULong;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;ComAwareEventInfo;false;GetAddMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;ComAwareEventInfo;false;GetRaiseMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;ComAwareEventInfo;false;GetRemoveMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;ComAwareEventInfo;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;ComAwareEventInfo;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;ComAwareEventInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;ComAwareEventInfo;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;CriticalHandle;false;CriticalHandle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.InteropServices;CriticalHandle;false;SetHandle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.InteropServices;ExternalException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;GCHandle;false;FromIntPtr;(System.IntPtr);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.InteropServices;GCHandle;false;ToIntPtr;(System.Runtime.InteropServices.GCHandle);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.InteropServices;HandleRef;false;HandleRef;(System.Object,System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.InteropServices;HandleRef;false;HandleRef;(System.Object,System.IntPtr);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.InteropServices;HandleRef;false;ToIntPtr;(System.Runtime.InteropServices.HandleRef);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.InteropServices;HandleRef;false;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;HandleRef;false;get_Wrapper;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;Marshal;false;GenerateProgIdForType;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.InteropServices;Marshal;false;InitHandle;(System.Runtime.InteropServices.SafeHandle,System.IntPtr);;Argument[1];Argument[0];generated:taint", + "System.Runtime.InteropServices;MemoryMarshal;false;CreateFromPinnedArray<>;(T[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.Runtime.InteropServices;MemoryMarshal;false;TryGetMemoryManager<,>;(System.ReadOnlyMemory,TManager);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.InteropServices;MemoryMarshal;false;TryGetMemoryManager<,>;(System.ReadOnlyMemory,TManager,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.InteropServices;MemoryMarshal;false;TryGetString;(System.ReadOnlyMemory,System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.InteropServices;SafeHandle;false;DangerousGetHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.InteropServices;SafeHandle;false;SafeHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.InteropServices;SafeHandle;false;SetHandle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.InteropServices;SequenceMarshal;false;TryGetArray<>;(System.Buffers.ReadOnlySequence,System.ArraySegment);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.InteropServices;SequenceMarshal;false;TryGetReadOnlyMemory<>;(System.Buffers.ReadOnlySequence,System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.InteropServices;SequenceMarshal;false;TryGetReadOnlySequenceSegment<>;(System.Buffers.ReadOnlySequence,System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector128;false;Abs<>;(System.Runtime.Intrinsics.Vector128);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector128;false;WithElement<>;(System.Runtime.Intrinsics.Vector128,System.Int32,T);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector128;false;WithLower<>;(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector64);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector128;false;WithUpper<>;(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector64);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector128<>;false;op_UnaryPlus;(System.Runtime.Intrinsics.Vector128<>);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector256;false;Abs<>;(System.Runtime.Intrinsics.Vector256);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector256;false;WithElement<>;(System.Runtime.Intrinsics.Vector256,System.Int32,T);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector256;false;WithLower<>;(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector128);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector256;false;WithUpper<>;(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector128);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector256<>;false;op_UnaryPlus;(System.Runtime.Intrinsics.Vector256<>);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector64;false;Abs<>;(System.Runtime.Intrinsics.Vector64);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector64;false;WithElement<>;(System.Runtime.Intrinsics.Vector64,System.Int32,T);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Intrinsics;Vector64<>;false;op_UnaryPlus;(System.Runtime.Intrinsics.Vector64<>);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Loader;AssemblyDependencyResolver;false;ResolveAssemblyToPath;(System.Reflection.AssemblyName);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Loader;AssemblyDependencyResolver;false;ResolveAssemblyToPath;(System.Reflection.AssemblyName);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Loader;AssemblyDependencyResolver;false;ResolveUnmanagedDllToPath;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Loader;AssemblyDependencyResolver;false;ResolveUnmanagedDllToPath;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Loader;AssemblyLoadContext;false;EnterContextualReflection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Loader;AssemblyLoadContext;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Loader;AssemblyLoadContext;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Remoting;ObjectHandle;false;ObjectHandle;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Remoting;ObjectHandle;false;Unwrap;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;BinaryFormatter;(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;BinaryFormatter;(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;get_Binder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;get_Context;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;get_SurrogateSelector;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;set_Binder;(System.Runtime.Serialization.SerializationBinder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;set_Context;(System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;set_SurrogateSelector;(System.Runtime.Serialization.ISurrogateSelector);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization.Json;DataContractJsonSerializer;false;DataContractJsonSerializer;(System.Type,System.Runtime.Serialization.Json.DataContractJsonSerializerSettings);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization.Json;DataContractJsonSerializer;false;get_DateTimeFormat;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;DataContractJsonSerializer;false;get_KnownTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding);;Argument[1];ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[1];ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean);;Argument[1];ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean,System.String);;Argument[4];ReturnValue;generated:taint", + "System.Runtime.Serialization;CollectionDataContractAttribute;false;get_ItemName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;CollectionDataContractAttribute;false;get_KeyName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;CollectionDataContractAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;CollectionDataContractAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;CollectionDataContractAttribute;false;get_ValueName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;CollectionDataContractAttribute;false;set_ItemName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;CollectionDataContractAttribute;false;set_KeyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;CollectionDataContractAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;CollectionDataContractAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;CollectionDataContractAttribute;false;set_ValueName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;DataContractAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;DataContractAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Collections.Generic.IEnumerable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Runtime.Serialization.DataContractSerializerSettings);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.String,System.String,System.Collections.Generic.IEnumerable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.String,System.String,System.Collections.Generic.IEnumerable);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.String,System.String,System.Collections.Generic.IEnumerable);;Argument[2];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.String,System.String,System.Collections.Generic.IEnumerable);;Argument[3].Element;Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IEnumerable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IEnumerable);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IEnumerable);;Argument[2];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IEnumerable);;Argument[3].Element;Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;ReadObject;(System.Xml.XmlDictionaryReader,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;ReadObject;(System.Xml.XmlDictionaryReader,System.Boolean,System.Runtime.Serialization.DataContractResolver);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;ReadObject;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;ReadObject;(System.Xml.XmlReader,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;get_DataContractResolver;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;DataContractSerializer;false;get_KnownTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;DataContractSerializerExtensions;false;GetSerializationSurrogateProvider;(System.Runtime.Serialization.DataContractSerializer);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;DataContractSerializerExtensions;false;SetSerializationSurrogateProvider;(System.Runtime.Serialization.DataContractSerializer,System.Runtime.Serialization.ISerializationSurrogateProvider);;Argument[1];Argument[0];generated:taint", + "System.Runtime.Serialization;DataMemberAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;DataMemberAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DateTimeFormat;false;DateTimeFormat;(System.String,System.IFormatProvider);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DateTimeFormat;false;DateTimeFormat;(System.String,System.IFormatProvider);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;DateTimeFormat;false;get_FormatProvider;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;DateTimeFormat;false;get_FormatString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;EnumMemberAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;EnumMemberAttribute;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;ExportOptions;false;get_KnownTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;FormatterConverter;false;Convert;(System.Object,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;FormatterConverter;false;Convert;(System.Object,System.TypeCode);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;FormatterConverter;false;ToDateTime;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;FormatterConverter;false;ToString;(System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;FormatterServices;false;GetSerializableMembers;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;FormatterServices;false;GetSerializableMembers;(System.Type,System.Runtime.Serialization.StreamingContext);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;FormatterServices;false;GetSurrogateForCyclicalReference;(System.Runtime.Serialization.ISerializationSurrogate);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;FormatterServices;false;GetTypeFromAssembly;(System.Reflection.Assembly,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;FormatterServices;false;PopulateObjectMembers;(System.Object,System.Reflection.MemberInfo[],System.Object[]);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;ObjectIDGenerator;false;GetId;(System.Object,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;ObjectManager;false;GetObject;(System.Int64);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;ObjectManager;false;ObjectManager;(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;ObjectManager;false;ObjectManager;(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationEntry;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationEntry;false;get_ObjectType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationEntry;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Byte);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Char);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.DateTime);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.DateTime);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Decimal);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Double);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Int16);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Int64);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object,System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object,System.Type);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object,System.Type);;Argument[2];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.SByte);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Single);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.UInt16);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.UInt32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.UInt64);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;GetDateTime;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;GetString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;GetValue;(System.String,System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;SerializationInfo;(System.Type,System.Runtime.Serialization.IFormatterConverter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;SerializationInfo;(System.Type,System.Runtime.Serialization.IFormatterConverter);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;SetType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;UpdateValue;(System.String,System.Object,System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;UpdateValue;(System.String,System.Object,System.Type);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;UpdateValue;(System.String,System.Object,System.Type);;Argument[2];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;get_AssemblyName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;get_FullTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;get_ObjectType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;set_AssemblyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfo;false;set_FullTypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SerializationInfoEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationInfoEnumerator;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationInfoEnumerator;false;get_ObjectType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationInfoEnumerator;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SerializationObjectManager;false;SerializationObjectManager;(System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;StreamingContext;false;StreamingContext;(System.Runtime.Serialization.StreamingContextStates,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;StreamingContext;false;get_Context;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SurrogateSelector;false;ChainSelector;(System.Runtime.Serialization.ISurrogateSelector);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;SurrogateSelector;false;ChainSelector;(System.Runtime.Serialization.ISurrogateSelector);;Argument[Qualifier];Argument[0];generated:taint", + "System.Runtime.Serialization;SurrogateSelector;false;GetNextSelector;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;SurrogateSelector;false;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;XPathQueryGenerator;false;CreateFromDataContractSerializer;(System.Type,System.Reflection.MemberInfo[],System.Text.StringBuilder,System.Xml.XmlNamespaceManager);;Argument[2];ReturnValue;generated:taint", + "System.Runtime.Serialization;XmlObjectSerializer;true;ReadObject;(System.Xml.XmlDictionaryReader);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;XmlObjectSerializer;true;ReadObject;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;XmlObjectSerializer;true;ReadObject;(System.Xml.XmlReader,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Serialization;XmlSerializableServices;false;WriteNodes;(System.Xml.XmlWriter,System.Xml.XmlNode[]);;Argument[1].Element;Argument[0];generated:taint", + "System.Runtime.Serialization;XsdDataContractExporter;false;XsdDataContractExporter;(System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Serialization;XsdDataContractExporter;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Serialization;XsdDataContractExporter;false;set_Options;(System.Runtime.Serialization.ExportOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Versioning;FrameworkName;false;FrameworkName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Versioning;FrameworkName;false;FrameworkName;(System.String,System.Version,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Versioning;FrameworkName;false;FrameworkName;(System.String,System.Version,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Runtime.Versioning;FrameworkName;false;FrameworkName;(System.String,System.Version,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Runtime.Versioning;FrameworkName;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Versioning;FrameworkName;false;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Versioning;FrameworkName;false;get_Identifier;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Versioning;FrameworkName;false;get_Profile;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Versioning;FrameworkName;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Versioning;TargetFrameworkAttribute;false;TargetFrameworkAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Versioning;TargetFrameworkAttribute;false;get_FrameworkDisplayName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Versioning;TargetFrameworkAttribute;false;get_FrameworkName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime.Versioning;TargetFrameworkAttribute;false;set_FrameworkDisplayName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Runtime.Versioning;VersioningHelper;false;MakeVersionSafeName;(System.String,System.Runtime.Versioning.ResourceScope,System.Runtime.Versioning.ResourceScope);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Versioning;VersioningHelper;false;MakeVersionSafeName;(System.String,System.Runtime.Versioning.ResourceScope,System.Runtime.Versioning.ResourceScope,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Runtime.Versioning;VersioningHelper;false;MakeVersionSafeName;(System.String,System.Runtime.Versioning.ResourceScope,System.Runtime.Versioning.ResourceScope,System.Type);;Argument[3];ReturnValue;generated:taint", + "System.Runtime;DependentHandle;false;get_Dependent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime;DependentHandle;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Runtime;DependentHandle;false;get_TargetAndDependent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;ExtendedProtectionPolicy;(System.Security.Authentication.ExtendedProtection.PolicyEnforcement,System.Security.Authentication.ExtendedProtection.ChannelBinding);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;ExtendedProtectionPolicy;(System.Security.Authentication.ExtendedProtection.PolicyEnforcement,System.Security.Authentication.ExtendedProtection.ProtectionScenario,System.Security.Authentication.ExtendedProtection.ServiceNameCollection);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;get_CustomChannelBinding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;get_CustomServiceNames;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicyTypeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System.Security.Authentication.ExtendedProtection;ServiceNameCollection;false;Merge;(System.Collections.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Security.Authentication.ExtendedProtection;ServiceNameCollection;false;Merge;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Security.Authentication.ExtendedProtection;ServiceNameCollection;false;ServiceNameCollection;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Claims;Claim;false;Claim;(System.IO.BinaryReader,System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;Claim;false;Claim;(System.IO.BinaryReader,System.Security.Claims.ClaimsIdentity);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Claims;Claim;false;Claim;(System.Security.Claims.Claim,System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;Claim;false;Claim;(System.Security.Claims.Claim,System.Security.Claims.ClaimsIdentity);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Claims;Claim;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;Claim;false;Clone;(System.Security.Claims.ClaimsIdentity);;Argument[0];ReturnValue;generated:taint", + "System.Security.Claims;Claim;false;Clone;(System.Security.Claims.ClaimsIdentity);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;Claim;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;Claim;false;WriteTo;(System.IO.BinaryWriter,System.Byte[]);;Argument[1].Element;Argument[0];generated:taint", + "System.Security.Claims;Claim;false;get_CustomSerializationData;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;Claim;false;get_Issuer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;Claim;false;get_OriginalIssuer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;Claim;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;Claim;false;get_Subject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;Claim;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;Claim;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;Claim;false;get_ValueType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;AddClaim;(System.Security.Claims.Claim);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsIdentity;false;AddClaims;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.IO.BinaryReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[4];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsIdentity;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;CreateClaim;(System.IO.BinaryReader);;Argument[0];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;CreateClaim;(System.IO.BinaryReader);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;FindAll;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;FindFirst;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;WriteTo;(System.IO.BinaryWriter,System.Byte[]);;Argument[1].Element;Argument[0];generated:taint", + "System.Security.Claims;ClaimsIdentity;false;get_Actor;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;get_AuthenticationType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;get_BootstrapContext;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;get_Claims;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;get_CustomSerializationData;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;get_Label;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;get_NameClaimType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;get_RoleClaimType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsIdentity;false;set_Actor;(System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsIdentity;false;set_BootstrapContext;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsIdentity;false;set_Label;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;AddIdentities;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;AddIdentity;(System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;ClaimsPrincipal;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;ClaimsPrincipal;(System.IO.BinaryReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;ClaimsPrincipal;(System.Security.Principal.IIdentity);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;ClaimsPrincipal;(System.Security.Principal.IPrincipal);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;CreateClaimsIdentity;(System.IO.BinaryReader);;Argument[0];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;FindAll;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;FindFirst;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;WriteTo;(System.IO.BinaryWriter,System.Byte[]);;Argument[1].Element;Argument[0];generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;get_Claims;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;get_CustomSerializationData;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;get_Identities;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Claims;ClaimsPrincipal;false;get_Identity;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;CmsRecipientCollection;false;Add;(System.Security.Cryptography.Pkcs.CmsRecipient);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;CmsRecipientCollection;false;CmsRecipientCollection;(System.Security.Cryptography.Pkcs.CmsRecipient);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;CmsRecipientCollection;false;CopyTo;(System.Security.Cryptography.Pkcs.CmsRecipient[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Security.Cryptography.Pkcs;CmsRecipientCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;CmsRecipientCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;CmsRecipientCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Cryptography.Pkcs;CmsRecipientEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;CmsSigner;false;get_SignaturePadding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;CmsSigner;false;set_SignaturePadding;(System.Security.Cryptography.RSASignaturePadding);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;KeyAgreeRecipientInfo;false;get_Date;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;KeyAgreeRecipientInfo;false;get_EncryptedKey;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;KeyAgreeRecipientInfo;false;get_KeyEncryptionAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;KeyAgreeRecipientInfo;false;get_OriginatorIdentifierOrKey;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;KeyAgreeRecipientInfo;false;get_OtherKeyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;KeyAgreeRecipientInfo;false;get_RecipientIdentifier;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;KeyTransRecipientInfo;false;get_EncryptedKey;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;KeyTransRecipientInfo;false;get_KeyEncryptionAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;KeyTransRecipientInfo;false;get_RecipientIdentifier;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs12CertBag;false;GetCertificateType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs12CertBag;false;Pkcs12CertBag;(System.Security.Cryptography.Oid,System.ReadOnlyMemory);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs12CertBag;false;get_EncodedCertificate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs12SafeBag;false;GetBagId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs12SafeBag;false;Pkcs12SafeBag;(System.String,System.ReadOnlyMemory,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs12SafeBag;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs12SafeBag;false;set_Attributes;(System.Security.Cryptography.CryptographicAttributeObjectCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs12SafeContents;false;AddSafeBag;(System.Security.Cryptography.Pkcs.Pkcs12SafeBag);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs12SafeContents;false;AddSecret;(System.Security.Cryptography.Oid,System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs12SafeContents;false;GetBags;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs12SecretBag;false;GetSecretType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs12SecretBag;false;get_SecretValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9AttributeObject;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9AttributeObject;false;get_Oid;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9ContentType;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9ContentType;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9DocumentDescription;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9DocumentDescription;false;Pkcs9DocumentDescription;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9DocumentDescription;false;get_DocumentDescription;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9DocumentName;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9DocumentName;false;Pkcs9DocumentName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9DocumentName;false;get_DocumentName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9LocalKeyId;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9MessageDigest;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9MessageDigest;false;get_MessageDigest;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9SigningTime;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9SigningTime;false;Pkcs9SigningTime;(System.DateTime);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Pkcs;Pkcs9SigningTime;false;get_SigningTime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;RecipientInfoCollection;false;CopyTo;(System.Security.Cryptography.Pkcs.RecipientInfo[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Security.Cryptography.Pkcs;RecipientInfoCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;RecipientInfoCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;RecipientInfoCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Cryptography.Pkcs;RecipientInfoEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampRequest;false;GetNonce;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampToken;false;AsSignedCms;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampToken;false;VerifySignatureForData;(System.ReadOnlySpan,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[2].Element;ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampToken;false;VerifySignatureForData;(System.ReadOnlySpan,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampToken;false;VerifySignatureForHash;(System.ReadOnlySpan,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[3].Element;ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampToken;false;VerifySignatureForHash;(System.ReadOnlySpan,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampToken;false;VerifySignatureForHash;(System.ReadOnlySpan,System.Security.Cryptography.Oid,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[3].Element;ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampToken;false;VerifySignatureForHash;(System.ReadOnlySpan,System.Security.Cryptography.Oid,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampToken;false;VerifySignatureForSignerInfo;(System.Security.Cryptography.Pkcs.SignerInfo,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[2].Element;ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampToken;false;VerifySignatureForSignerInfo;(System.Security.Cryptography.Pkcs.SignerInfo,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampTokenInfo;false;GetNonce;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampTokenInfo;false;GetSerialNumber;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampTokenInfo;false;GetTimestampAuthorityName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;Rfc3161TimestampTokenInfo;false;get_Timestamp;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;SignerInfo;false;get_Certificate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;SignerInfo;false;get_DigestAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;SignerInfo;false;get_SignatureAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;SignerInfo;false;get_SignedAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;SignerInfo;false;get_UnsignedAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;SignerInfoCollection;false;CopyTo;(System.Security.Cryptography.Pkcs.SignerInfo[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Security.Cryptography.Pkcs;SignerInfoCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;SignerInfoCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Pkcs;SignerInfoCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Cryptography.Pkcs;SignerInfoEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.Security.Cryptography.X509Certificates.X500DistinguishedName,System.Security.Cryptography.ECDsa,System.Security.Cryptography.HashAlgorithmName);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.Security.Cryptography.X509Certificates.X500DistinguishedName,System.Security.Cryptography.RSA,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.Security.Cryptography.X509Certificates.X500DistinguishedName,System.Security.Cryptography.RSA,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding);;Argument[3];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.String,System.Security.Cryptography.ECDsa,System.Security.Cryptography.HashAlgorithmName);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.String,System.Security.Cryptography.RSA,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.String,System.Security.Cryptography.RSA,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding);;Argument[3];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;PublicKey;false;PublicKey;(System.Security.Cryptography.Oid,System.Security.Cryptography.AsnEncodedData,System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;PublicKey;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;PublicKey;false;get_Oid;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X500DistinguishedName;false;X500DistinguishedName;(System.Security.Cryptography.X509Certificates.X500DistinguishedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X500DistinguishedName;false;X500DistinguishedName;(System.String,System.Security.Cryptography.X509Certificates.X500DistinguishedNameFlags);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X500DistinguishedName;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509BasicConstraintsExtension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2;false;ToString;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_Extensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_IssuerName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_NotAfter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_NotBefore;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_PrivateKey;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_PublicKey;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_SerialNumber;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_SignatureAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_SubjectName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_Thumbprint;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;Remove;(System.Security.Cryptography.X509Certificates.X509Certificate2);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;RemoveRange;(System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;RemoveRange;(System.Security.Cryptography.X509Certificates.X509Certificate2[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;X509Certificate2Collection;(System.Security.Cryptography.X509Certificates.X509Certificate2);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;X509Certificate2Collection;(System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;X509Certificate2Collection;(System.Security.Cryptography.X509Certificates.X509Certificate2[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate2Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate;false;GetCertHashString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate;false;GetKeyAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate;false;GetSerialNumberString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate;false;ToString;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate;false;get_Issuer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Certificate;false;get_Subject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509CertificateCollection+X509CertificateEnumerator;false;X509CertificateEnumerator;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509CertificateCollection+X509CertificateEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;Remove;(System.Security.Cryptography.X509Certificates.X509Certificate);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;X509CertificateCollection;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;X509CertificateCollection;(System.Security.Cryptography.X509Certificates.X509Certificate[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509Chain;false;get_ChainElements;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Chain;false;get_ChainPolicy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Chain;false;get_ChainStatus;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Chain;false;set_ChainPolicy;(System.Security.Cryptography.X509Certificates.X509ChainPolicy);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509ChainElementCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509ChainElementCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Cryptography.X509Certificates;X509ChainElementEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509ChainStatus;false;get_StatusInformation;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509ChainStatus;false;set_StatusInformation;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509EnhancedKeyUsageExtension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509EnhancedKeyUsageExtension;false;get_EnhancedKeyUsages;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509Extension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Cryptography.X509Certificates;X509ExtensionEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509KeyUsageExtension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509SignatureGenerator;false;CreateForECDsa;(System.Security.Cryptography.ECDsa);;Argument[0];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509SignatureGenerator;false;CreateForRSA;(System.Security.Cryptography.RSA,System.Security.Cryptography.RSASignaturePadding);;Argument[0];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509SignatureGenerator;false;CreateForRSA;(System.Security.Cryptography.RSA,System.Security.Cryptography.RSASignaturePadding);;Argument[1];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509SignatureGenerator;false;get_PublicKey;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.X509Certificates;X509SubjectKeyIdentifierExtension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.X509Certificates;X509SubjectKeyIdentifierExtension;false;get_SubjectKeyIdentifier;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;CipherData;false;CipherData;(System.Security.Cryptography.Xml.CipherReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;CipherData;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;CipherData;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;CipherData;false;get_CipherReference;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;CipherData;false;get_CipherValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;CipherData;false;set_CipherReference;(System.Security.Cryptography.Xml.CipherReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;CipherReference;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;CipherReference;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;DSAKeyValue;false;DSAKeyValue;(System.Security.Cryptography.DSA);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;DSAKeyValue;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;DSAKeyValue;false;set_Key;(System.Security.Cryptography.DSA);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;DataObject;(System.String,System.String,System.String,System.Xml.XmlElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;DataObject;(System.String,System.String,System.String,System.Xml.XmlElement);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;DataObject;(System.String,System.String,System.String,System.Xml.XmlElement);;Argument[2];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;DataObject;(System.String,System.String,System.String,System.Xml.XmlElement);;Argument[3].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;get_MimeType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;set_Data;(System.Xml.XmlNodeList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;set_Encoding;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;DataObject;false;set_MimeType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedData;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedData;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedKey;false;AddReference;(System.Security.Cryptography.Xml.DataReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedKey;false;AddReference;(System.Security.Cryptography.Xml.KeyReference);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedKey;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedKey;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedKey;false;get_CarriedKeyName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedKey;false;get_Recipient;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedKey;false;get_ReferenceList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedKey;false;set_CarriedKeyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedKey;false;set_Recipient;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedReference;false;EncryptedReference;(System.String,System.Security.Cryptography.Xml.TransformChain);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedReference;false;EncryptedReference;(System.String,System.Security.Cryptography.Xml.TransformChain);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedReference;false;get_ReferenceType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedReference;false;get_TransformChain;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedReference;false;get_Uri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedReference;false;set_ReferenceType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedReference;false;set_TransformChain;(System.Security.Cryptography.Xml.TransformChain);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedReference;false;set_Uri;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedReference;true;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedReference;true;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;false;get_KeyInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;false;set_KeyInfo;(System.Security.Cryptography.Xml.KeyInfo);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;get_CipherData;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;get_EncryptionMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;get_EncryptionProperties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;get_MimeType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;set_CipherData;(System.Security.Cryptography.Xml.CipherData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;set_Encoding;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;set_EncryptionMethod;(System.Security.Cryptography.Xml.EncryptionMethod);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;set_MimeType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedType;true;set_Type;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedXml;false;EncryptedXml;(System.Xml.XmlDocument,System.Security.Policy.Evidence);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedXml;false;EncryptedXml;(System.Xml.XmlDocument,System.Security.Policy.Evidence);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedXml;false;GetDecryptionKey;(System.Security.Cryptography.Xml.EncryptedData,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedXml;false;GetIdElement;(System.Xml.XmlDocument,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedXml;false;get_DocumentEvidence;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedXml;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedXml;false;get_Recipient;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedXml;false;get_Resolver;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptedXml;false;set_DocumentEvidence;(System.Security.Policy.Evidence);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedXml;false;set_Encoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedXml;false;set_Recipient;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptedXml;false;set_Resolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptionMethod;false;EncryptionMethod;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptionMethod;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptionMethod;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptionMethod;false;get_KeyAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptionMethod;false;set_KeyAlgorithm;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptionProperty;false;EncryptionProperty;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptionProperty;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptionProperty;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptionProperty;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptionProperty;false;get_PropertyElement;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptionProperty;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptionProperty;false;set_PropertyElement;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptionPropertyCollection;false;Add;(System.Security.Cryptography.Xml.EncryptionProperty);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptionPropertyCollection;false;CopyTo;(System.Security.Cryptography.Xml.EncryptionProperty[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Security.Cryptography.Xml;EncryptionPropertyCollection;false;Insert;(System.Int32,System.Security.Cryptography.Xml.EncryptionProperty);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;EncryptionPropertyCollection;false;Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptionPropertyCollection;false;get_ItemOf;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptionPropertyCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;EncryptionPropertyCollection;false;set_ItemOf;(System.Int32,System.Security.Cryptography.Xml.EncryptionProperty);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfo;false;AddClause;(System.Security.Cryptography.Xml.KeyInfoClause);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfo;false;GetEnumerator;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfo;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfo;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfo;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoEncryptedKey;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfoEncryptedKey;false;KeyInfoEncryptedKey;(System.Security.Cryptography.Xml.EncryptedKey);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoEncryptedKey;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoEncryptedKey;false;get_EncryptedKey;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfoEncryptedKey;false;set_EncryptedKey;(System.Security.Cryptography.Xml.EncryptedKey);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoName;false;KeyInfoName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoName;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoName;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfoName;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoNode;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfoNode;false;KeyInfoNode;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoNode;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoNode;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfoNode;false;set_Value;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoRetrievalMethod;false;KeyInfoRetrievalMethod;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoRetrievalMethod;false;KeyInfoRetrievalMethod;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoRetrievalMethod;false;KeyInfoRetrievalMethod;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoRetrievalMethod;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoRetrievalMethod;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfoRetrievalMethod;false;get_Uri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfoRetrievalMethod;false;set_Type;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoRetrievalMethod;false;set_Uri;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoX509Data;false;AddSubjectKeyId;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoX509Data;false;AddSubjectName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoX509Data;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;KeyInfoX509Data;false;get_CRL;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfoX509Data;false;get_Certificates;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfoX509Data;false;get_IssuerSerials;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfoX509Data;false;get_SubjectKeyIds;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfoX509Data;false;get_SubjectNames;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;KeyInfoX509Data;false;set_CRL;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;RSAKeyValue;false;RSAKeyValue;(System.Security.Cryptography.RSA);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;RSAKeyValue;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;RSAKeyValue;false;set_Key;(System.Security.Cryptography.RSA);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Reference;false;AddTransform;(System.Security.Cryptography.Xml.Transform);;Argument[Qualifier];Argument[0];generated:taint", + "System.Security.Cryptography.Xml;Reference;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Reference;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Reference;false;Reference;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Reference;false;Reference;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Reference;false;get_DigestMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Reference;false;get_DigestValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Reference;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Reference;false;get_TransformChain;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Reference;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Reference;false;get_Uri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Reference;false;set_DigestMethod;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Reference;false;set_DigestValue;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Reference;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Reference;false;set_TransformChain;(System.Security.Cryptography.Xml.TransformChain);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Reference;false;set_Type;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Reference;false;set_Uri;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;ReferenceList;false;Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;ReferenceList;false;get_ItemOf;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;ReferenceList;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;ReferenceList;false;set_ItemOf;(System.Int32,System.Security.Cryptography.Xml.EncryptedReference);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Signature;false;AddObject;(System.Security.Cryptography.Xml.DataObject);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Signature;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Signature;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Signature;false;get_KeyInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Signature;false;get_ObjectList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Signature;false;get_SignatureValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Signature;false;get_SignedInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Signature;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Signature;false;set_KeyInfo;(System.Security.Cryptography.Xml.KeyInfo);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Signature;false;set_ObjectList;(System.Collections.IList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Signature;false;set_SignatureValue;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Signature;false;set_SignedInfo;(System.Security.Cryptography.Xml.SignedInfo);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;AddReference;(System.Security.Cryptography.Xml.Reference);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;AddReference;(System.Security.Cryptography.Xml.Reference);;Argument[Qualifier];Argument[0];generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;get_CanonicalizationMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;get_CanonicalizationMethodObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;get_References;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;get_SignatureLength;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;get_SignatureMethod;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;set_CanonicalizationMethod;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;set_SignatureLength;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedInfo;false;set_SignatureMethod;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;GetIdElement;(System.Xml.XmlDocument,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;LoadXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;SignedXml;(System.Xml.XmlDocument);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;SignedXml;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;get_EncryptedXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;get_KeyInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;get_SafeCanonicalizationMethods;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;get_Signature;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;get_SignatureFormatValidator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;get_SignatureValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;get_SignedInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;get_SigningKey;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;get_SigningKeyName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;set_EncryptedXml;(System.Security.Cryptography.Xml.EncryptedXml);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;set_KeyInfo;(System.Security.Cryptography.Xml.KeyInfo);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;set_Resolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;set_SigningKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;SignedXml;false;set_SigningKeyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Transform;false;GetXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Transform;false;get_Algorithm;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Transform;false;get_Context;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Transform;false;get_PropagatedNamespaces;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Transform;false;get_Resolver;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;Transform;false;set_Algorithm;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Transform;false;set_Context;(System.Xml.XmlElement);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;Transform;false;set_Resolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;TransformChain;false;Add;(System.Security.Cryptography.Xml.Transform);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;TransformChain;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;TransformChain;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDecryptionTransform;false;AddExceptUri;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDecryptionTransform;false;GetOutput;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDecryptionTransform;false;GetOutput;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDecryptionTransform;false;LoadInnerXml;(System.Xml.XmlNodeList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDecryptionTransform;false;LoadInput;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDecryptionTransform;false;get_EncryptedXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDecryptionTransform;false;get_InputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDecryptionTransform;false;get_OutputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDecryptionTransform;false;set_EncryptedXml;(System.Security.Cryptography.Xml.EncryptedXml);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDsigBase64Transform;false;GetOutput;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigBase64Transform;false;GetOutput;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigBase64Transform;false;get_InputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigBase64Transform;false;get_OutputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigC14NTransform;false;GetOutput;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigC14NTransform;false;GetOutput;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigC14NTransform;false;LoadInput;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDsigC14NTransform;false;get_InputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigC14NTransform;false;get_OutputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigEnvelopedSignatureTransform;false;GetOutput;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigEnvelopedSignatureTransform;false;GetOutput;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigEnvelopedSignatureTransform;false;LoadInput;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDsigEnvelopedSignatureTransform;false;get_InputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigEnvelopedSignatureTransform;false;get_OutputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigExcC14NTransform;false;GetOutput;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigExcC14NTransform;false;GetOutput;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigExcC14NTransform;false;LoadInnerXml;(System.Xml.XmlNodeList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDsigExcC14NTransform;false;LoadInput;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDsigExcC14NTransform;false;XmlDsigExcC14NTransform;(System.Boolean,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDsigExcC14NTransform;false;get_InclusiveNamespacesPrefixList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigExcC14NTransform;false;get_InputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigExcC14NTransform;false;get_OutputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigExcC14NTransform;false;set_InclusiveNamespacesPrefixList;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDsigXPathTransform;false;LoadInnerXml;(System.Xml.XmlNodeList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDsigXPathTransform;false;LoadInput;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDsigXPathTransform;false;get_InputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigXPathTransform;false;get_OutputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigXsltTransform;false;GetInnerXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigXsltTransform;false;LoadInnerXml;(System.Xml.XmlNodeList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDsigXsltTransform;false;LoadInput;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography.Xml;XmlDsigXsltTransform;false;get_InputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlDsigXsltTransform;false;get_OutputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlLicenseTransform;false;GetOutput;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlLicenseTransform;false;GetOutput;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlLicenseTransform;false;get_Decryptor;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlLicenseTransform;false;get_InputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlLicenseTransform;false;get_OutputTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography.Xml;XmlLicenseTransform;false;set_Decryptor;(System.Security.Cryptography.Xml.IRelDecryptor);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.Security.Cryptography.Oid,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.Security.Cryptography.Oid,System.ReadOnlySpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.String,System.ReadOnlySpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;AsnEncodedData;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;AsnEncodedData;false;Format;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;AsnEncodedData;false;get_Oid;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;AsnEncodedData;false;get_RawData;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;AsnEncodedData;false;set_Oid;(System.Security.Cryptography.Oid);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;AsnEncodedDataCollection;false;AsnEncodedDataCollection;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;AsnEncodedDataCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;AsnEncodedDataCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Cryptography;AsnEncodedDataEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;CryptoStream;false;CryptoStream;(System.IO.Stream,System.Security.Cryptography.ICryptoTransform,System.Security.Cryptography.CryptoStreamMode,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;CryptoStream;false;CryptoStream;(System.IO.Stream,System.Security.Cryptography.ICryptoTransform,System.Security.Cryptography.CryptoStreamMode,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;CryptoStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Security.Cryptography;CryptoStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;CryptographicAttributeObject;false;CryptographicAttributeObject;(System.Security.Cryptography.Oid,System.Security.Cryptography.AsnEncodedDataCollection);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;CryptographicAttributeObject;false;get_Oid;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;CryptographicAttributeObjectCollection;false;Add;(System.Security.Cryptography.CryptographicAttributeObject);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;CryptographicAttributeObjectCollection;false;CopyTo;(System.Security.Cryptography.CryptographicAttributeObject[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Security.Cryptography;CryptographicAttributeObjectCollection;false;CryptographicAttributeObjectCollection;(System.Security.Cryptography.CryptographicAttributeObject);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;CryptographicAttributeObjectCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;CryptographicAttributeObjectCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;CryptographicAttributeObjectCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Cryptography;CryptographicAttributeObjectEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;CspParameters;false;get_ParentWindowHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;CspParameters;false;set_ParentWindowHandle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;DSASignatureDeformatter;false;DSASignatureDeformatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;DSASignatureDeformatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;DSASignatureFormatter;false;DSASignatureFormatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;DSASignatureFormatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;ECCurve;false;get_Oid;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;ECCurve;false;set_Oid;(System.Security.Cryptography.Oid);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;HMAC;false;get_HashName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;HMAC;false;set_HashName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;HashAlgorithmName;false;HashAlgorithmName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;HashAlgorithmName;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;HashAlgorithmName;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;IncrementalHash;false;CreateHMAC;(System.Security.Cryptography.HashAlgorithmName,System.Byte[]);;Argument[0];ReturnValue;generated:taint", + "System.Security.Cryptography;IncrementalHash;false;CreateHMAC;(System.Security.Cryptography.HashAlgorithmName,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System.Security.Cryptography;IncrementalHash;false;CreateHash;(System.Security.Cryptography.HashAlgorithmName);;Argument[0];ReturnValue;generated:taint", + "System.Security.Cryptography;IncrementalHash;false;get_AlgorithmName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;Oid;false;FromFriendlyName;(System.String,System.Security.Cryptography.OidGroup);;Argument[0];ReturnValue;generated:taint", + "System.Security.Cryptography;Oid;false;FromOidValue;(System.String,System.Security.Cryptography.OidGroup);;Argument[0];ReturnValue;generated:taint", + "System.Security.Cryptography;Oid;false;Oid;(System.Security.Cryptography.Oid);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;Oid;false;Oid;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;Oid;false;Oid;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;Oid;false;Oid;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;Oid;false;get_FriendlyName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;Oid;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;Oid;false;set_FriendlyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;Oid;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;OidCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;OidCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;OidCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Cryptography;OidEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;PKCS1MaskGenerationMethod;false;get_HashName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;PKCS1MaskGenerationMethod;false;set_HashName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;PasswordDeriveBytes;false;PasswordDeriveBytes;(System.Byte[],System.Byte[],System.String,System.Int32,System.Security.Cryptography.CspParameters);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security.Cryptography;PasswordDeriveBytes;false;PasswordDeriveBytes;(System.Byte[],System.Byte[],System.String,System.Int32,System.Security.Cryptography.CspParameters);;Argument[2];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;PasswordDeriveBytes;false;PasswordDeriveBytes;(System.Byte[],System.Byte[],System.String,System.Int32,System.Security.Cryptography.CspParameters);;Argument[4];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;PasswordDeriveBytes;false;get_HashName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;PasswordDeriveBytes;false;set_HashName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAEncryptionPadding;false;CreateOaep;(System.Security.Cryptography.HashAlgorithmName);;Argument[0];ReturnValue;generated:taint", + "System.Security.Cryptography;RSAEncryptionPadding;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;RSAEncryptionPadding;false;get_OaepHashAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;RSAOAEPKeyExchangeDeformatter;false;RSAOAEPKeyExchangeDeformatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAOAEPKeyExchangeDeformatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAOAEPKeyExchangeFormatter;false;RSAOAEPKeyExchangeFormatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAOAEPKeyExchangeFormatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAOAEPKeyExchangeFormatter;false;get_Rng;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;RSAOAEPKeyExchangeFormatter;false;set_Rng;(System.Security.Cryptography.RandomNumberGenerator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAPKCS1KeyExchangeDeformatter;false;RSAPKCS1KeyExchangeDeformatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAPKCS1KeyExchangeDeformatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAPKCS1KeyExchangeDeformatter;false;get_RNG;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;RSAPKCS1KeyExchangeDeformatter;false;set_RNG;(System.Security.Cryptography.RandomNumberGenerator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAPKCS1KeyExchangeFormatter;false;RSAPKCS1KeyExchangeFormatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAPKCS1KeyExchangeFormatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAPKCS1KeyExchangeFormatter;false;get_Rng;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Cryptography;RSAPKCS1KeyExchangeFormatter;false;set_Rng;(System.Security.Cryptography.RandomNumberGenerator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAPKCS1SignatureDeformatter;false;RSAPKCS1SignatureDeformatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAPKCS1SignatureDeformatter;false;SetHashAlgorithm;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAPKCS1SignatureDeformatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAPKCS1SignatureFormatter;false;RSAPKCS1SignatureFormatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAPKCS1SignatureFormatter;false;SetHashAlgorithm;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;RSAPKCS1SignatureFormatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Cryptography;SafeEvpPKeyHandle;false;DuplicateHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Permissions;FileDialogPermission;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Permissions;FileIOPermission;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Permissions;PrincipalPermission;false;Copy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Permissions;PrincipalPermission;false;Intersect;(System.Security.IPermission);;Argument[0];ReturnValue;generated:taint", + "System.Security.Permissions;PrincipalPermission;false;Intersect;(System.Security.IPermission);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Permissions;PrincipalPermission;false;Union;(System.Security.IPermission);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Permissions;PublisherIdentityPermission;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Permissions;ReflectionPermission;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Permissions;SecurityPermission;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Permissions;StrongNameIdentityPermission;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Permissions;TypeDescriptorPermission;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Permissions;UIPermission;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Permissions;ZoneIdentityPermission;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Policy;HashMembershipCondition;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Policy;PolicyStatement;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Policy;PublisherMembershipCondition;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Policy;StrongNameMembershipCondition;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Policy;ZoneMembershipCondition;false;Copy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security.Principal;GenericIdentity;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.Security.Principal.GenericIdentity);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security.Principal;GenericIdentity;false;get_AuthenticationType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Principal;GenericIdentity;false;get_Claims;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Principal;GenericIdentity;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security.Principal;GenericPrincipal;false;GenericPrincipal;(System.Security.Principal.IIdentity,System.String[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security.Principal;GenericPrincipal;false;get_Identity;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security;HostProtectionException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Security;PermissionSet;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Security;SecurityElement;false;AddAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security;SecurityElement;false;AddAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security;SecurityElement;false;AddChild;(System.Security.SecurityElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security;SecurityElement;false;Attribute;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security;SecurityElement;false;Copy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security;SecurityElement;false;Escape;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Security;SecurityElement;false;SearchForChildByTag;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security;SecurityElement;false;SearchForTextOfTag;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security;SecurityElement;false;SecurityElement;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security;SecurityElement;false;SecurityElement;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security;SecurityElement;false;SecurityElement;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Security;SecurityElement;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security;SecurityElement;false;get_Children;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security;SecurityElement;false;get_Tag;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security;SecurityElement;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Security;SecurityElement;false;set_Children;(System.Collections.ArrayList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Security;SecurityElement;false;set_Tag;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security;SecurityElement;false;set_Text;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Security;SecurityException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.ServiceModel.Syndication;Atom10FeedFormatter;false;WriteItem;(System.Xml.XmlWriter,System.ServiceModel.Syndication.SyndicationItem,System.Uri);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;Atom10FeedFormatter;false;WriteItems;(System.Xml.XmlWriter,System.Collections.Generic.IEnumerable,System.Uri);;Argument[1].Element;Argument[0];generated:taint", + "System.ServiceModel.Syndication;AtomPub10CategoriesDocumentFormatter;false;AtomPub10CategoriesDocumentFormatter;(System.Type,System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;AtomPub10CategoriesDocumentFormatter;false;AtomPub10CategoriesDocumentFormatter;(System.Type,System.Type);;Argument[1];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;AtomPub10ServiceDocumentFormatter;false;AtomPub10ServiceDocumentFormatter;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;CategoriesDocument;false;Create;(System.Collections.ObjectModel.Collection,System.Boolean,System.String);;Argument[0].Element;ReturnValue;generated:taint", + "System.ServiceModel.Syndication;CategoriesDocument;false;get_AttributeExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;CategoriesDocument;false;get_ElementExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;CategoriesDocument;true;WriteAttributeExtensions;(System.Xml.XmlWriter,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.ServiceModel.Syndication;CategoriesDocumentFormatter;false;CategoriesDocumentFormatter;(System.ServiceModel.Syndication.CategoriesDocument);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;CategoriesDocumentFormatter;false;get_Document;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;CategoriesDocumentFormatter;true;SetDocument;(System.ServiceModel.Syndication.CategoriesDocument);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;InlineCategoriesDocument;false;InlineCategoriesDocument;(System.Collections.Generic.IEnumerable,System.Boolean,System.String);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;InlineCategoriesDocument;false;get_Categories;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;ResourceCollectionInfo;false;ResourceCollectionInfo;(System.ServiceModel.Syndication.TextSyndicationContent,System.Uri,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;ResourceCollectionInfo;false;ResourceCollectionInfo;(System.ServiceModel.Syndication.TextSyndicationContent,System.Uri,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[3].Element;Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;ResourceCollectionInfo;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.ServiceModel.Syndication;ResourceCollectionInfo;false;get_Accepts;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;ResourceCollectionInfo;false;get_AttributeExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;ResourceCollectionInfo;false;get_Categories;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;ResourceCollectionInfo;false;get_ElementExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;Rss20FeedFormatter;false;SetFeed;(System.ServiceModel.Syndication.SyndicationFeed);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;Rss20FeedFormatter;false;WriteItem;(System.Xml.XmlWriter,System.ServiceModel.Syndication.SyndicationItem,System.Uri);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;Rss20FeedFormatter;false;WriteItems;(System.Xml.XmlWriter,System.Collections.Generic.IEnumerable,System.Uri);;Argument[1].Element;Argument[0];generated:taint", + "System.ServiceModel.Syndication;ServiceDocument;false;ServiceDocument;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;ServiceDocument;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.ServiceModel.Syndication;ServiceDocument;false;get_AttributeExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;ServiceDocument;false;get_ElementExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;ServiceDocument;false;get_Workspaces;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;ServiceDocumentFormatter;false;ServiceDocumentFormatter;(System.ServiceModel.Syndication.ServiceDocument);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;ServiceDocumentFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.CategoriesDocument,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;ServiceDocumentFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.ResourceCollectionInfo,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;ServiceDocumentFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.ServiceDocument,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;ServiceDocumentFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.Workspace,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;ServiceDocumentFormatter;false;get_Document;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;ServiceDocumentFormatter;true;SetDocument;(System.ServiceModel.Syndication.ServiceDocument);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationCategory;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationCategory;false;get_AttributeExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationCategory;false;get_ElementExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationContent;false;CreateUrlContent;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationContent;false;CreateXmlContent;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationContent;false;WriteTo;(System.Xml.XmlWriter,System.String,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationContent;false;get_AttributeExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;GetObject<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;GetObject<>;(System.Runtime.Serialization.XmlObjectSerializer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;GetObject<>;(System.Xml.Serialization.XmlSerializer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;GetReader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;SyndicationElementExtension;(System.Object,System.Xml.Serialization.XmlSerializer);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;SyndicationElementExtension;(System.Object,System.Xml.Serialization.XmlSerializer);;Argument[1];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;SyndicationElementExtension;(System.String,System.String,System.Object,System.Runtime.Serialization.XmlObjectSerializer);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;SyndicationElementExtension;(System.String,System.String,System.Object,System.Runtime.Serialization.XmlObjectSerializer);;Argument[1];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;SyndicationElementExtension;(System.String,System.String,System.Object,System.Runtime.Serialization.XmlObjectSerializer);;Argument[2];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;SyndicationElementExtension;(System.String,System.String,System.Object,System.Runtime.Serialization.XmlObjectSerializer);;Argument[3];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;SyndicationElementExtension;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;get_OuterName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtension;false;get_OuterNamespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;Add;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;Add;(System.Object,System.Runtime.Serialization.DataContractSerializer);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;Add;(System.Object,System.Xml.Serialization.XmlSerializer);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;Add;(System.String,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;Add;(System.String,System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;Add;(System.String,System.String,System.Object);;Argument[2];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;Add;(System.String,System.String,System.Object,System.Runtime.Serialization.XmlObjectSerializer);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;Add;(System.String,System.String,System.Object,System.Runtime.Serialization.XmlObjectSerializer);;Argument[1];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;Add;(System.String,System.String,System.Object,System.Runtime.Serialization.XmlObjectSerializer);;Argument[2];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;Add;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;GetReaderAtElementExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;InsertItem;(System.Int32,System.ServiceModel.Syndication.SyndicationElementExtension);;Argument[1];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;ReadElementExtensions<>;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;ReadElementExtensions<>;(System.String,System.String,System.Runtime.Serialization.XmlObjectSerializer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;ReadElementExtensions<>;(System.String,System.String,System.Xml.Serialization.XmlSerializer);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationElementExtensionCollection;false;SetItem;(System.Int32,System.ServiceModel.Syndication.SyndicationElementExtension);;Argument[1];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;Clone;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;SyndicationFeed;(System.ServiceModel.Syndication.SyndicationFeed,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;SyndicationFeed;(System.String,System.String,System.Uri,System.String,System.DateTimeOffset,System.Collections.Generic.IEnumerable);;Argument[4];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;SyndicationFeed;(System.String,System.String,System.Uri,System.String,System.DateTimeOffset,System.Collections.Generic.IEnumerable);;Argument[5].Element;Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;get_AttributeExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;get_Authors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;get_Categories;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;get_Contributors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;get_ElementExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;get_LastUpdatedTime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;get_Links;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;set_Items;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeed;false;set_LastUpdatedTime;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeedFormatter;false;SyndicationFeedFormatter;(System.ServiceModel.Syndication.SyndicationFeed);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeedFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.SyndicationCategory,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeedFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.SyndicationFeed,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeedFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.SyndicationItem,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeedFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.SyndicationLink,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeedFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.SyndicationPerson,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationFeedFormatter;false;get_Feed;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationFeedFormatter;true;SetFeed;(System.ServiceModel.Syndication.SyndicationFeed);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;SyndicationItem;(System.ServiceModel.Syndication.SyndicationItem);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;SyndicationItem;(System.String,System.ServiceModel.Syndication.SyndicationContent,System.Uri,System.String,System.DateTimeOffset);;Argument[4];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;get_AttributeExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;get_Authors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;get_Categories;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;get_Contributors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;get_ElementExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;get_LastUpdatedTime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;get_Links;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;get_PublishDate;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;set_LastUpdatedTime;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationItem;false;set_PublishDate;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationItemFormatter;false;SyndicationItemFormatter;(System.ServiceModel.Syndication.SyndicationItem);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationItemFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.SyndicationCategory,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationItemFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.SyndicationItem,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationItemFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.SyndicationLink,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationItemFormatter;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.ServiceModel.Syndication.SyndicationPerson,System.String);;Argument[1];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationItemFormatter;false;get_Item;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationItemFormatter;true;SetItem;(System.ServiceModel.Syndication.SyndicationItem);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;SyndicationLink;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationLink;false;get_AttributeExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationLink;false;get_ElementExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationPerson;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.ServiceModel.Syndication;SyndicationPerson;false;get_AttributeExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;SyndicationPerson;false;get_ElementExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;UrlSyndicationContent;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;UrlSyndicationContent;false;UrlSyndicationContent;(System.ServiceModel.Syndication.UrlSyndicationContent);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;UrlSyndicationContent;false;UrlSyndicationContent;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;UrlSyndicationContent;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;Workspace;false;Workspace;(System.ServiceModel.Syndication.TextSyndicationContent,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;Workspace;false;WriteAttributeExtensions;(System.Xml.XmlWriter,System.String);;Argument[Qualifier];Argument[0];generated:taint", + "System.ServiceModel.Syndication;Workspace;false;get_AttributeExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;Workspace;false;get_Collections;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;Workspace;false;get_ElementExtensions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;XmlSyndicationContent;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;XmlSyndicationContent;false;GetReaderAtContent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.ServiceModel.Syndication;XmlSyndicationContent;false;XmlSyndicationContent;(System.ServiceModel.Syndication.XmlSyndicationContent);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;XmlSyndicationContent;false;XmlSyndicationContent;(System.String,System.Object,System.Runtime.Serialization.XmlObjectSerializer);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;XmlSyndicationContent;false;XmlSyndicationContent;(System.String,System.Object,System.Xml.Serialization.XmlSerializer);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;XmlSyndicationContent;false;XmlSyndicationContent;(System.String,System.ServiceModel.Syndication.SyndicationElementExtension);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;XmlSyndicationContent;false;XmlSyndicationContent;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.ServiceModel.Syndication;XmlSyndicationContent;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Encodings.Web;TextEncoder;false;Encode;(System.IO.TextWriter,System.String);;Argument[1];Argument[0];generated:taint", + "System.Text.Encodings.Web;TextEncoder;true;Encode;(System.IO.TextWriter,System.Char[],System.Int32,System.Int32);;Argument[1].Element;Argument[0];generated:taint", + "System.Text.Encodings.Web;TextEncoder;true;Encode;(System.IO.TextWriter,System.String,System.Int32,System.Int32);;Argument[1];Argument[0];generated:taint", + "System.Text.Encodings.Web;TextEncoder;true;Encode;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json.Nodes;JsonArray;false;Add<>;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json.Nodes;JsonArray;false;Add<>;(T);;Argument[Qualifier];Argument[0];generated:taint", + "System.Text.Json.Nodes;JsonArray;false;Create;(System.Text.Json.JsonElement,System.Nullable);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json.Nodes;JsonArray;false;JsonArray;(System.Text.Json.Nodes.JsonNodeOptions,System.Text.Json.Nodes.JsonNode[]);;Argument[Qualifier];Argument[1].Element;generated:taint", + "System.Text.Json.Nodes;JsonArray;false;JsonArray;(System.Text.Json.Nodes.JsonNode[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Text.Json.Nodes;JsonNode;false;AsArray;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json.Nodes;JsonNode;false;AsObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json.Nodes;JsonNode;false;AsValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json.Nodes;JsonNode;false;Parse;(System.Text.Json.Utf8JsonReader,System.Nullable);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json.Nodes;JsonNode;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json.Nodes;JsonNode;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json.Nodes;JsonNode;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json.Nodes;JsonNode;false;get_Root;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Text.Json.Nodes;JsonNode;false;set_Parent;(System.Text.Json.Nodes.JsonNode);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json.Nodes;JsonObject;false;Create;(System.Text.Json.JsonElement,System.Nullable);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json.Nodes;JsonValue;false;Create<>;(T,System.Text.Json.Serialization.Metadata.JsonTypeInfo,System.Nullable);;Argument[1];ReturnValue;generated:taint", + "System.Text.Json.Serialization.Metadata;JsonTypeInfo<>;false;get_SerializeHandler;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json.Serialization;JsonSerializerContext;false;JsonSerializerContext;(System.Text.Json.JsonSerializerOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json.Serialization;JsonSerializerContext;false;JsonSerializerContext;(System.Text.Json.JsonSerializerOptions);;Argument[Qualifier];Argument[0];generated:taint", + "System.Text.Json.Serialization;JsonSerializerContext;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json.Serialization;JsonStringEnumConverter;false;JsonStringEnumConverter;(System.Text.Json.JsonNamingPolicy,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json.SourceGeneration;JsonSourceGenerator;false;GetSerializableTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonDocument;false;Parse;(System.Buffers.ReadOnlySequence,System.Text.Json.JsonDocumentOptions);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json;JsonDocument;false;Parse;(System.IO.Stream,System.Text.Json.JsonDocumentOptions);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json;JsonDocument;false;Parse;(System.ReadOnlyMemory,System.Text.Json.JsonDocumentOptions);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json;JsonDocument;false;ParseValue;(System.Text.Json.Utf8JsonReader);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json;JsonDocument;false;TryParseValue;(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonDocument);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json;JsonDocument;false;get_RootElement;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonElement+ArrayEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonElement+ArrayEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonElement+ObjectEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonElement;false;Clone;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Text.Json;JsonElement;false;EnumerateArray;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonElement;false;EnumerateObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonElement;false;GetProperty;(System.ReadOnlySpan);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonElement;false;GetProperty;(System.ReadOnlySpan);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonElement;false;GetProperty;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonElement;false;ParseValue;(System.Text.Json.Utf8JsonReader);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json;JsonElement;false;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonElement;false;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonElement;false;TryGetProperty;(System.String,System.Text.Json.JsonElement);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonElement;false;TryParseValue;(System.Text.Json.Utf8JsonReader,System.Nullable);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json;JsonElement;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonEncodedText;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Text.Json;JsonException;false;JsonException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;JsonException;false;JsonException;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;JsonException;false;JsonException;(System.String,System.Exception);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;JsonException;false;JsonException;(System.String,System.String,System.Nullable,System.Nullable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;JsonException;false;JsonException;(System.String,System.String,System.Nullable,System.Nullable,System.Exception);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;JsonException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonReaderState;false;JsonReaderState;(System.Text.Json.JsonReaderOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;JsonReaderState;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonSerializer;false;Deserialize;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json;JsonSerializer;false;Deserialize;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.Serialization.JsonSerializerContext);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json;JsonSerializer;false;Deserialize<>;(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonSerializerOptions);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json;JsonSerializer;false;Deserialize<>;(System.Text.Json.Utf8JsonReader,System.Text.Json.Serialization.Metadata.JsonTypeInfo);;Argument[0];ReturnValue;generated:taint", + "System.Text.Json;JsonSerializerOptions;false;JsonSerializerOptions;(System.Text.Json.JsonSerializerOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;JsonSerializerOptions;false;get_DictionaryKeyPolicy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonSerializerOptions;false;get_Encoder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonSerializerOptions;false;get_PropertyNamingPolicy;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonSerializerOptions;false;get_ReferenceHandler;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;JsonSerializerOptions;false;set_DictionaryKeyPolicy;(System.Text.Json.JsonNamingPolicy);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;JsonSerializerOptions;false;set_Encoder;(System.Text.Encodings.Web.JavaScriptEncoder);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;JsonSerializerOptions;false;set_PropertyNamingPolicy;(System.Text.Json.JsonNamingPolicy);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;JsonSerializerOptions;false;set_ReferenceHandler;(System.Text.Json.Serialization.ReferenceHandler);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;Utf8JsonReader;false;Utf8JsonReader;(System.Buffers.ReadOnlySequence,System.Boolean,System.Text.Json.JsonReaderState);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;Utf8JsonReader;false;Utf8JsonReader;(System.Buffers.ReadOnlySequence,System.Boolean,System.Text.Json.JsonReaderState);;Argument[2];Argument[Qualifier];generated:taint", + "System.Text.Json;Utf8JsonReader;false;Utf8JsonReader;(System.ReadOnlySpan,System.Boolean,System.Text.Json.JsonReaderState);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;Utf8JsonReader;false;Utf8JsonReader;(System.ReadOnlySpan,System.Boolean,System.Text.Json.JsonReaderState);;Argument[2];Argument[Qualifier];generated:taint", + "System.Text.Json;Utf8JsonReader;false;get_CurrentState;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;Utf8JsonReader;false;get_Position;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.Json;Utf8JsonWriter;false;Reset;(System.Buffers.IBufferWriter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;Utf8JsonWriter;false;Reset;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;Utf8JsonWriter;false;Utf8JsonWriter;(System.Buffers.IBufferWriter,System.Text.Json.JsonWriterOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;Utf8JsonWriter;false;Utf8JsonWriter;(System.Buffers.IBufferWriter,System.Text.Json.JsonWriterOptions);;Argument[1];Argument[Qualifier];generated:taint", + "System.Text.Json;Utf8JsonWriter;false;Utf8JsonWriter;(System.IO.Stream,System.Text.Json.JsonWriterOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.Json;Utf8JsonWriter;false;Utf8JsonWriter;(System.IO.Stream,System.Text.Json.JsonWriterOptions);;Argument[1];Argument[Qualifier];generated:taint", + "System.Text.Json;Utf8JsonWriter;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;CaptureCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Group;false;Synchronized;(System.Text.RegularExpressions.Group);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;GroupCollection;false;TryGetValue;(System.String,System.Text.RegularExpressions.Group);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;GroupCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;GroupCollection;false;get_Values;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Match;false;NextMatch;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Match;false;Synchronized;(System.Text.RegularExpressions.Match);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;MatchCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Text.RegularExpressions;Regex;false;Escape;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;GroupNameFromNumber;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;IsMatch;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;Regex;false;IsMatch;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;Regex;false;Match;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;Regex;false;Match;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;Regex;false;Match;(System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;Regex;false;Matches;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Matches;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions);;Argument[1];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[1];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[3];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.String,System.Text.RegularExpressions.RegexOptions);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Split;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;Regex;false;Split;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Split;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;Regex;false;Split;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Split;(System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;Regex;false;Split;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Split;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Split;(System.String,System.String,System.Text.RegularExpressions.RegexOptions);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Split;(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;Unescape;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;get_CapNames;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;get_Caps;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;get_MatchTimeout;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;Regex;false;set_CapNames;(System.Collections.IDictionary);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;Regex;false;set_Caps;(System.Collections.IDictionary);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexCompilationInfo;false;RegexCompilationInfo;(System.String,System.Text.RegularExpressions.RegexOptions,System.String,System.String,System.Boolean,System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexCompilationInfo;false;RegexCompilationInfo;(System.String,System.Text.RegularExpressions.RegexOptions,System.String,System.String,System.Boolean,System.TimeSpan);;Argument[2];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexCompilationInfo;false;RegexCompilationInfo;(System.String,System.Text.RegularExpressions.RegexOptions,System.String,System.String,System.Boolean,System.TimeSpan);;Argument[3];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexCompilationInfo;false;RegexCompilationInfo;(System.String,System.Text.RegularExpressions.RegexOptions,System.String,System.String,System.Boolean,System.TimeSpan);;Argument[5];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexCompilationInfo;false;get_MatchTimeout;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;RegexCompilationInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;RegexCompilationInfo;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;RegexCompilationInfo;false;get_Pattern;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;RegexCompilationInfo;false;set_MatchTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexCompilationInfo;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexCompilationInfo;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexCompilationInfo;false;set_Pattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexMatchTimeoutException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Text.RegularExpressions;RegexParseException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean,System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean,System.TimeSpan);;Argument[1];Argument[Qualifier];generated:taint", + "System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean,System.TimeSpan);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;ASCIIEncoding;false;GetDecoder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;ASCIIEncoding;false;GetEncoder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;Decoder;false;get_Fallback;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;Decoder;false;get_FallbackBuffer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;Decoder;false;set_Fallback;(System.Text.DecoderFallback);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text;DecoderFallbackException;false;DecoderFallbackException;(System.String,System.Byte[],System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Text;DecoderFallbackException;false;get_BytesUnknown;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;DecoderReplacementFallback;false;CreateFallbackBuffer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;DecoderReplacementFallback;false;DecoderReplacementFallback;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text;DecoderReplacementFallback;false;get_DefaultString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;DecoderReplacementFallbackBuffer;false;DecoderReplacementFallbackBuffer;(System.Text.DecoderReplacementFallback);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text;Encoder;false;get_Fallback;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;Encoder;false;get_FallbackBuffer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;Encoder;false;set_Fallback;(System.Text.EncoderFallback);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text;EncoderReplacementFallback;false;CreateFallbackBuffer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;EncoderReplacementFallback;false;EncoderReplacementFallback;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text;EncoderReplacementFallback;false;get_DefaultString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;EncoderReplacementFallbackBuffer;false;EncoderReplacementFallbackBuffer;(System.Text.EncoderReplacementFallback);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text;Encoding;false;Convert;(System.Text.Encoding,System.Text.Encoding,System.Byte[]);;Argument[2].Element;ReturnValue;generated:taint", + "System.Text;Encoding;false;Convert;(System.Text.Encoding,System.Text.Encoding,System.Byte[],System.Int32,System.Int32);;Argument[2].Element;ReturnValue;generated:taint", + "System.Text;Encoding;false;CreateTranscodingStream;(System.IO.Stream,System.Text.Encoding,System.Text.Encoding,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Text;Encoding;false;CreateTranscodingStream;(System.IO.Stream,System.Text.Encoding,System.Text.Encoding,System.Boolean);;Argument[1];ReturnValue;generated:taint", + "System.Text;Encoding;false;CreateTranscodingStream;(System.IO.Stream,System.Text.Encoding,System.Text.Encoding,System.Boolean);;Argument[2];ReturnValue;generated:taint", + "System.Text;Encoding;false;Encoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];Argument[Qualifier];generated:taint", + "System.Text;Encoding;false;Encoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[2];Argument[Qualifier];generated:taint", + "System.Text;Encoding;false;GetEncoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];ReturnValue;generated:taint", + "System.Text;Encoding;false;GetEncoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[2];ReturnValue;generated:taint", + "System.Text;Encoding;false;GetEncoding;(System.String,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];ReturnValue;generated:taint", + "System.Text;Encoding;false;GetEncoding;(System.String,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[2];ReturnValue;generated:taint", + "System.Text;Encoding;false;get_DecoderFallback;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;Encoding;false;get_EncoderFallback;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;Encoding;false;set_DecoderFallback;(System.Text.DecoderFallback);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text;Encoding;false;set_EncoderFallback;(System.Text.EncoderFallback);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text;Encoding;true;GetDecoder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;Encoding;true;GetEncoder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;EncodingExtensions;false;RemovePreamble;(System.Text.Encoding);;Argument[0];ReturnValue;generated:taint", + "System.Text;EncodingProvider;true;GetEncoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];ReturnValue;generated:taint", + "System.Text;EncodingProvider;true;GetEncoding;(System.String,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];ReturnValue;generated:taint", + "System.Text;SpanLineEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;SpanLineEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;SpanRuneEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;SpanRuneEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder+AppendInterpolatedStringHandler;false;AppendFormatted;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text;StringBuilder+AppendInterpolatedStringHandler;false;AppendFormatted<>;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text;StringBuilder+AppendInterpolatedStringHandler;false;AppendFormatted<>;(T,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text;StringBuilder+AppendInterpolatedStringHandler;false;AppendInterpolatedStringHandler;(System.Int32,System.Int32,System.Text.StringBuilder);;Argument[2];Argument[Qualifier];generated:taint", + "System.Text;StringBuilder+AppendInterpolatedStringHandler;false;AppendInterpolatedStringHandler;(System.Int32,System.Int32,System.Text.StringBuilder,System.IFormatProvider);;Argument[2];Argument[Qualifier];generated:taint", + "System.Text;StringBuilder+AppendInterpolatedStringHandler;false;AppendInterpolatedStringHandler;(System.Int32,System.Int32,System.Text.StringBuilder,System.IFormatProvider);;Argument[3];Argument[Qualifier];generated:taint", + "System.Text;StringBuilder+AppendInterpolatedStringHandler;false;AppendLiteral;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Text;StringBuilder+ChunkEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringBuilder+ChunkEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Append;(System.IFormatProvider,System.Text.StringBuilder+AppendInterpolatedStringHandler);;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringBuilder;false;Append;(System.Text.StringBuilder+AppendInterpolatedStringHandler);;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringBuilder;false;AppendLine;(System.IFormatProvider,System.Text.StringBuilder+AppendInterpolatedStringHandler);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;AppendLine;(System.Text.StringBuilder+AppendInterpolatedStringHandler);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Clear;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringBuilder;false;GetChunks;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.Byte);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.Char);;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.Char[]);;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.Decimal);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.Double);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.Int16);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.Int64);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.ReadOnlySpan);;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.SByte);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.Single);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.String);;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.String,System.Int32);;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.UInt16);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.UInt32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Insert;(System.Int32,System.UInt64);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Remove;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringBuilder;false;Replace;(System.Char,System.Char);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Replace;(System.Char,System.Char,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringBuilder;false;Replace;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;StringBuilder;false;Replace;(System.String,System.String,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringRuneEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Text;StringRuneEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;UTF32Encoding;false;GetEncoder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;UTF8Encoding;false;GetDecoder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;UTF8Encoding;false;GetEncoder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Text;UnicodeEncoding;false;GetEncoder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.RateLimiting;ConcurrencyLimiter;false;AcquireCore;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.RateLimiting;ConcurrencyLimiter;false;ConcurrencyLimiter;(System.Threading.RateLimiting.ConcurrencyLimiterOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.RateLimiting;ConcurrencyLimiter;false;WaitAsyncCore;(System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.RateLimiting;MetadataName;false;Create<>;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Threading.RateLimiting;MetadataName<>;false;MetadataName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.RateLimiting;MetadataName<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.RateLimiting;MetadataName<>;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.RateLimiting;RateLimitLease;false;TryGetMetadata<>;(System.Threading.RateLimiting.MetadataName,T);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.RateLimiting;RateLimitLease;true;GetAllMetadata;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.RateLimiting;RateLimiter;false;Acquire;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.RateLimiting;RateLimiter;false;WaitAsync;(System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.RateLimiting;TokenBucketRateLimiter;false;TokenBucketRateLimiter;(System.Threading.RateLimiting.TokenBucketRateLimiterOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;BatchBlock<>;false;BatchBlock;(System.Int32,System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;BatchBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BatchBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BatchBlock<>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;BatchedJoinBlock;(System.Int32,System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;get_Target1;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;get_Target2;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;get_Target3;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;BatchedJoinBlock;(System.Int32,System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;get_Target1;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;get_Target2;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;TryReceiveAll;(System.Collections.Generic.IList);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BufferBlock<>;false;BufferBlock;(System.Threading.Tasks.Dataflow.DataflowBlockOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;BufferBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BufferBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;BufferBlock<>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;AsObservable<>;(System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;AsObserver<>;(System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;Encapsulate<,>;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;Encapsulate<,>;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[1];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;LinkTo<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[0];Argument[1];generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;LinkTo<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;LinkTo<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;Post<>;(System.Threading.Tasks.Dataflow.ITargetBlock,TInput);;Argument[1];Argument[0];generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;Receive<>;(System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;Receive<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;Receive<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;Receive<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;ReceiveAsync<>;(System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;ReceiveAsync<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;ReceiveAsync<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;ReceiveAsync<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;SendAsync<>;(System.Threading.Tasks.Dataflow.ITargetBlock,TInput,System.Threading.CancellationToken);;Argument[1];Argument[0];generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlock;false;TryReceive<>;(System.Threading.Tasks.Dataflow.IReceivableSourceBlock,TOutput);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;get_NameFormat;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;get_TaskScheduler;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;set_CancellationToken;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;set_NameFormat;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;set_TaskScheduler;(System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;JoinBlock;(System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock>);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;get_Target1;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;get_Target2;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;get_Target3;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,>;false;JoinBlock;(System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock>);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,>;false;get_Target1;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;JoinBlock<,>;false;get_Target2;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;TransformBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;TransformBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;TransformBlock<,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;TransformManyBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;TransformManyBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;TransformManyBlock<,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];Argument[0];generated:taint", + "System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;OfferMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,T,System.Threading.Tasks.Dataflow.ISourceBlock,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[Qualifier];Argument[1];generated:taint", + "System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;TryReceiveAll;(System.Collections.Generic.IList);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;get_Completion;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Sources;ManualResetValueTaskSourceCore<>;false;GetResult;(System.Int16);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks.Sources;ManualResetValueTaskSourceCore<>;false;SetException;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks.Sources;ManualResetValueTaskSourceCore<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;ConcurrentExclusiveSchedulerPair;false;ConcurrentExclusiveSchedulerPair;(System.Threading.Tasks.TaskScheduler,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;ConcurrentExclusiveSchedulerPair;false;get_ConcurrentScheduler;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ConcurrentExclusiveSchedulerPair;false;get_ExclusiveScheduler;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ParallelLoopResult;false;get_LowestBreakIteration;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ParallelOptions;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ParallelOptions;false;get_TaskScheduler;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ParallelOptions;false;set_CancellationToken;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;ParallelOptions;false;set_TaskScheduler;(System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;Task;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;Delay;(System.Int32,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;Delay;(System.TimeSpan,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;FromCanceled;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;WaitAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;WaitAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;WaitAsync;(System.TimeSpan);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;WaitAsync;(System.TimeSpan,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;WaitAsync;(System.TimeSpan,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;WhenAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;WhenAll;(System.Threading.Tasks.Task[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;WhenAny;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;WhenAny;(System.Threading.Tasks.Task,System.Threading.Tasks.Task);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;WhenAny;(System.Threading.Tasks.Task,System.Threading.Tasks.Task);;Argument[1];ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;WhenAny;(System.Threading.Tasks.Task[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Threading.Tasks;Task;false;get_AsyncState;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;Task<>;false;WaitAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;Task<>;false;WaitAsync;(System.TimeSpan);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;Task<>;false;WaitAsync;(System.TimeSpan,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskAsyncEnumerableExtensions;false;ConfigureAwait;(System.IAsyncDisposable,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskAsyncEnumerableExtensions;false;ConfigureAwait<>;(System.Collections.Generic.IAsyncEnumerable,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskAsyncEnumerableExtensions;false;WithCancellation<>;(System.Collections.Generic.IAsyncEnumerable,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskAsyncEnumerableExtensions;false;WithCancellation<>;(System.Collections.Generic.IAsyncEnumerable,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskCanceledException;false;TaskCanceledException;(System.Threading.Tasks.Task);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;TaskCanceledException;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskCompletionSource;false;TaskCompletionSource;(System.Object,System.Threading.Tasks.TaskCreationOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;TaskCompletionSource;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskCompletionSource<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;TaskCompletionSource<>;false;TrySetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;TaskCompletionSource<>;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskExtensions;false;Unwrap;(System.Threading.Tasks.Task);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskExtensions;false;Unwrap<>;(System.Threading.Tasks.Task>);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskFactory;false;TaskFactory;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;TaskFactory;false;TaskFactory;(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;TaskFactory;false;TaskFactory;(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[3];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;TaskFactory;false;TaskFactory;(System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;TaskFactory;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskFactory;false;get_Scheduler;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskFactory<>;false;TaskFactory;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;TaskFactory<>;false;TaskFactory;(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;TaskFactory<>;false;TaskFactory;(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[3];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;TaskFactory<>;false;TaskFactory;(System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;TaskFactory<>;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;TaskFactory<>;false;get_Scheduler;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;UnobservedTaskExceptionEventArgs;false;UnobservedTaskExceptionEventArgs;(System.AggregateException);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;UnobservedTaskExceptionEventArgs;false;get_Exception;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ValueTask;false;AsTask;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ValueTask;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ValueTask;false;FromResult<>;(TResult);;Argument[0];ReturnValue;generated:taint", + "System.Threading.Tasks;ValueTask;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ValueTask;false;Preserve;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ValueTask;false;ValueTask;(System.Threading.Tasks.Sources.IValueTaskSource,System.Int16);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;ValueTask;false;ValueTask;(System.Threading.Tasks.Task);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;ValueTask<>;false;AsTask;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ValueTask<>;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ValueTask<>;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ValueTask<>;false;Preserve;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ValueTask<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading.Tasks;ValueTask<>;false;ValueTask;(System.Threading.Tasks.Sources.IValueTaskSource,System.Int16);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;ValueTask<>;false;ValueTask;(System.Threading.Tasks.Task);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;ValueTask<>;false;ValueTask;(TResult);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading.Tasks;ValueTask<>;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;AbandonedMutexException;false;AbandonedMutexException;(System.Int32,System.Threading.WaitHandle);;Argument[1];Argument[Qualifier];generated:taint", + "System.Threading;AbandonedMutexException;false;AbandonedMutexException;(System.String,System.Exception,System.Int32,System.Threading.WaitHandle);;Argument[3];Argument[Qualifier];generated:taint", + "System.Threading;AbandonedMutexException;false;AbandonedMutexException;(System.String,System.Int32,System.Threading.WaitHandle);;Argument[2];Argument[Qualifier];generated:taint", + "System.Threading;AbandonedMutexException;false;get_Mutex;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;CancellationToken;false;get_WaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;CancellationTokenSource;false;get_Token;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;CompressedStack;false;CreateCopy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Threading;CountdownEvent;false;get_WaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;ExecutionContext;false;CreateCopy;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Threading;HostExecutionContextManager;false;SetHostExecutionContext;(System.Threading.HostExecutionContext);;Argument[0];ReturnValue;generated:taint", + "System.Threading;LazyInitializer;false;EnsureInitialized<>;(T);;Argument[0];ReturnValue;generated:taint", + "System.Threading;LazyInitializer;false;EnsureInitialized<>;(T,System.Boolean,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Threading;LazyInitializer;false;EnsureInitialized<>;(T,System.Boolean,System.Object);;Argument[2];ReturnValue;generated:taint", + "System.Threading;ManualResetEventSlim;false;get_WaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;PeriodicTimer;false;WaitForNextTickAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;SemaphoreSlim;false;WaitAsync;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;SemaphoreSlim;false;WaitAsync;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;SemaphoreSlim;false;WaitAsync;(System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;SemaphoreSlim;false;WaitAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;SemaphoreSlim;false;WaitAsync;(System.TimeSpan);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;SemaphoreSlim;false;WaitAsync;(System.TimeSpan,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;SemaphoreSlim;false;get_AvailableWaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;Thread;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;Thread;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading;ThreadExceptionEventArgs;false;ThreadExceptionEventArgs;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading;ThreadExceptionEventArgs;false;get_Exception;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;WaitHandle;false;set_SafeWaitHandle;(Microsoft.Win32.SafeHandles.SafeWaitHandle);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading;WaitHandle;true;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Threading;WaitHandle;true;set_Handle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint", + "System.Threading;WaitHandleExtensions;false;SetSafeWaitHandle;(System.Threading.WaitHandle,Microsoft.Win32.SafeHandles.SafeWaitHandle);;Argument[1];Argument[0];generated:taint", + "System.Timers;Timer;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Timers;Timer;false;get_SynchronizingObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Timers;Timer;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint", + "System.Timers;Timer;false;set_SynchronizingObject;(System.ComponentModel.ISynchronizeInvoke);;Argument[0];Argument[Qualifier];generated:taint", + "System.Transactions;CommittableTransaction;false;get_AsyncState;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Transactions;CommittableTransaction;false;get_AsyncWaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Transactions;Transaction;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Transactions;Transaction;false;EnlistDurable;(System.Guid,System.Transactions.ISinglePhaseNotification,System.Transactions.EnlistmentOptions);;Argument[0];ReturnValue;generated:taint", + "System.Transactions;Transaction;false;EnlistPromotableSinglePhase;(System.Transactions.IPromotableSinglePhaseNotification);;Argument[0];Argument[Qualifier];generated:taint", + "System.Transactions;Transaction;false;EnlistPromotableSinglePhase;(System.Transactions.IPromotableSinglePhaseNotification,System.Guid);;Argument[0];Argument[Qualifier];generated:taint", + "System.Transactions;Transaction;false;EnlistPromotableSinglePhase;(System.Transactions.IPromotableSinglePhaseNotification,System.Guid);;Argument[1];Argument[Qualifier];generated:taint", + "System.Transactions;Transaction;false;EnlistVolatile;(System.Transactions.IEnlistmentNotification,System.Transactions.EnlistmentOptions);;Argument[0];ReturnValue;generated:taint", + "System.Transactions;Transaction;false;EnlistVolatile;(System.Transactions.IEnlistmentNotification,System.Transactions.EnlistmentOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Transactions;Transaction;false;EnlistVolatile;(System.Transactions.ISinglePhaseNotification,System.Transactions.EnlistmentOptions);;Argument[0];ReturnValue;generated:taint", + "System.Transactions;Transaction;false;EnlistVolatile;(System.Transactions.ISinglePhaseNotification,System.Transactions.EnlistmentOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Transactions;Transaction;false;PromoteAndEnlistDurable;(System.Guid,System.Transactions.IPromotableSinglePhaseNotification,System.Transactions.ISinglePhaseNotification,System.Transactions.EnlistmentOptions);;Argument[0];ReturnValue;generated:taint", + "System.Transactions;Transaction;false;Rollback;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint", + "System.Transactions;Transaction;false;SetDistributedTransactionIdentifier;(System.Transactions.IPromotableSinglePhaseNotification,System.Guid);;Argument[1];Argument[Qualifier];generated:taint", + "System.Transactions;Transaction;false;get_PromoterType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Transactions;Transaction;false;get_TransactionInformation;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Transactions;TransactionEventArgs;false;get_Transaction;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Transactions;TransactionInformation;false;get_DistributedIdentifier;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Transactions;TransactionOptions;false;get_Timeout;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Transactions;TransactionOptions;false;set_Timeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint", + "System.Transactions;TransactionScope;false;TransactionScope;(System.Transactions.Transaction,System.TimeSpan,System.Transactions.EnterpriseServicesInteropOption);;Argument[0];Argument[Qualifier];generated:taint", + "System.Transactions;TransactionScope;false;TransactionScope;(System.Transactions.Transaction,System.TimeSpan,System.Transactions.TransactionScopeAsyncFlowOption);;Argument[0];Argument[Qualifier];generated:taint", + "System.Transactions;TransactionScope;false;TransactionScope;(System.Transactions.Transaction,System.Transactions.TransactionScopeAsyncFlowOption);;Argument[0];Argument[Qualifier];generated:taint", + "System.Web;HttpUtility;false;HtmlDecode;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Web;HttpUtility;false;HtmlDecode;(System.String,System.IO.TextWriter);;Argument[0];Argument[1];generated:taint", + "System.Web;HttpUtility;false;UrlEncodeToBytes;(System.Byte[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Web;HttpUtility;false;UrlEncodeToBytes;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.Web;HttpUtility;false;UrlEncodeToBytes;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Web;HttpUtility;false;UrlEncodeToBytes;(System.String,System.Text.Encoding);;Argument[0];ReturnValue;generated:taint", + "System.Web;HttpUtility;false;UrlPathEncode;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Windows.Markup;ValueSerializerAttribute;false;ValueSerializerAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Windows.Markup;ValueSerializerAttribute;false;ValueSerializerAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Windows.Markup;ValueSerializerAttribute;false;get_ValueSerializerType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Windows.Markup;ValueSerializerAttribute;false;get_ValueSerializerTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;Ancestors<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;Ancestors<>;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;AncestorsAndSelf;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;AncestorsAndSelf;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;Attributes;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;Attributes;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;DescendantNodes<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;DescendantNodesAndSelf;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;Descendants<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;Descendants<>;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;DescendantsAndSelf;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;DescendantsAndSelf;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;Elements<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;Elements<>;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;InDocumentOrder<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;Extensions;false;Nodes<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Linq;XAttribute;false;SetValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XAttribute;false;XAttribute;(System.Xml.Linq.XAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XAttribute;false;XAttribute;(System.Xml.Linq.XName,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XAttribute;false;XAttribute;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XAttribute;false;get_NextAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XAttribute;false;get_PreviousAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XAttribute;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XCData;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XCData;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Linq;XComment;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Linq;XComment;false;XComment;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XComment;false;XComment;(System.Xml.Linq.XComment);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XComment;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XComment;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XContainer;false;Add;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XContainer;false;Add;(System.Object);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XContainer;false;Add;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Linq;XContainer;false;Add;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml.Linq;XContainer;false;AddFirst;(System.Object);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XContainer;false;AddFirst;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml.Linq;XContainer;false;CreateWriter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XContainer;false;DescendantNodes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XContainer;false;Descendants;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XContainer;false;Descendants;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XContainer;false;Element;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XContainer;false;Elements;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XContainer;false;Elements;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XContainer;false;Nodes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XContainer;false;ReplaceNodes;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XContainer;false;ReplaceNodes;(System.Object);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XContainer;false;ReplaceNodes;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Linq;XContainer;false;ReplaceNodes;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml.Linq;XContainer;false;get_FirstNode;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XContainer;false;get_LastNode;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XDeclaration;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XDeclaration;false;XDeclaration;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDeclaration;false;XDeclaration;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDeclaration;false;XDeclaration;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDeclaration;false;XDeclaration;(System.Xml.Linq.XDeclaration);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDeclaration;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XDeclaration;false;get_Standalone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XDeclaration;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XDeclaration;false;set_Encoding;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDeclaration;false;set_Standalone;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDeclaration;false;set_Version;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocument;false;Load;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;Load;(System.IO.Stream,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;Load;(System.IO.TextReader);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;Load;(System.IO.TextReader,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;Load;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;Load;(System.String,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;Load;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;Load;(System.Xml.XmlReader,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;Parse;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;Parse;(System.String,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;Save;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XDocument;false;SaveAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XDocument;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;XDocument;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocument;false;XDocument;(System.Xml.Linq.XDeclaration,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocument;false;XDocument;(System.Xml.Linq.XDocument);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocument;false;get_Declaration;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;get_DocumentType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;get_Root;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XDocument;false;set_Declaration;(System.Xml.Linq.XDeclaration);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocumentType;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Linq;XDocumentType;false;XDocumentType;(System.String,System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocumentType;false;XDocumentType;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocumentType;false;XDocumentType;(System.String,System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocumentType;false;XDocumentType;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocumentType;false;XDocumentType;(System.Xml.Linq.XDocumentType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocumentType;false;get_InternalSubset;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XDocumentType;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XDocumentType;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XDocumentType;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XDocumentType;false;set_InternalSubset;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocumentType;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocumentType;false;set_PublicId;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XDocumentType;false;set_SystemId;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;AncestorsAndSelf;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;AncestorsAndSelf;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Attribute;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Attributes;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;DescendantNodesAndSelf;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;DescendantsAndSelf;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;DescendantsAndSelf;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Load;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Load;(System.IO.Stream,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Load;(System.IO.TextReader);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Load;(System.IO.TextReader,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Load;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Load;(System.String,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Load;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Load;(System.Xml.XmlReader,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Parse;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;Parse;(System.String,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;ReadXml;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;ReplaceAll;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;ReplaceAll;(System.Object);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XElement;false;ReplaceAll;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;ReplaceAll;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml.Linq;XElement;false;ReplaceAttributes;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;ReplaceAttributes;(System.Object);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XElement;false;ReplaceAttributes;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;ReplaceAttributes;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml.Linq;XElement;false;SaveAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;SetAttributeValue;(System.Xml.Linq.XName,System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;SetAttributeValue;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;SetElementValue;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;SetValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XName,System.Object);;Argument[Qualifier];Argument[1];generated:taint", + "System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XStreamingElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XStreamingElement);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XElement;false;get_FirstAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;get_LastAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XElement;false;set_Name;(System.Xml.Linq.XName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XElement;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XName;false;Get;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XName;false;Get;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XName;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XName;false;get_LocalName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XName;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XName;false;get_NamespaceName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XNamespace;false;GetName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XNamespace;false;GetName;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XNamespace;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XNamespace;false;get_NamespaceName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XNamespace;false;op_Addition;(System.Xml.Linq.XNamespace,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XNamespace;false;op_Addition;(System.Xml.Linq.XNamespace,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Linq;XNode;false;AddAfterSelf;(System.Object);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XNode;false;AddAfterSelf;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml.Linq;XNode;false;AddBeforeSelf;(System.Object);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XNode;false;AddBeforeSelf;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml.Linq;XNode;false;Ancestors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XNode;false;Ancestors;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XNode;false;CreateReader;(System.Xml.Linq.ReaderOptions);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XNode;false;ElementsAfterSelf;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XNode;false;ElementsAfterSelf;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XNode;false;NodesAfterSelf;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XNode;false;ReadFrom;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Linq;XNode;false;ReplaceWith;(System.Object);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XNode;false;ReplaceWith;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml.Linq;XNode;false;get_NextNode;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XObject;false;AddAnnotation;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XObject;false;Annotation;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XObject;false;Annotation<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XObject;false;Annotations;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XObject;false;Annotations<>;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XObject;false;get_BaseUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XObject;false;get_Document;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XObject;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XProcessingInstruction;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XProcessingInstruction;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Linq;XProcessingInstruction;false;XProcessingInstruction;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XProcessingInstruction;false;XProcessingInstruction;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XProcessingInstruction;false;XProcessingInstruction;(System.Xml.Linq.XProcessingInstruction);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XProcessingInstruction;false;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XProcessingInstruction;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XProcessingInstruction;false;set_Data;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XProcessingInstruction;false;set_Target;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XStreamingElement;false;XStreamingElement;(System.Xml.Linq.XName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XStreamingElement;false;XStreamingElement;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XStreamingElement;false;XStreamingElement;(System.Xml.Linq.XName,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Xml.Linq;XStreamingElement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XStreamingElement;false;set_Name;(System.Xml.Linq.XName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XText;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Linq;XText;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Linq;XText;false;XText;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XText;false;XText;(System.Xml.Linq.XText);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Linq;XText;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Linq;XText;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Resolvers;XmlPreloadedResolver;false;ResolveUri;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Resolvers;XmlPreloadedResolver;false;ResolveUri;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Resolvers;XmlPreloadedResolver;false;XmlPreloadedResolver;(System.Xml.XmlResolver,System.Xml.Resolvers.XmlKnownDtds,System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Resolvers;XmlPreloadedResolver;false;XmlPreloadedResolver;(System.Xml.XmlResolver,System.Xml.Resolvers.XmlKnownDtds,System.Collections.Generic.IEqualityComparer);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Resolvers;XmlPreloadedResolver;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;Extensions;false;GetSchemaInfo;(System.Xml.Linq.XAttribute);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Schema;Extensions;false;GetSchemaInfo;(System.Xml.Linq.XElement);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Schema;ValidationEventArgs;false;get_Exception;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;ValidationEventArgs;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlAtomicValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Xml.Schema;XmlAtomicValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlAtomicValue;false;ValueAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:value", + "System.Xml.Schema;XmlAtomicValue;false;get_TypedValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlAtomicValue;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlAtomicValue;false;get_ValueAsDateTime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlAtomicValue;false;get_XmlType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;get_AttributeGroups;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;get_Elements;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;get_Groups;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;get_Includes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;get_Notations;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;get_SchemaTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;get_TargetNamespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;get_UnhandledAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchema;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchema;false;set_TargetNamespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchema;false;set_UnhandledAttributes;(System.Xml.XmlAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchema;false;set_Version;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAll;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAnnotated;false;get_Annotation;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAnnotated;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAnnotated;false;get_UnhandledAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAnnotated;false;set_Annotation;(System.Xml.Schema.XmlSchemaAnnotation);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAnnotated;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAnnotated;false;set_UnhandledAttributes;(System.Xml.XmlAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAnnotation;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAnnotation;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAnnotation;false;get_UnhandledAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAnnotation;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAnnotation;false;set_UnhandledAttributes;(System.Xml.XmlAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAny;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAny;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAnyAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAnyAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAppInfo;false;get_Markup;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAppInfo;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAppInfo;false;set_Markup;(System.Xml.XmlNode[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAppInfo;false;set_Source;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;get_AttributeSchemaType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;get_AttributeType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;get_DefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;get_FixedValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;get_RefName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;get_SchemaType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;get_SchemaTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;set_DefaultValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;set_FixedValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;set_RefName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;set_SchemaType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAttribute;false;set_SchemaTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAttributeGroup;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttributeGroup;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttributeGroup;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttributeGroup;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttributeGroup;false;get_RedefinedAttributeGroup;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttributeGroup;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAttributeGroup;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaAttributeGroupRef;false;get_RefName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaAttributeGroupRef;false;set_RefName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaChoice;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaCollection;false;Add;(System.Xml.Schema.XmlSchema,System.Xml.XmlResolver);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaCollection;false;XmlSchemaCollection;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaCollection;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Xml.Schema;XmlSchemaComplexContent;false;get_Content;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexContent;false;set_Content;(System.Xml.Schema.XmlSchemaContent);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentExtension;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentExtension;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentExtension;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentExtension;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentExtension;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentExtension;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentExtension;false;set_Particle;(System.Xml.Schema.XmlSchemaParticle);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentRestriction;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentRestriction;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentRestriction;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentRestriction;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentRestriction;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentRestriction;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaComplexContentRestriction;false;set_Particle;(System.Xml.Schema.XmlSchemaParticle);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaComplexType;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexType;false;get_AttributeUses;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexType;false;get_AttributeWildcard;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexType;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexType;false;get_ContentModel;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexType;false;get_ContentTypeParticle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexType;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaComplexType;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaComplexType;false;set_ContentModel;(System.Xml.Schema.XmlSchemaContentModel);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaComplexType;false;set_Particle;(System.Xml.Schema.XmlSchemaParticle);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type,System.Xml.IXmlNamespaceResolver);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type,System.Xml.IXmlNamespaceResolver);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaDocumentation;false;get_Language;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaDocumentation;false;get_Markup;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaDocumentation;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaDocumentation;false;set_Language;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaDocumentation;false;set_Markup;(System.Xml.XmlNode[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaDocumentation;false;set_Source;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;get_Constraints;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;get_DefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;get_ElementSchemaType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;get_ElementType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;get_FixedValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;get_RefName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;get_SchemaType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;get_SchemaTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;get_SubstitutionGroup;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;set_DefaultValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;set_FixedValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;set_RefName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;set_SchemaType;(System.Xml.Schema.XmlSchemaType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;set_SchemaTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaElement;false;set_SubstitutionGroup;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Schema;XmlSchemaException;false;XmlSchemaException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaException;false;get_SourceSchemaObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaException;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaExternal;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaExternal;false;get_Schema;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaExternal;false;get_SchemaLocation;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaExternal;false;get_UnhandledAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaExternal;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaExternal;false;set_Schema;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaExternal;false;set_SchemaLocation;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaExternal;false;set_UnhandledAttributes;(System.Xml.XmlAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaFacet;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaFacet;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaGroup;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaGroup;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaGroup;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaGroup;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaGroup;false;set_Particle;(System.Xml.Schema.XmlSchemaGroupBase);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaGroupRef;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaGroupRef;false;get_RefName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaGroupRef;false;set_RefName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaIdentityConstraint;false;get_Fields;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaIdentityConstraint;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaIdentityConstraint;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaIdentityConstraint;false;get_Selector;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaIdentityConstraint;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaIdentityConstraint;false;set_Selector;(System.Xml.Schema.XmlSchemaXPath);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaImport;false;get_Annotation;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaImport;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaImport;false;set_Annotation;(System.Xml.Schema.XmlSchemaAnnotation);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaImport;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaInclude;false;get_Annotation;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaInclude;false;set_Annotation;(System.Xml.Schema.XmlSchemaAnnotation);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[Qualifier];Argument[1];generated:taint", + "System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaInferenceException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Schema;XmlSchemaInfo;false;get_MemberType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaInfo;false;get_SchemaAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaInfo;false;get_SchemaElement;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaInfo;false;get_SchemaType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaInfo;false;set_MemberType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaInfo;false;set_SchemaAttribute;(System.Xml.Schema.XmlSchemaAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaInfo;false;set_SchemaElement;(System.Xml.Schema.XmlSchemaElement);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaInfo;false;set_SchemaType;(System.Xml.Schema.XmlSchemaType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaKeyref;false;get_Refer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaKeyref;false;set_Refer;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaNotation;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaNotation;false;get_Public;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaNotation;false;get_System;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaNotation;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaNotation;false;set_Public;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaNotation;false;set_System;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaObject;false;get_Namespaces;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaObject;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaObject;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaObject;false;set_Namespaces;(System.Xml.Serialization.XmlSerializerNamespaces);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaObject;false;set_Parent;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaObject;false;set_SourceUri;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaObjectCollection;false;Remove;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaObjectCollection;false;XmlSchemaObjectCollection;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaObjectEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaObjectTable;false;get_Names;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaObjectTable;false;get_Values;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaRedefine;false;get_AttributeGroups;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaRedefine;false;get_Groups;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaRedefine;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaRedefine;false;get_SchemaTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSequence;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.Xml.XmlReader);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Add;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Add;(System.Xml.Schema.XmlSchema);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Add;(System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;CopyTo;(System.Xml.Schema.XmlSchema[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Remove;(System.Xml.Schema.XmlSchema);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Reprocess;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Reprocess;(System.Xml.Schema.XmlSchema);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;Schemas;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;XmlSchemaSet;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;get_CompilationSettings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;get_GlobalAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;get_GlobalElements;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;get_GlobalTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;set_CompilationSettings;(System.Xml.Schema.XmlSchemaCompilationSettings);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSet;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContent;false;get_Content;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContent;false;set_Content;(System.Xml.Schema.XmlSchemaContent);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentExtension;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentExtension;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentExtension;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentExtension;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentExtension;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_Facets;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;set_BaseType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleType;false;get_Content;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleType;false;set_Content;(System.Xml.Schema.XmlSchemaSimpleTypeContent);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeList;false;get_BaseItemType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeList;false;get_ItemType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeList;false;get_ItemTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeList;false;set_BaseItemType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeList;false;set_ItemType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeList;false;set_ItemTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;get_Facets;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;set_BaseType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeUnion;false;get_BaseMemberTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeUnion;false;get_BaseTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeUnion;false;get_MemberTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaSimpleTypeUnion;false;set_MemberTypes;(System.Xml.XmlQualifiedName[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaType;false;get_BaseSchemaType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaType;false;get_BaseXmlSchemaType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaType;false;get_Datatype;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaType;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaType;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaType;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidationException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Schema;XmlSchemaValidationException;false;SetSourceObject;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidationException;false;get_SourceObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;AddSchema;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;GetExpectedAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;GetExpectedParticles;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;Initialize;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;SkipToEndElement;(System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateAttribute;(System.String,System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[2];Argument[3];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateAttribute;(System.String,System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateAttribute;(System.String,System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateAttribute;(System.String,System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];Argument[2];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo,System.String,System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo,System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo,System.String,System.String,System.String,System.String);;Argument[Qualifier];Argument[2];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[1];Argument[0];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateText;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;ValidateWhitespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;XmlSchemaValidator;(System.Xml.XmlNameTable,System.Xml.Schema.XmlSchemaSet,System.Xml.IXmlNamespaceResolver,System.Xml.Schema.XmlSchemaValidationFlags);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;XmlSchemaValidator;(System.Xml.XmlNameTable,System.Xml.Schema.XmlSchemaSet,System.Xml.IXmlNamespaceResolver,System.Xml.Schema.XmlSchemaValidationFlags);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;XmlSchemaValidator;(System.Xml.XmlNameTable,System.Xml.Schema.XmlSchemaSet,System.Xml.IXmlNamespaceResolver,System.Xml.Schema.XmlSchemaValidationFlags);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;get_LineInfoProvider;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;get_ValidationEventSender;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;set_LineInfoProvider;(System.Xml.IXmlLineInfo);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;set_SourceUri;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;set_ValidationEventSender;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaValidator;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Schema;XmlSchemaXPath;false;get_XPath;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Schema;XmlSchemaXPath;false;set_XPath;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;CodeIdentifiers;false;Add;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;CodeIdentifiers;false;Add;(System.String,System.Object);;Argument[Qualifier];Argument[1];generated:taint", + "System.Xml.Serialization;CodeIdentifiers;false;AddUnique;(System.String,System.Object);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;CodeIdentifiers;false;AddUnique;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;CodeIdentifiers;false;AddUnique;(System.String,System.Object);;Argument[Qualifier];Argument[1];generated:taint", + "System.Xml.Serialization;CodeIdentifiers;false;MakeUnique;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;CodeIdentifiers;false;ToArray;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;ImportContext;false;ImportContext;(System.Xml.Serialization.CodeIdentifiers,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;ImportContext;false;get_TypeIdentifiers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;ImportContext;false;get_Warnings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapAttributeAttribute;false;SoapAttributeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapAttributeAttribute;false;get_AttributeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapAttributeAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapAttributeAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapAttributeAttribute;false;set_AttributeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapAttributeAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapAttributeAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapAttributeOverrides;false;get_Item;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapAttributeOverrides;false;get_Item;(System.Type,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapAttributes;false;get_SoapAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapAttributes;false;get_SoapDefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapAttributes;false;get_SoapElement;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapAttributes;false;get_SoapEnum;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapAttributes;false;get_SoapType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapAttributes;false;set_SoapAttribute;(System.Xml.Serialization.SoapAttributeAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapAttributes;false;set_SoapDefaultValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapAttributes;false;set_SoapElement;(System.Xml.Serialization.SoapElementAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapAttributes;false;set_SoapEnum;(System.Xml.Serialization.SoapEnumAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapAttributes;false;set_SoapType;(System.Xml.Serialization.SoapTypeAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapElementAttribute;false;SoapElementAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapElementAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapElementAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapElementAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapElementAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapEnumAttribute;false;SoapEnumAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapEnumAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapEnumAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapIncludeAttribute;false;SoapIncludeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapIncludeAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapIncludeAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[]);;Argument[2].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;SoapReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean);;Argument[2].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;SoapReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean);;Argument[2].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;SoapReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean,System.Xml.Serialization.XmlMappingAccess);;Argument[2].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;SoapReflectionImporter;false;ImportTypeMapping;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapReflectionImporter;false;ImportTypeMapping;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapReflectionImporter;false;ImportTypeMapping;(System.Type,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapReflectionImporter;false;SoapReflectionImporter;(System.Xml.Serialization.SoapAttributeOverrides,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapReflectionImporter;false;SoapReflectionImporter;(System.Xml.Serialization.SoapAttributeOverrides,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapSchemaMember;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapSchemaMember;false;get_MemberType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapSchemaMember;false;set_MemberName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapSchemaMember;false;set_MemberType;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapTypeAttribute;false;SoapTypeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapTypeAttribute;false;SoapTypeAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapTypeAttribute;false;SoapTypeAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapTypeAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapTypeAttribute;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;SoapTypeAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;SoapTypeAttribute;false;set_TypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;UnreferencedObjectEventArgs;false;UnreferencedObjectEventArgs;(System.Object,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;UnreferencedObjectEventArgs;false;UnreferencedObjectEventArgs;(System.Object,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;UnreferencedObjectEventArgs;false;get_UnreferencedId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;UnreferencedObjectEventArgs;false;get_UnreferencedObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAnyElementAttribute;false;XmlAnyElementAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAnyElementAttribute;false;XmlAnyElementAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAnyElementAttribute;false;XmlAnyElementAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAnyElementAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAnyElementAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAnyElementAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAnyElementAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAnyElementAttributes;false;Remove;(System.Xml.Serialization.XmlAnyElementAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlArrayAttribute;false;XmlArrayAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlArrayAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlArrayAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlArrayAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlArrayAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlArrayItemAttribute;false;XmlArrayItemAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlArrayItemAttribute;false;XmlArrayItemAttribute;(System.String,System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlArrayItemAttribute;false;XmlArrayItemAttribute;(System.String,System.Type);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlArrayItemAttribute;false;XmlArrayItemAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlArrayItemAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlArrayItemAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlArrayItemAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlArrayItemAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlArrayItemAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlArrayItemAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlArrayItemAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlArrayItemAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlArrayItemAttributes;false;Remove;(System.Xml.Serialization.XmlArrayItemAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributeAttribute;false;XmlAttributeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributeAttribute;false;XmlAttributeAttribute;(System.String,System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributeAttribute;false;XmlAttributeAttribute;(System.String,System.Type);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributeAttribute;false;XmlAttributeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributeAttribute;false;get_AttributeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributeAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributeAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributeAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributeAttribute;false;set_AttributeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributeAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributeAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributeAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributeEventArgs;false;get_Attr;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributeEventArgs;false;get_ExpectedAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributeEventArgs;false;get_ObjectBeingDeserialized;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributeOverrides;false;get_Item;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;get_XmlAnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;get_XmlAnyElements;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;get_XmlArray;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;get_XmlArrayItems;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;get_XmlAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;get_XmlChoiceIdentifier;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;get_XmlDefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;get_XmlElements;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;get_XmlEnum;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;get_XmlRoot;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;get_XmlText;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;get_XmlType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlAttributes;false;set_XmlAnyAttribute;(System.Xml.Serialization.XmlAnyAttributeAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributes;false;set_XmlArray;(System.Xml.Serialization.XmlArrayAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributes;false;set_XmlAttribute;(System.Xml.Serialization.XmlAttributeAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributes;false;set_XmlDefaultValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributes;false;set_XmlEnum;(System.Xml.Serialization.XmlEnumAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributes;false;set_XmlRoot;(System.Xml.Serialization.XmlRootAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributes;false;set_XmlText;(System.Xml.Serialization.XmlTextAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlAttributes;false;set_XmlType;(System.Xml.Serialization.XmlTypeAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlChoiceIdentifierAttribute;false;XmlChoiceIdentifierAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlChoiceIdentifierAttribute;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlChoiceIdentifierAttribute;false;set_MemberName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlDeserializationEvents;false;get_OnUnknownAttribute;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlDeserializationEvents;false;get_OnUnknownElement;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlDeserializationEvents;false;get_OnUnknownNode;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlDeserializationEvents;false;get_OnUnreferencedObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlElementAttribute;false;XmlElementAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlElementAttribute;false;XmlElementAttribute;(System.String,System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlElementAttribute;false;XmlElementAttribute;(System.String,System.Type);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlElementAttribute;false;XmlElementAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlElementAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlElementAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlElementAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlElementAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlElementAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlElementAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlElementAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlElementAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlElementAttributes;false;Remove;(System.Xml.Serialization.XmlElementAttribute);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlElementEventArgs;false;get_Element;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlElementEventArgs;false;get_ExpectedElements;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlElementEventArgs;false;get_ObjectBeingDeserialized;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlEnumAttribute;false;XmlEnumAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlEnumAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlEnumAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlIncludeAttribute;false;XmlIncludeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlIncludeAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlIncludeAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlMapping;false;SetKey;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlMapping;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlMapping;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlMapping;false;get_XsdElementName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlMemberMapping;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlMembersMapping;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlNodeEventArgs;false;get_LocalName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlNodeEventArgs;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlNodeEventArgs;false;get_NamespaceURI;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlNodeEventArgs;false;get_ObjectBeingDeserialized;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlNodeEventArgs;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean);;Argument[2].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean);;Argument[2].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean);;Argument[2].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean,System.Xml.Serialization.XmlMappingAccess);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean,System.Xml.Serialization.XmlMappingAccess);;Argument[2].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;XmlReflectionImporter;(System.Xml.Serialization.XmlAttributeOverrides,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlReflectionImporter;false;XmlReflectionImporter;(System.Xml.Serialization.XmlAttributeOverrides,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlReflectionMember;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionMember;false;get_MemberType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionMember;false;get_SoapAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionMember;false;get_XmlAttributes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlReflectionMember;false;set_MemberName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlReflectionMember;false;set_MemberType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlReflectionMember;false;set_SoapAttributes;(System.Xml.Serialization.SoapAttributes);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlReflectionMember;false;set_XmlAttributes;(System.Xml.Serialization.XmlAttributes);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlRootAttribute;false;XmlRootAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlRootAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlRootAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlRootAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlRootAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlRootAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlRootAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSchemaEnumerator;false;XmlSchemaEnumerator;(System.Xml.Serialization.XmlSchemas);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSchemaEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSchemaExporter;false;ExportMembersMapping;(System.Xml.Serialization.XmlMembersMapping);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSchemaExporter;false;ExportMembersMapping;(System.Xml.Serialization.XmlMembersMapping,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSchemaExporter;false;ExportTypeMapping;(System.Xml.Serialization.XmlMembersMapping);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSchemaExporter;false;ExportTypeMapping;(System.Xml.Serialization.XmlTypeMapping);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSchemaExporter;false;XmlSchemaExporter;(System.Xml.Serialization.XmlSchemas);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSchemaProviderAttribute;false;XmlSchemaProviderAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSchemaProviderAttribute;false;get_MethodName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Schema.XmlSchema,System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Schema.XmlSchema,System.Uri);;Argument[1];Argument[0];generated:taint", + "System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Schema.XmlSchema,System.Uri);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSchemas;false;OnInsert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSchemas;false;OnSet;(System.Int32,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSchemas;false;Remove;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationReader+CollectionFixup;false;get_Callback;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader+CollectionFixup;false;get_Collection;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader+CollectionFixup;false;get_CollectionItems;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader+Fixup;false;get_Callback;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader+Fixup;false;get_Ids;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader+Fixup;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader+Fixup;false;set_Source;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;AddFixup;(System.Xml.Serialization.XmlSerializationReader+CollectionFixup);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;AddFixup;(System.Xml.Serialization.XmlSerializationReader+Fixup);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;AddTarget;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;CollapseWhitespace;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;EnsureArrayIndex;(System.Array,System.Int32,System.Type);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;GetTarget;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadNullableString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadReference;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadReferencedElement;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadReferencedElement;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadReferencingElement;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadReferencingElement;(System.String,System.String,System.Boolean,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadReferencingElement;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable,System.Boolean);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadString;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadString;(System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadString;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ReadTypedPrimitive;(System.Xml.XmlQualifiedName);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ShrinkArray;(System.Array,System.Int32,System.Type,System.Boolean);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ToByteArrayBase64;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ToXmlNCName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ToXmlName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ToXmlNmToken;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;ToXmlNmTokens;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;get_Document;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationReader;false;get_Reader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;FromByteArrayBase64;(System.Byte[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;FromByteArrayHex;(System.Byte[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;FromEnum;(System.Int64,System.String[],System.Int64[]);;Argument[1].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;FromEnum;(System.Int64,System.String[],System.Int64[],System.String);;Argument[1].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;FromXmlNCName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;FromXmlName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;FromXmlNmToken;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;FromXmlNmTokens;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;FromXmlQualifiedName;(System.Xml.XmlQualifiedName);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;FromXmlQualifiedName;(System.Xml.XmlQualifiedName,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.Byte[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.Byte[]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementEncoded;(System.Xml.XmlNode,System.String,System.String,System.Boolean,System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementLiteral;(System.Xml.XmlNode,System.String,System.String,System.Boolean,System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementString;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementString;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementString;(System.String,System.String,System.String,System.Xml.XmlQualifiedName);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementString;(System.String,System.String,System.Xml.XmlQualifiedName);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.Byte[]);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.Byte[],System.Xml.XmlQualifiedName);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.Byte[]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.Byte[],System.Xml.XmlQualifiedName);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.String,System.Xml.XmlQualifiedName);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.Xml.XmlQualifiedName);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteId;(System.Object);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringEncoded;(System.String,System.String,System.String,System.Xml.XmlQualifiedName);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringEncodedRaw;(System.String,System.String,System.Byte[],System.Xml.XmlQualifiedName);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringEncodedRaw;(System.String,System.String,System.String,System.Xml.XmlQualifiedName);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringLiteral;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringLiteralRaw;(System.String,System.String,System.Byte[]);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringLiteralRaw;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object);;Argument[Qualifier];Argument[2];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type);;Argument[Qualifier];Argument[2];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type,System.Boolean);;Argument[Qualifier];Argument[2];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type,System.Boolean,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type,System.Boolean,System.Boolean);;Argument[Qualifier];Argument[2];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteReferencingElement;(System.String,System.String,System.Object);;Argument[Qualifier];Argument[2];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteReferencingElement;(System.String,System.String,System.Object,System.Boolean);;Argument[Qualifier];Argument[2];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteRpcResult;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteRpcResult;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteSerializable;(System.Xml.Serialization.IXmlSerializable,System.String,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteSerializable;(System.Xml.Serialization.IXmlSerializable,System.String,System.String,System.Boolean,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteTypedPrimitive;(System.String,System.String,System.Object,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteValue;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteXmlAttribute;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteXmlAttribute;(System.Xml.XmlNode,System.Object);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteXsiType;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;WriteXsiType;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;get_Writer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializationWriter;false;set_Writer;(System.Xml.XmlWriter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader,System.String,System.Xml.Serialization.XmlDeserializationEvents);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader,System.String,System.Xml.Serialization.XmlDeserializationEvents);;Argument[Qualifier];Argument[2];generated:taint", + "System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader,System.Xml.Serialization.XmlDeserializationEvents);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializer;false;FromMappings;(System.Xml.Serialization.XmlMapping[]);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializer;false;FromMappings;(System.Xml.Serialization.XmlMapping[],System.Type);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializer;false;FromMappings;(System.Xml.Serialization.XmlMapping[],System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[4];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Xml.Serialization.XmlTypeMapping);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;XmlSerializerAssemblyAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;XmlSerializerAssemblyAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;get_AssemblyName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;get_CodeBase;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;set_AssemblyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;set_CodeBase;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[3];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[4];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[3];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[4];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlRootAttribute);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlRootAttribute);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Xml.Serialization.XmlTypeMapping);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerVersionAttribute;false;XmlSerializerVersionAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializerVersionAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerVersionAttribute;false;get_ParentAssemblyId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerVersionAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerVersionAttribute;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlSerializerVersionAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializerVersionAttribute;false;set_ParentAssemblyId;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializerVersionAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlSerializerVersionAttribute;false;set_Version;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlTextAttribute;false;XmlTextAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlTextAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlTextAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlTextAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlTextAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlTypeAttribute;false;XmlTypeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlTypeAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlTypeAttribute;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Serialization;XmlTypeAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Serialization;XmlTypeAttribute;false;set_TypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.XPath;Extensions;false;CreateNavigator;(System.Xml.Linq.XNode);;Argument[0];ReturnValue;generated:taint", + "System.Xml.XPath;Extensions;false;CreateNavigator;(System.Xml.Linq.XNode,System.Xml.XmlNameTable);;Argument[0];ReturnValue;generated:taint", + "System.Xml.XPath;Extensions;false;CreateNavigator;(System.Xml.Linq.XNode,System.Xml.XmlNameTable);;Argument[1];ReturnValue;generated:taint", + "System.Xml.XPath;XDocumentExtensions;false;ToXPathNavigable;(System.Xml.Linq.XNode);;Argument[0];ReturnValue;generated:taint", + "System.Xml.XPath;XPathDocument;false;CreateNavigator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathDocument;false;XPathDocument;(System.Xml.XmlReader,System.Xml.XmlSpace);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.XPath;XPathException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.XPath;XPathException;false;XPathException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.XPath;XPathException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathExpression;false;Compile;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.XPath;XPathExpression;false;Compile;(System.String,System.Xml.IXmlNamespaceResolver);;Argument[0];ReturnValue;generated:taint", + "System.Xml.XPath;XPathExpression;false;Compile;(System.String,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint", + "System.Xml.XPath;XPathItem;true;ValueAs;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;false;ValueAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;false;ValueAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;false;get_TypedValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;false;get_ValueAsDateTime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;false;get_XmlType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;Compile;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;CreateNavigator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;Evaluate;(System.Xml.XPath.XPathExpression);;Argument[0];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;Evaluate;(System.Xml.XPath.XPathExpression,System.Xml.XPath.XPathNodeIterator);;Argument[0];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;Evaluate;(System.Xml.XPath.XPathExpression,System.Xml.XPath.XPathNodeIterator);;Argument[1].Element;ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;GetAttribute;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;GetNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;LookupNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;LookupPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;ReadSubtree;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;Select;(System.Xml.XPath.XPathExpression);;Argument[0];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;SelectSingleNode;(System.Xml.XPath.XPathExpression);;Argument[0];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;WriteSubtree;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.XPath;XPathNavigator;true;get_InnerXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;get_OuterXml;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNavigator;true;get_XmlLang;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.XPath;XPathNodeIterator;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;AncestorDocOrderIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;AncestorIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;AncestorIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;AncestorIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;AttributeContentIterator;false;Create;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;AttributeContentIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;AttributeIterator;false;Create;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;AttributeIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;ContentIterator;false;Create;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;ContentIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;ContentMergeIterator;false;Create;(System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;ContentMergeIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;DescendantIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;DescendantIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;DescendantIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;DescendantMergeIterator;false;Create;(System.Xml.Xsl.Runtime.XmlNavigatorFilter,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;DescendantMergeIterator;false;MoveNext;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;DescendantMergeIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;DifferenceIterator;false;Create;(System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;DifferenceIterator;false;MoveNext;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;DifferenceIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;DodSequenceMerge;false;AddSequence;(System.Collections.Generic.IList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;DodSequenceMerge;false;Create;(System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;DodSequenceMerge;false;MergeSequences;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;ElementContentIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;ElementContentIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;ElementContentIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;ElementContentIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;FollowingSiblingIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;FollowingSiblingIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;FollowingSiblingIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;FollowingSiblingMergeIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;IdIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;IdIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;IdIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;IntersectIterator;false;Create;(System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;IntersectIterator;false;MoveNext;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;IntersectIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;NamespaceIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;NodeKindContentIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.XPath.XPathNodeType);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;NodeKindContentIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;NodeRangeIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter,System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;NodeRangeIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter,System.Xml.XPath.XPathNavigator);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;NodeRangeIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter,System.Xml.XPath.XPathNavigator);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;NodeRangeIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;ParentIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;ParentIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;PrecedingIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;PrecedingIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;PrecedingSiblingDocOrderIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;PrecedingSiblingDocOrderIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;PrecedingSiblingDocOrderIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;PrecedingSiblingIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;PrecedingSiblingIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;PrecedingSiblingIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;StringConcat;false;GetResult;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;StringConcat;false;get_Delimiter;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;StringConcat;false;set_Delimiter;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;UnionIterator;false;Create;(System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;UnionIterator;false;MoveNext;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;UnionIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XPathFollowingIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XPathFollowingIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XPathFollowingIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XPathFollowingMergeIterator;false;Create;(System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XPathFollowingMergeIterator;false;MoveNext;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XPathFollowingMergeIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XPathPrecedingDocOrderIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XPathPrecedingDocOrderIterator;false;Create;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XPathPrecedingDocOrderIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XPathPrecedingIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XPathPrecedingMergeIterator;false;Create;(System.Xml.Xsl.Runtime.XmlNavigatorFilter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XPathPrecedingMergeIterator;false;MoveNext;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XPathPrecedingMergeIterator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;BooleanToAtomicValue;(System.Boolean,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;BytesToAtomicValue;(System.Byte[],System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;BytesToAtomicValue;(System.Byte[],System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;DateTimeToAtomicValue;(System.DateTime,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;DateTimeToAtomicValue;(System.DateTime,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;DecimalToAtomicValue;(System.Decimal,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;DoubleToAtomicValue;(System.Double,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;Int32ToAtomicValue;(System.Int32,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;Int64ToAtomicValue;(System.Int64,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;ItemsToNavigators;(System.Collections.Generic.IList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;NavigatorsToItems;(System.Collections.Generic.IList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;SingleToAtomicValue;(System.Single,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;StringToAtomicValue;(System.String,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;StringToAtomicValue;(System.String,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;TimeSpanToAtomicValue;(System.TimeSpan,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;TimeSpanToAtomicValue;(System.TimeSpan,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;XmlQualifiedNameToAtomicValue;(System.Xml.XmlQualifiedName,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlILStorageConverter;false;XmlQualifiedNameToAtomicValue;(System.Xml.XmlQualifiedName,System.Int32,System.Xml.Xsl.Runtime.XmlQueryRuntime);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryContext;false;GetDataSource;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryContext;false;GetLateBoundObject;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryContext;false;GetParameter;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryContext;false;get_DefaultDataSource;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryContext;false;get_DefaultNameTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryContext;false;get_QueryNameTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryItemSequence;false;AddClone;(System.Xml.XPath.XPathItem);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryItemSequence;false;CreateOrReuse;(System.Xml.Xsl.Runtime.XmlQueryItemSequence);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryItemSequence;false;CreateOrReuse;(System.Xml.Xsl.Runtime.XmlQueryItemSequence,System.Xml.XPath.XPathItem);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryItemSequence;false;CreateOrReuse;(System.Xml.Xsl.Runtime.XmlQueryItemSequence,System.Xml.XPath.XPathItem);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryItemSequence;false;XmlQueryItemSequence;(System.Xml.XPath.XPathItem);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryNodeSequence;false;AddClone;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryNodeSequence;false;CreateOrReuse;(System.Xml.Xsl.Runtime.XmlQueryNodeSequence);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryNodeSequence;false;CreateOrReuse;(System.Xml.Xsl.Runtime.XmlQueryNodeSequence,System.Xml.XPath.XPathNavigator);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryNodeSequence;false;CreateOrReuse;(System.Xml.Xsl.Runtime.XmlQueryNodeSequence,System.Xml.XPath.XPathNavigator);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryNodeSequence;false;DocOrderDistinct;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:value", + "System.Xml.Xsl.Runtime;XmlQueryNodeSequence;false;XmlQueryNodeSequence;(System.Collections.Generic.IList);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryNodeSequence;false;XmlQueryNodeSequence;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;StartCopy;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;WriteItem;(System.Xml.XPath.XPathItem);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;WriteProcessingInstruction;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;WriteStartAttribute;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;WriteStartAttributeComputed;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;WriteStartAttributeComputed;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;WriteStartAttributeComputed;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;WriteStartAttributeLocalName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;WriteStartElementComputed;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;WriteStartElementComputed;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;WriteStartElementComputed;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;WriteStartNamespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;WriteStartProcessingInstruction;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryOutput;false;XsltCopyOf;(System.Xml.XPath.XPathNavigator);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;ChangeTypeXsltArgument;(System.Int32,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;ChangeTypeXsltResult;(System.Int32,System.Object);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;DebugGetGlobalNames;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;DebugGetGlobalValue;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;DebugGetXsltValue;(System.Collections.IList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;DebugSetGlobalValue;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;DocOrderDistinct;(System.Collections.Generic.IList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;EndRtfConstruction;(System.Xml.Xsl.Runtime.XmlQueryOutput);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;EndSequenceConstruction;(System.Xml.Xsl.Runtime.XmlQueryOutput);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;FindIndex;(System.Xml.XPath.XPathNavigator,System.Int32,System.Xml.Xsl.Runtime.XmlILIndex);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;GetAtomizedName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;GetCollation;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;GetEarlyBoundObject;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;GetGlobalValue;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;GetNameFilter;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;SetGlobalValue;(System.Int32,System.Object);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;StartRtfConstruction;(System.String,System.Xml.Xsl.Runtime.XmlQueryOutput);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;StartRtfConstruction;(System.String,System.Xml.Xsl.Runtime.XmlQueryOutput);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;StartSequenceConstruction;(System.Xml.Xsl.Runtime.XmlQueryOutput);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;TextRtfConstruction;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;TextRtfConstruction;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;get_ExternalContext;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;get_Output;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQueryRuntime;false;get_XsltFunctions;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQuerySequence<>;false;Add;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQuerySequence<>;false;CreateOrReuse;(System.Xml.Xsl.Runtime.XmlQuerySequence<>);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQuerySequence<>;false;CreateOrReuse;(System.Xml.Xsl.Runtime.XmlQuerySequence<>,T);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQuerySequence<>;false;CreateOrReuse;(System.Xml.Xsl.Runtime.XmlQuerySequence<>,T);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XmlQuerySequence<>;false;XmlQuerySequence;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQuerySequence<>;false;XmlQuerySequence;(T[],System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml.Xsl.Runtime;XmlQuerySequence<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Xml.Xsl.Runtime;XmlSortKeyAccumulator;false;get_Keys;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltConvert;false;EnsureNodeSet;(System.Collections.Generic.IList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltConvert;false;ToNode;(System.Collections.Generic.IList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltConvert;false;ToNode;(System.Xml.XPath.XPathItem);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltConvert;false;ToNodeSet;(System.Collections.Generic.IList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltConvert;false;ToNodeSet;(System.Xml.XPath.XPathItem);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltConvert;false;ToString;(System.Collections.Generic.IList);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltConvert;false;ToString;(System.Xml.XPath.XPathItem);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltFunctions;false;BaseUri;(System.Xml.XPath.XPathNavigator);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltFunctions;false;MSLocalName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltFunctions;false;MSNamespaceUri;(System.String,System.Xml.XPath.XPathNavigator);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltFunctions;false;NormalizeSpace;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltFunctions;false;OuterXml;(System.Xml.XPath.XPathNavigator);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltFunctions;false;Substring;(System.String,System.Double);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltFunctions;false;Substring;(System.String,System.Double,System.Double);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltFunctions;false;SubstringAfter;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltFunctions;false;SubstringBefore;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltFunctions;false;SubstringBefore;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltFunctions;false;Translate;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltLibrary;false;FormatMessage;(System.String,System.Collections.Generic.IList);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltLibrary;false;FormatMessage;(System.String,System.Collections.Generic.IList);;Argument[1].Element;ReturnValue;generated:taint", + "System.Xml.Xsl.Runtime;XsltLibrary;false;NumberFormat;(System.Collections.Generic.IList,System.String,System.Double,System.String,System.String,System.Double);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl;XslCompiledTransform;false;Load;(System.Reflection.MethodInfo,System.Byte[],System.Type[]);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[0];ReturnValue;generated:taint", + "System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[1];ReturnValue;generated:taint", + "System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[2];ReturnValue;generated:taint", + "System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl;XslTransform;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl;XsltArgumentList;false;GetExtensionObject;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl;XsltArgumentList;false;GetParam;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl;XsltArgumentList;false;RemoveExtensionObject;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl;XsltArgumentList;false;RemoveParam;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl;XsltCompileException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Xsl;XsltException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml.Xsl;XsltException;false;XsltException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml.Xsl;XsltException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml.Xsl;XsltException;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;NameTable;false;Add;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;NameTable;false;Add;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;NameTable;false;Add;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;NameTable;false;Add;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;NameTable;false;Get;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;NameTable;false;Get;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;UniqueId;false;UniqueId;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;UniqueId;false;UniqueId;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlAttribute;false;AppendChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlAttribute;false;AppendChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;AppendChild;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlAttribute;false;AppendChild;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[1].Element;generated:taint", + "System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint", + "System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[1].Element;generated:taint", + "System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint", + "System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[1].Element;generated:taint", + "System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;PrependChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlAttribute;false;PrependChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;PrependChild;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlAttribute;false;PrependChild;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;RemoveChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlAttribute;false;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint", + "System.Xml;XmlAttribute;false;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlAttribute;false;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlAttribute;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlAttribute;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlAttribute;false;get_OwnerElement;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttribute;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlAttributeCollection;false;Append;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;Append;(System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlAttributeCollection;false;Append;(System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;InsertAfter;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;InsertAfter;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlAttributeCollection;false;InsertAfter;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;InsertBefore;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;InsertBefore;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlAttributeCollection;false;InsertBefore;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;Prepend;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;Prepend;(System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlAttributeCollection;false;Prepend;(System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;Remove;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;RemoveAt;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;SetNamedItem;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;SetNamedItem;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlAttributeCollection;false;SetNamedItem;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;get_ItemOf;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;get_ItemOf;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;get_ItemOf;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlAttributeCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System.Xml;XmlBinaryReaderSession;false;Add;(System.Int32,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlBinaryReaderSession;false;Add;(System.Int32,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlBinaryReaderSession;false;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlBinaryReaderSession;false;TryLookup;(System.String,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlBinaryReaderSession;false;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlCDataSection;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlCDataSection;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlCharacterData;false;XmlCharacterData;(System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlCharacterData;false;set_InnerText;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlCharacterData;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlCharacterData;true;AppendData;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlCharacterData;true;Substring;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlCharacterData;true;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlCharacterData;true;set_Data;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlComment;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlConvert;false;DecodeName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlConvert;false;EncodeLocalName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlConvert;false;EncodeName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlConvert;false;EncodeNmToken;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlConvert;false;VerifyNCName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlConvert;false;VerifyNMTOKEN;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlConvert;false;VerifyName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlConvert;false;VerifyPublicId;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlConvert;false;VerifyTOKEN;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlConvert;false;VerifyWhitespace;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlConvert;false;VerifyXmlChars;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDataDocument;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDataDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDataDocument;false;CreateNavigator;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDataDocument;false;GetElementFromRow;(System.Data.DataRow);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDataDocument;false;GetElementsByTagName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDataDocument;false;GetRowFromElement;(System.Xml.XmlElement);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlDataDocument;false;Load;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDataDocument;false;Load;(System.IO.TextReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDataDocument;false;Load;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDataDocument;false;Load;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDataDocument;false;XmlDataDocument;(System.Data.DataSet);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDataDocument;false;get_DataSet;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDeclaration;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDeclaration;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlDeclaration;false;XmlDeclaration;(System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDeclaration;false;XmlDeclaration;(System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlDeclaration;false;XmlDeclaration;(System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml;XmlDeclaration;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDeclaration;false;get_Standalone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDeclaration;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDeclaration;false;set_Encoding;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDeclaration;false;set_Standalone;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDeclaration;false;set_Version;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionary;false;Add;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDictionary;false;Add;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionary;false;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionary;false;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);;Argument[3];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[3];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[5];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[3];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.XmlDictionaryReaderQuotas);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateDictionaryReader;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;CreateTextReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;ReadContentAsString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;ReadContentAsString;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;ReadElementContentAsDateTime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;ReadElementContentAsString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;ReadString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;false;ReadString;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;true;GetAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;true;GetNonAtomizedNames;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;true;ReadArray;(System.String,System.String,System.DateTime[],System.Int32,System.Int32);;Argument[Qualifier];Argument[2].Element;generated:taint", + "System.Xml;XmlDictionaryReader;true;ReadArray;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.DateTime[],System.Int32,System.Int32);;Argument[Qualifier];Argument[2].Element;generated:taint", + "System.Xml;XmlDictionaryReader;true;ReadContentAsQualifiedName;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;true;ReadContentAsString;(System.String[],System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;true;ReadContentAsString;(System.String[],System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;true;ReadContentAsString;(System.Xml.XmlDictionaryString[],System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;true;ReadContentAsString;(System.Xml.XmlDictionaryString[],System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;true;ReadContentAsUniqueId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;true;ReadDateTimeArray;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;true;ReadDateTimeArray;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryReader;true;ReadElementContentAsUniqueId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryString;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryString;false;XmlDictionaryString;(System.Xml.IXmlDictionary,System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryString;false;XmlDictionaryString;(System.Xml.IXmlDictionary,System.String,System.Int32);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryString;false;get_Dictionary;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryString;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession);;Argument[2];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);;Argument[2];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryWriter;false;CreateDictionaryWriter;(System.Xml.XmlWriter);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDictionaryWriter;false;WriteAttributeString;(System.String,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;false;WriteAttributeString;(System.String,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;false;WriteAttributeString;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;false;WriteAttributeString;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;false;WriteBase64Async;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;false;WriteElementString;(System.String,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;false;WriteElementString;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;false;WriteNode;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;false;WriteStartAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteNode;(System.Xml.XmlDictionaryReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteQualifiedName;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteStartAttribute;(System.String,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteString;(System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteTextNode;(System.Xml.XmlDictionaryReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteValue;(System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteXmlAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteXmlAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteXmlAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteXmlAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteXmlnsAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteXmlnsAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteXmlnsAttribute;(System.String,System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDictionaryWriter;true;WriteXmlnsAttribute;(System.String,System.Xml.XmlDictionaryString);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlDocument;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateAttribute;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateAttribute;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateDocumentFragment;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateDocumentType;(System.String,System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateDocumentType;(System.String,System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateDocumentType;(System.String,System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateDocumentType;(System.String,System.String,System.String,System.String);;Argument[3];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateElement;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateElement;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateElement;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateElement;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateElement;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateEntityReference;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNavigator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNavigator;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNavigator;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNode;(System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNode;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNode;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String,System.String);;Argument[3];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateProcessingInstruction;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateProcessingInstruction;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateXmlDeclaration;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateXmlDeclaration;(System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;CreateXmlDeclaration;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;GetElementsByTagName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;GetElementsByTagName;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;GetElementsByTagName;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;ImportNode;(System.Xml.XmlNode,System.Boolean);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;ImportNode;(System.Xml.XmlNode,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;Save;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlDocument;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlDocument;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlDocument;false;XmlDocument;(System.Xml.XmlImplementation);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDocument;false;get_DocumentElement;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;get_DocumentType;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;get_Implementation;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;get_Schemas;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocument;false;set_Schemas;(System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDocument;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDocumentFragment;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocumentFragment;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlDocumentFragment;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlDocumentFragment;false;XmlDocumentFragment;(System.Xml.XmlDocument);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlDocumentType;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocumentType;false;XmlDocumentType;(System.String,System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlDocumentType;false;XmlDocumentType;(System.String,System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlDocumentType;false;XmlDocumentType;(System.String,System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml;XmlDocumentType;false;XmlDocumentType;(System.String,System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[3];Argument[Qualifier];generated:taint", + "System.Xml;XmlDocumentType;false;get_Entities;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocumentType;false;get_InternalSubset;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocumentType;false;get_Notations;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocumentType;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlDocumentType;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;GetAttribute;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;GetAttribute;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;GetAttributeNode;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;GetAttributeNode;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;GetElementsByTagName;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;GetElementsByTagName;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;GetElementsByTagName;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;RemoveAttributeAt;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;RemoveAttributeNode;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;RemoveAttributeNode;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlElement;false;SetAttribute;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;SetAttributeNode;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;SetAttributeNode;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;SetAttributeNode;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;SetAttributeNode;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlElement;false;SetAttributeNode;(System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlElement;false;SetAttributeNode;(System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlElement;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlElement;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlElement;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlEntity;false;get_NotationName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlEntity;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlEntity;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlEntityReference;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlEntityReference;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlEntityReference;false;XmlEntityReference;(System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlException;false;XmlException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlException;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlImplementation;false;CreateDocument;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlImplementation;false;XmlImplementation;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlNamedNodeMap;false;Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNamedNodeMap;false;RemoveNamedItem;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNamedNodeMap;false;RemoveNamedItem;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNamedNodeMap;false;SetNamedItem;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlNamedNodeMap;false;SetNamedItem;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNamespaceManager;false;LookupNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNamespaceManager;false;LookupPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNamespaceManager;false;XmlNamespaceManager;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlNamespaceManager;false;get_DefaultNamespace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNamespaceManager;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNode;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNode;true;AppendChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlNode;true;AppendChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlNode;true;AppendChild;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlNode;true;AppendChild;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNode;true;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNode;true;CreateNavigator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNode;true;GetNamespaceOfPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNode;true;GetPrefixOfNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[1].Element;generated:taint", + "System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint", + "System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint", + "System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[1].Element;generated:taint", + "System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint", + "System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint", + "System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[1].Element;generated:taint", + "System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNode;true;PrependChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlNode;true;PrependChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlNode;true;PrependChild;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlNode;true;PrependChild;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNode;true;RemoveChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlNode;true;RemoveChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint", + "System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint", + "System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint", + "System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System.Xml;XmlNode;true;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNode;true;get_Item;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[2].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[3];Argument[Qualifier];generated:taint", + "System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[4];Argument[Qualifier];generated:taint", + "System.Xml;XmlNodeChangedEventArgs;false;get_NewParent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeChangedEventArgs;false;get_NewValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeChangedEventArgs;false;get_Node;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeChangedEventArgs;false;get_OldParent;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeChangedEventArgs;false;get_OldValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeList;true;get_ItemOf;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;GetAttribute;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;GetAttribute;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;LookupNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;LookupPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;XmlNodeReader;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlNodeReader;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;get_LocalName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;get_NamespaceURI;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;get_Prefix;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;get_SchemaInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNodeReader;false;get_XmlLang;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNotation;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlNotation;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[1].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[3];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[4];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[5];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[6];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[7];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[9];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlParserContext;false;get_DocTypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlParserContext;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlParserContext;false;get_InternalSubset;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlParserContext;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlParserContext;false;get_NamespaceManager;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlParserContext;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlParserContext;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlParserContext;false;get_XmlLang;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlParserContext;false;set_BaseURI;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;set_DocTypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;set_Encoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;set_InternalSubset;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;set_NameTable;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;set_NamespaceManager;(System.Xml.XmlNamespaceManager);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;set_PublicId;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;set_SystemId;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlParserContext;false;set_XmlLang;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlProcessingInstruction;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlProcessingInstruction;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlProcessingInstruction;false;XmlProcessingInstruction;(System.String,System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlProcessingInstruction;false;XmlProcessingInstruction;(System.String,System.String,System.Xml.XmlDocument);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlProcessingInstruction;false;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlProcessingInstruction;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlProcessingInstruction;false;set_Data;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlProcessingInstruction;false;set_InnerText;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlProcessingInstruction;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlQualifiedName;false;ToString;(System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlQualifiedName;false;ToString;(System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadContentAsObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadContentAsString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementContentAsDateTime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementContentAsDateTime;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementContentAsObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementContentAsObject;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementContentAsString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementContentAsString;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadElementString;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;ReadSubtree;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;get_Item;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReader;true;get_SchemaInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReaderSettings;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlReaderSettings;false;set_NameTable;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlReaderSettings;false;set_Schemas;(System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlReaderSettings;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlResolver;true;ResolveUri;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlResolver;true;ResolveUri;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlSecureResolver;false;ResolveUri;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlSecureResolver;false;ResolveUri;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlSecureResolver;false;XmlSecureResolver;(System.Xml.XmlResolver,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlSecureResolver;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlSignificantWhitespace;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlSignificantWhitespace;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlSignificantWhitespace;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlText;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlText;false;SplitText;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlText;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlText;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlTextReader;false;GetRemainder;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlTextReader;false;LookupNamespace;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlTextReader;false;XmlTextReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml;XmlTextReader;false;XmlTextReader;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlTextReader;false;XmlTextReader;(System.String,System.IO.TextReader,System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlTextReader;false;XmlTextReader;(System.String,System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlTextReader;false;XmlTextReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml;XmlTextReader;false;XmlTextReader;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlTextReader;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlTextReader;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlTextReader;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlTextReader;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlTextWriter;false;LookupPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlTextWriter;false;WriteStartAttribute;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlTextWriter;false;XmlTextWriter;(System.IO.Stream,System.Text.Encoding);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlTextWriter;false;XmlTextWriter;(System.IO.TextWriter);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlTextWriter;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlTextWriter;false;get_XmlLang;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlUrlResolver;false;ResolveUri;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlUrlResolver;false;ResolveUri;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlUrlResolver;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlUrlResolver;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlValidatingReader;false;LookupNamespace;(System.String);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlValidatingReader;false;XmlValidatingReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml;XmlValidatingReader;false;XmlValidatingReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml;XmlValidatingReader;false;XmlValidatingReader;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlValidatingReader;false;get_Reader;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlValidatingReader;false;get_Schemas;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlWhitespace;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlWhitespace;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint", + "System.Xml;XmlWhitespace;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;false;Create;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlWriter;false;Create;(System.IO.Stream,System.Xml.XmlWriterSettings);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlWriter;false;Create;(System.IO.Stream,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlWriter;false;Create;(System.IO.TextWriter);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlWriter;false;Create;(System.IO.TextWriter,System.Xml.XmlWriterSettings);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlWriter;false;Create;(System.IO.TextWriter,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlWriter;false;Create;(System.String,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlWriter;false;Create;(System.Text.StringBuilder,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlWriter;false;Create;(System.Xml.XmlWriter);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlWriter;false;Create;(System.Xml.XmlWriter,System.Xml.XmlWriterSettings);;Argument[0];ReturnValue;generated:taint", + "System.Xml;XmlWriter;false;Create;(System.Xml.XmlWriter,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint", + "System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;false;WriteAttributeStringAsync;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;false;WriteElementString;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;false;WriteElementString;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;false;WriteElementString;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;false;WriteStartAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;false;WriteStartAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;true;WriteAttributes;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;true;WriteAttributesAsync;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;true;WriteName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;true;WriteNmToken;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;true;WriteNode;(System.Xml.XPath.XPathNavigator,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;true;WriteNode;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;true;WriteNodeAsync;(System.Xml.XPath.XPathNavigator,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;true;WriteNodeAsync;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;true;WriteQualifiedName;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;true;WriteValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriter;true;WriteValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriterSettings;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlWriterSettings;false;get_IndentChars;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlWriterSettings;false;get_NewLineChars;();;Argument[Qualifier];ReturnValue;generated:taint", + "System.Xml;XmlWriterSettings;false;set_Encoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriterSettings;false;set_IndentChars;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System.Xml;XmlWriterSettings;false;set_NewLineChars;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;AggregateException;false;AggregateException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System;AggregateException;false;AggregateException;(System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint", + "System;AggregateException;false;GetBaseException;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;AggregateException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;AggregateException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;AggregateException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;AppDomain;false;ApplyPolicy;(System.String);;Argument[0];ReturnValue;generated:taint", + "System;ArgumentException;false;ArgumentException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System;ArgumentException;false;ArgumentException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System;ArgumentException;false;ArgumentException;(System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint", + "System;ArgumentException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;ArgumentException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ArgumentException;false;get_ParamName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ArgumentOutOfRangeException;false;ArgumentOutOfRangeException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System;ArgumentOutOfRangeException;false;ArgumentOutOfRangeException;(System.String,System.Object,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System;ArgumentOutOfRangeException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;ArgumentOutOfRangeException;false;get_ActualValue;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ArgumentOutOfRangeException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Array;false;Fill<>;(T[],T);;Argument[1];Argument[0].Element;generated:taint", + "System;Array;false;Fill<>;(T[],T,System.Int32,System.Int32);;Argument[1];Argument[0].Element;generated:taint", + "System;Array;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value", + "System;ArraySegment<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ArraySegment<>;false;ArraySegment;(T[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System;ArraySegment<>;false;ArraySegment;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System;ArraySegment<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ArraySegment<>;false;Slice;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System;ArraySegment<>;false;Slice;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System;ArraySegment<>;false;get_Array;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ArraySegment<>;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System;BadImageFormatException;false;BadImageFormatException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System;BadImageFormatException;false;BadImageFormatException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System;BadImageFormatException;false;BadImageFormatException;(System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint", + "System;BadImageFormatException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;BadImageFormatException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;BadImageFormatException;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;BadImageFormatException;false;get_FusionLog;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;BadImageFormatException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;BinaryData;false;BinaryData;(System.ReadOnlyMemory);;Argument[0];Argument[Qualifier];generated:taint", + "System;BinaryData;false;BinaryData;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;BinaryData;false;FromBytes;(System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint", + "System;BinaryData;false;FromString;(System.String);;Argument[0];ReturnValue;generated:taint", + "System;BinaryData;false;ToMemory;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;BinaryData;false;ToStream;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;CultureAwareComparer;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;DBNull;false;ToType;(System.Type,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint", + "System;DateOnly;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint", + "System;DateOnly;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System;DateTime;false;GetDateTimeFormats;(System.Char,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System;DateTime;false;ToDateTime;(System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:value", + "System;DateTime;false;ToLocalTime;();;Argument[Qualifier];ReturnValue;generated:value", + "System;DateTime;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint", + "System;DateTime;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System;DateTime;false;ToType;(System.Type,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System;DateTime;false;ToType;(System.Type,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint", + "System;DateTime;false;ToUniversalTime;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;DateTimeOffset;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;DateTimeOffset;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint", + "System;DateTimeOffset;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System;Decimal;false;ToDecimal;(System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:value", + "System;Delegate;false;Combine;(System.Delegate,System.Delegate);;Argument[0];ReturnValue;generated:taint", + "System;Delegate;false;Combine;(System.Delegate,System.Delegate);;Argument[1];ReturnValue;generated:taint", + "System;Delegate;false;Combine;(System.Delegate[]);;Argument[0].Element;ReturnValue;generated:taint", + "System;Delegate;false;CreateDelegate;(System.Type,System.Reflection.MethodInfo,System.Boolean);;Argument[1];ReturnValue;generated:taint", + "System;Delegate;false;Delegate;(System.Object,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;Delegate;false;Delegate;(System.Object,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System;Delegate;false;Delegate;(System.Type,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;Delegate;false;Delegate;(System.Type,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System;Delegate;false;DynamicInvoke;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System;Delegate;false;Remove;(System.Delegate,System.Delegate);;Argument[0];ReturnValue;generated:taint", + "System;Delegate;false;RemoveAll;(System.Delegate,System.Delegate);;Argument[0];ReturnValue;generated:taint", + "System;Delegate;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Delegate;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Delegate;true;DynamicInvokeImpl;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System;Delegate;true;GetInvocationList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Delegate;true;GetMethodImpl;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Delegate;true;RemoveImpl;(System.Delegate);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Double;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint", + "System;Double;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System;Double;false;ToType;(System.Type,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System;Enum;false;GetUnderlyingType;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System;Enum;false;ToType;(System.Type,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Environment;false;ExpandEnvironmentVariables;(System.String);;Argument[0];ReturnValue;generated:taint", + "System;Exception;false;Exception;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System;Exception;false;Exception;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;Exception;false;Exception;(System.String,System.Exception);;Argument[0];Argument[Qualifier];generated:taint", + "System;Exception;false;Exception;(System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint", + "System;Exception;false;GetBaseException;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Exception;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;Exception;false;get_HelpLink;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Exception;false;get_InnerException;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Exception;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Exception;false;get_StackTrace;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Exception;false;get_TargetSite;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Exception;false;set_HelpLink;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;Exception;false;set_Source;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;FormattableString;false;CurrentCulture;(System.FormattableString);;Argument[0];ReturnValue;generated:taint", + "System;FormattableString;false;Invariant;(System.FormattableString);;Argument[0];ReturnValue;generated:taint", + "System;FormattableString;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;FormattableString;false;ToString;(System.String,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Half;false;BitDecrement;(System.Half);;Argument[0];ReturnValue;generated:taint", + "System;Half;false;BitIncrement;(System.Half);;Argument[0];ReturnValue;generated:taint", + "System;Half;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint", + "System;Half;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System;IntPtr;false;Abs;(System.IntPtr);;Argument[0];ReturnValue;generated:taint", + "System;IntPtr;false;Clamp;(System.IntPtr,System.IntPtr,System.IntPtr);;Argument[0];ReturnValue;generated:taint", + "System;IntPtr;false;Clamp;(System.IntPtr,System.IntPtr,System.IntPtr);;Argument[1];ReturnValue;generated:taint", + "System;IntPtr;false;Clamp;(System.IntPtr,System.IntPtr,System.IntPtr);;Argument[2];ReturnValue;generated:taint", + "System;IntPtr;false;Create<>;(TOther);;Argument[0];ReturnValue;generated:taint", + "System;IntPtr;false;CreateSaturating<>;(TOther);;Argument[0];ReturnValue;generated:taint", + "System;IntPtr;false;CreateTruncating<>;(TOther);;Argument[0];ReturnValue;generated:taint", + "System;IntPtr;false;IntPtr;(System.Void*);;Argument[0];Argument[Qualifier];generated:taint", + "System;IntPtr;false;Max;(System.IntPtr,System.IntPtr);;Argument[0];ReturnValue;generated:taint", + "System;IntPtr;false;Max;(System.IntPtr,System.IntPtr);;Argument[1];ReturnValue;generated:taint", + "System;IntPtr;false;Min;(System.IntPtr,System.IntPtr);;Argument[0];ReturnValue;generated:taint", + "System;IntPtr;false;Min;(System.IntPtr,System.IntPtr);;Argument[1];ReturnValue;generated:taint", + "System;IntPtr;false;ToPointer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;IntPtr;false;TryCreate<>;(TOther,System.IntPtr);;Argument[0];ReturnValue;generated:taint", + "System;Lazy<,>;false;Lazy;(TMetadata);;Argument[0];Argument[Qualifier];generated:taint", + "System;Lazy<,>;false;Lazy;(TMetadata,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System;Lazy<,>;false;Lazy;(TMetadata,System.Threading.LazyThreadSafetyMode);;Argument[0];Argument[Qualifier];generated:taint", + "System;Lazy<,>;false;get_Metadata;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Lazy<>;false;Lazy;(T);;Argument[0];Argument[Qualifier];generated:taint", + "System;Lazy<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Math;false;Abs;(System.IntPtr);;Argument[0];ReturnValue;generated:taint", + "System;Math;false;Clamp;(System.IntPtr,System.IntPtr,System.IntPtr);;Argument[0];ReturnValue;generated:taint", + "System;Math;false;Clamp;(System.IntPtr,System.IntPtr,System.IntPtr);;Argument[1];ReturnValue;generated:taint", + "System;Math;false;Clamp;(System.IntPtr,System.IntPtr,System.IntPtr);;Argument[2];ReturnValue;generated:taint", + "System;Math;false;Clamp;(System.UIntPtr,System.UIntPtr,System.UIntPtr);;Argument[0];ReturnValue;generated:taint", + "System;Math;false;Clamp;(System.UIntPtr,System.UIntPtr,System.UIntPtr);;Argument[1];ReturnValue;generated:taint", + "System;Math;false;Clamp;(System.UIntPtr,System.UIntPtr,System.UIntPtr);;Argument[2];ReturnValue;generated:taint", + "System;Math;false;Max;(System.IntPtr,System.IntPtr);;Argument[0];ReturnValue;generated:taint", + "System;Math;false;Max;(System.IntPtr,System.IntPtr);;Argument[1];ReturnValue;generated:taint", + "System;Math;false;Max;(System.UIntPtr,System.UIntPtr);;Argument[0];ReturnValue;generated:taint", + "System;Math;false;Max;(System.UIntPtr,System.UIntPtr);;Argument[1];ReturnValue;generated:taint", + "System;Math;false;Min;(System.IntPtr,System.IntPtr);;Argument[0];ReturnValue;generated:taint", + "System;Math;false;Min;(System.IntPtr,System.IntPtr);;Argument[1];ReturnValue;generated:taint", + "System;Math;false;Min;(System.UIntPtr,System.UIntPtr);;Argument[0];ReturnValue;generated:taint", + "System;Math;false;Min;(System.UIntPtr,System.UIntPtr);;Argument[1];ReturnValue;generated:taint", + "System;Memory<>;false;Memory;(T[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System;Memory<>;false;Memory;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System;Memory<>;false;Slice;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Memory<>;false;Slice;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Memory<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;MemoryExtensions+TryWriteInterpolatedStringHandler;false;TryWriteInterpolatedStringHandler;(System.Int32,System.Int32,System.Span,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint", + "System;MemoryExtensions+TryWriteInterpolatedStringHandler;false;TryWriteInterpolatedStringHandler;(System.Int32,System.Int32,System.Span,System.IFormatProvider,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint", + "System;MemoryExtensions+TryWriteInterpolatedStringHandler;false;TryWriteInterpolatedStringHandler;(System.Int32,System.Int32,System.Span,System.IFormatProvider,System.Boolean);;Argument[3];Argument[Qualifier];generated:taint", + "System;MemoryExtensions;false;AsMemory;(System.String);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;AsMemory;(System.String,System.Index);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;AsMemory;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;AsMemory;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;AsMemory;(System.String,System.Range);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;AsMemory<>;(System.ArraySegment);;Argument[0].Element;ReturnValue;generated:taint", + "System;MemoryExtensions;false;AsMemory<>;(System.ArraySegment,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System;MemoryExtensions;false;AsMemory<>;(System.ArraySegment,System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System;MemoryExtensions;false;AsMemory<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint", + "System;MemoryExtensions;false;AsMemory<>;(T[],System.Index);;Argument[0].Element;ReturnValue;generated:taint", + "System;MemoryExtensions;false;AsMemory<>;(T[],System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System;MemoryExtensions;false;AsMemory<>;(T[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint", + "System;MemoryExtensions;false;AsMemory<>;(T[],System.Range);;Argument[0].Element;ReturnValue;generated:taint", + "System;MemoryExtensions;false;EnumerateLines;(System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;EnumerateRunes;(System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;Trim;(System.Memory);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;Trim;(System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;Trim<>;(System.Memory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;Trim<>;(System.Memory,T);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;Trim<>;(System.ReadOnlyMemory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;Trim<>;(System.ReadOnlyMemory,T);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;Trim<>;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;Trim<>;(System.Span,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimEnd;(System.Memory);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimEnd;(System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimEnd<>;(System.Memory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimEnd<>;(System.Memory,T);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimEnd<>;(System.ReadOnlyMemory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimEnd<>;(System.ReadOnlyMemory,T);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimEnd<>;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimEnd<>;(System.Span,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimStart;(System.Memory);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimStart;(System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimStart<>;(System.Memory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimStart<>;(System.Memory,T);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimStart<>;(System.ReadOnlyMemory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimStart<>;(System.ReadOnlyMemory,T);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimStart<>;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MemoryExtensions;false;TrimStart<>;(System.Span,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint", + "System;MissingFieldException;false;MissingFieldException;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;MissingFieldException;false;MissingFieldException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System;MissingFieldException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;MissingMemberException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;MissingMemberException;false;MissingMemberException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System;MissingMemberException;false;MissingMemberException;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;MissingMemberException;false;MissingMemberException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System;MissingMemberException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;MissingMethodException;false;MissingMethodException;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;MissingMethodException;false;MissingMethodException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System;MissingMethodException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;MulticastDelegate;false;CombineImpl;(System.Delegate);;Argument[Qualifier];ReturnValue;generated:value", + "System;MulticastDelegate;false;DynamicInvokeImpl;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint", + "System;MulticastDelegate;false;GetInvocationList;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;MulticastDelegate;false;GetMethodImpl;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;MulticastDelegate;false;RemoveImpl;(System.Delegate);;Argument[Qualifier];ReturnValue;generated:value", + "System;NotFiniteNumberException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;Nullable;false;GetUnderlyingType;(System.Type);;Argument[0];ReturnValue;generated:taint", + "System;Nullable<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ObjectDisposedException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;ObjectDisposedException;false;ObjectDisposedException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System;ObjectDisposedException;false;ObjectDisposedException;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;ObjectDisposedException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ObjectDisposedException;false;get_ObjectName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;OperatingSystem;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;OperatingSystem;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;OperatingSystem;false;get_ServicePack;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;OperatingSystem;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;OperatingSystem;false;get_VersionString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;OperationCanceledException;false;OperationCanceledException;(System.String,System.Exception,System.Threading.CancellationToken);;Argument[2];Argument[Qualifier];generated:taint", + "System;OperationCanceledException;false;OperationCanceledException;(System.String,System.Threading.CancellationToken);;Argument[1];Argument[Qualifier];generated:taint", + "System;OperationCanceledException;false;OperationCanceledException;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System;OperationCanceledException;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;OperationCanceledException;false;set_CancellationToken;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint", + "System;ReadOnlyMemory<>;false;ReadOnlyMemory;(T[]);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System;ReadOnlyMemory<>;false;ReadOnlyMemory;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint", + "System;ReadOnlyMemory<>;false;Slice;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System;ReadOnlyMemory<>;false;Slice;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint", + "System;ReadOnlyMemory<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ReadOnlySpan<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;RuntimeFieldHandle;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;RuntimeMethodHandle;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;RuntimeTypeHandle;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;SequencePosition;false;GetObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;SequencePosition;false;SequencePosition;(System.Object,System.Int32);;Argument[0];Argument[Qualifier];generated:taint", + "System;Single;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint", + "System;Single;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System;Single;false;ToType;(System.Type,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System;Span<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;String;false;EnumerateRunes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;String;false;Replace;(System.String,System.String,System.Boolean,System.Globalization.CultureInfo);;Argument[Qualifier];ReturnValue;generated:taint", + "System;String;false;Replace;(System.String,System.String,System.StringComparison);;Argument[1];ReturnValue;generated:taint", + "System;String;false;Replace;(System.String,System.String,System.StringComparison);;Argument[Qualifier];ReturnValue;generated:taint", + "System;String;false;ReplaceLineEndings;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;String;false;ReplaceLineEndings;(System.String);;Argument[Qualifier];ReturnValue;generated:value", + "System;String;false;ToDateTime;(System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint", + "System;String;false;ToType;(System.Type,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint", + "System;StringNormalizationExtensions;false;Normalize;(System.String);;Argument[0];ReturnValue;generated:taint", + "System;StringNormalizationExtensions;false;Normalize;(System.String,System.Text.NormalizationForm);;Argument[0];ReturnValue;generated:taint", + "System;TimeOnly;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint", + "System;TimeOnly;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint", + "System;TimeSpan;false;op_UnaryPlus;(System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "System;TimeZone;true;ToLocalTime;(System.DateTime);;Argument[0];ReturnValue;generated:taint", + "System;TimeZone;true;ToUniversalTime;(System.DateTime);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[1];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[2];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[3];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[4];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime,System.TimeSpan);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime,System.TimeSpan);;Argument[1];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime,System.TimeSpan);;Argument[2];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime,System.TimeSpan);;Argument[3];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime,System.TimeSpan);;Argument[4];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime,System.TimeSpan);;Argument[5];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;get_BaseUtcOffsetDelta;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;get_DateEnd;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;get_DateStart;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;get_DaylightDelta;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;get_DaylightTransitionEnd;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo+AdjustmentRule;false;get_DaylightTransitionStart;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo+TransitionTime;false;CreateFixedDateRule;(System.DateTime,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo+TransitionTime;false;CreateFloatingDateRule;(System.DateTime,System.Int32,System.Int32,System.DayOfWeek);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo+TransitionTime;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;TimeZoneInfo+TransitionTime;false;get_TimeOfDay;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;ConvertTime;(System.DateTime,System.TimeZoneInfo);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;ConvertTime;(System.DateTime,System.TimeZoneInfo,System.TimeZoneInfo);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;ConvertTimeBySystemTimeZoneId;(System.DateTime,System.String);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;ConvertTimeBySystemTimeZoneId;(System.DateTime,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;ConvertTimeFromUtc;(System.DateTime,System.TimeZoneInfo);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;ConvertTimeToUtc;(System.DateTime);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;ConvertTimeToUtc;(System.DateTime,System.TimeZoneInfo);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String);;Argument[1];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String);;Argument[2];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String);;Argument[3];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[1];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[2];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[3];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[4];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[5].Element;ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[1];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[2];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[3];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[4];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[5].Element;ReturnValue;generated:taint", + "System;TimeZoneInfo;false;FindSystemTimeZoneById;(System.String);;Argument[0];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;TimeZoneInfo;false;GetUtcOffset;(System.DateTime);;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;GetUtcOffset;(System.DateTimeOffset);;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;get_BaseUtcOffset;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;get_DaylightName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TimeZoneInfo;false;get_StandardName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,,>;false;get_Item5;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,,>;false;get_Item6;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,,>;false;get_Item7;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,,>;false;get_Rest;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,>;false;get_Item5;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,>;false;get_Item6;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,,>;false;get_Item7;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,>;false;get_Item5;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,,>;false;get_Item6;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,,>;false;get_Item5;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Tuple<>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToTuple<>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint", + "System;TupleExtensions;false;ToValueTuple<>;(System.Tuple);;Argument[0];ReturnValue;generated:taint", + "System;Type;false;GetConstructor;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetConstructor;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetConstructor;(System.Reflection.BindingFlags,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetConstructor;(System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetConstructors;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetEvent;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetField;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetFields;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetInterface;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMember;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMembers;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMethod;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMethod;(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMethod;(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMethod;(System.String,System.Int32,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMethod;(System.String,System.Int32,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMethod;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMethod;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMethod;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMethod;(System.String,System.Reflection.BindingFlags,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMethod;(System.String,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMethod;(System.String,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetMethods;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetNestedType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetNestedTypes;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetProperties;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetProperty;(System.String);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetProperty;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetProperty;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetProperty;(System.String,System.Type);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetProperty;(System.String,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetProperty;(System.String,System.Type,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;GetProperty;(System.String,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;MakeGenericSignatureType;(System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint", + "System;Type;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;false;get_TypeInitializer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;true;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;true;GetMember;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;true;GetMemberWithSameMetadataDefinitionAs;(System.Reflection.MemberInfo);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Type;true;get_GenericTypeArguments;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TypeInitializationException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;TypeInitializationException;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TypeLoadException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;TypeLoadException;false;TypeLoadException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System;TypeLoadException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;TypeLoadException;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;UIntPtr;false;Abs;(System.UIntPtr);;Argument[0];ReturnValue;generated:taint", + "System;UIntPtr;false;Clamp;(System.UIntPtr,System.UIntPtr,System.UIntPtr);;Argument[0];ReturnValue;generated:taint", + "System;UIntPtr;false;Clamp;(System.UIntPtr,System.UIntPtr,System.UIntPtr);;Argument[1];ReturnValue;generated:taint", + "System;UIntPtr;false;Clamp;(System.UIntPtr,System.UIntPtr,System.UIntPtr);;Argument[2];ReturnValue;generated:taint", + "System;UIntPtr;false;Create<>;(TOther);;Argument[0];ReturnValue;generated:taint", + "System;UIntPtr;false;CreateSaturating<>;(TOther);;Argument[0];ReturnValue;generated:taint", + "System;UIntPtr;false;CreateTruncating<>;(TOther);;Argument[0];ReturnValue;generated:taint", + "System;UIntPtr;false;Max;(System.UIntPtr,System.UIntPtr);;Argument[0];ReturnValue;generated:taint", + "System;UIntPtr;false;Max;(System.UIntPtr,System.UIntPtr);;Argument[1];ReturnValue;generated:taint", + "System;UIntPtr;false;Min;(System.UIntPtr,System.UIntPtr);;Argument[0];ReturnValue;generated:taint", + "System;UIntPtr;false;Min;(System.UIntPtr,System.UIntPtr);;Argument[1];ReturnValue;generated:taint", + "System;UIntPtr;false;ToPointer;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;UIntPtr;false;TryCreate<>;(TOther,System.UIntPtr);;Argument[0];ReturnValue;generated:taint", + "System;UIntPtr;false;UIntPtr;(System.Void*);;Argument[0];Argument[Qualifier];generated:taint", + "System;UnhandledExceptionEventArgs;false;UnhandledExceptionEventArgs;(System.Object,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System;UnhandledExceptionEventArgs;false;get_ExceptionObject;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;UnitySerializationHolder;false;UnitySerializationHolder;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System;Uri;false;EscapeDataString;(System.String);;Argument[0];ReturnValue;generated:taint", + "System;Uri;false;EscapeString;(System.String);;Argument[0];ReturnValue;generated:taint", + "System;Uri;false;EscapeUriString;(System.String);;Argument[0];ReturnValue;generated:taint", + "System;Uri;false;GetComponents;(System.UriComponents,System.UriFormat);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Uri;false;GetLeftPart;(System.UriPartial);;Argument[Qualifier];ReturnValue;generated:taint", + "System;Uri;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;Uri;false;MakeRelative;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System;Uri;false;MakeRelativeUri;(System.Uri);;Argument[0];ReturnValue;generated:taint", + "System;Uri;false;TryCreate;(System.String,System.UriCreationOptions,System.Uri);;Argument[0];ReturnValue;generated:taint", + "System;Uri;false;TryCreate;(System.String,System.UriKind,System.Uri);;Argument[0];ReturnValue;generated:taint", + "System;Uri;false;TryCreate;(System.Uri,System.String,System.Uri);;Argument[0];ReturnValue;generated:taint", + "System;Uri;false;TryCreate;(System.Uri,System.String,System.Uri);;Argument[1];ReturnValue;generated:taint", + "System;Uri;false;TryCreate;(System.Uri,System.Uri,System.Uri);;Argument[0];ReturnValue;generated:taint", + "System;Uri;false;TryCreate;(System.Uri,System.Uri,System.Uri);;Argument[1];ReturnValue;generated:taint", + "System;Uri;false;UnescapeDataString;(System.String);;Argument[0];ReturnValue;generated:taint", + "System;Uri;false;Uri;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint", + "System;Uri;false;Uri;(System.String,System.UriCreationOptions);;Argument[0];Argument[Qualifier];generated:taint", + "System;Uri;false;Uri;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;Uri;false;Uri;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System;Uri;false;Uri;(System.Uri,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint", + "System;Uri;false;Uri;(System.Uri,System.String,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint", + "System;Uri;false;Uri;(System.Uri,System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System;Uri;false;Uri;(System.Uri,System.Uri);;Argument[1];Argument[Qualifier];generated:taint", + "System;Uri;false;get_Authority;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Uri;false;get_DnsSafeHost;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Uri;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Uri;false;get_IdnHost;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Uri;false;get_LocalPath;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Uri;false;get_Scheme;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;Uri;false;get_UserInfo;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;UriBuilder;false;UriBuilder;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;UriBuilder;false;UriBuilder;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;UriBuilder;false;UriBuilder;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint", + "System;UriBuilder;false;UriBuilder;(System.String,System.String,System.Int32,System.String);;Argument[3];Argument[Qualifier];generated:taint", + "System;UriBuilder;false;UriBuilder;(System.String,System.String,System.Int32,System.String,System.String);;Argument[4];Argument[Qualifier];generated:taint", + "System;UriBuilder;false;UriBuilder;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint", + "System;UriBuilder;false;get_Fragment;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;UriBuilder;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;UriBuilder;false;get_Password;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;UriBuilder;false;get_Path;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;UriBuilder;false;get_Query;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;UriBuilder;false;get_Scheme;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;UriBuilder;false;get_Uri;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;UriBuilder;false;get_UserName;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;UriBuilder;false;set_Fragment;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;UriBuilder;false;set_Host;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;UriBuilder;false;set_Password;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;UriBuilder;false;set_Path;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;UriBuilder;false;set_Query;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;UriBuilder;false;set_Scheme;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;UriBuilder;false;set_UserName;(System.String);;Argument[0];Argument[Qualifier];generated:taint", + "System;UriFormatException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint", + "System;UriParser;false;Register;(System.UriParser,System.String,System.Int32);;Argument[1];Argument[0];generated:taint", + "System;UriParser;true;GetComponents;(System.Uri,System.UriComponents,System.UriFormat);;Argument[0];ReturnValue;generated:taint", + "System;UriParser;true;OnNewUri;();;Argument[Qualifier];ReturnValue;generated:value", + "System;UriParser;true;Resolve;(System.Uri,System.Uri,System.UriFormatException);;Argument[0];ReturnValue;generated:taint", + "System;UriParser;true;Resolve;(System.Uri,System.Uri,System.UriFormatException);;Argument[1];ReturnValue;generated:taint", + "System;UriTypeConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint", + "System;UriTypeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint", + "System;ValueTuple<,,,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ValueTuple<,,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ValueTuple<,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ValueTuple<,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ValueTuple<,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ValueTuple<,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ValueTuple<,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint", + "System;ValueTuple<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint" + ] + } +} diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/system/Collections.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/system/Collections.qll index 55136cd4243..3f92a46c254 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/system/Collections.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/system/Collections.qll @@ -54,8 +54,8 @@ private class SystemCollectionsIEnumerableClearFlow extends SummarizedCallable { this.hasName("Clear") } - override predicate clearsContent(ParameterPosition pos, DataFlow::Content content) { - pos.isThisParameter() and + override predicate clearsContent(ParameterPosition pos, DataFlow::ContentSet content) { + (if this.(Modifiable).isStatic() then pos.getPosition() = 0 else pos.isThisParameter()) and content instanceof DataFlow::ElementContent } } diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/system/Text.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/system/Text.qll index 22d0923aa9d..11c541a0f79 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/system/Text.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/system/Text.qll @@ -32,7 +32,7 @@ private class SystemTextStringBuilderClearFlow extends SummarizedCallable { this = any(SystemTextStringBuilderClass s).getAMethod("Clear") } - override predicate clearsContent(ParameterPosition pos, DataFlow::Content content) { + override predicate clearsContent(ParameterPosition pos, DataFlow::ContentSet content) { pos.isThisParameter() and content instanceof DataFlow::ElementContent } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll index 6b6b49e3a60..744632c5f76 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll @@ -5,7 +5,6 @@ import csharp private import semmle.code.csharp.dataflow.flowsources.Remote -private import semmle.code.csharp.dataflow.TaintTracking private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.dataflow.FlowSummary diff --git a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql index b3fea8d8419..9f9eff6f1f6 100644 --- a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql +++ b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql @@ -1,6 +1,6 @@ /** * @name Potentially incorrect CompareTo(...) signature - * @description The declaring type of a method with signature 'CompareTo(T)' does not implement 'IComparable'. + * @description The declaring type of a method with signature `CompareTo(T)` does not implement `IComparable`. * @kind problem * @problem.severity warning * @precision medium diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 96d9cf50877..77df7a74581 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.1.2 + +## 0.1.1 + +## 0.1.0 + ## 0.0.13 ## 0.0.12 diff --git a/csharp/ql/src/Documentation/XmldocExtraParam.ql b/csharp/ql/src/Documentation/XmldocExtraParam.ql index be42720d439..a745edfb6d8 100644 --- a/csharp/ql/src/Documentation/XmldocExtraParam.ql +++ b/csharp/ql/src/Documentation/XmldocExtraParam.ql @@ -1,6 +1,6 @@ /** * @name Incorrect parameter name in documentation - * @description The parameter name given in a '' tag does not exist. Rename the parameter or + * @description The parameter name given in a `` tag does not exist. Rename the parameter or * change the name in the documentation to ensure that they are the same. * @kind problem * @problem.severity recommendation diff --git a/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql b/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql index 4763b3d958c..76c2039920d 100644 --- a/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql +++ b/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql @@ -1,6 +1,6 @@ /** * @name Incorrect type parameter name in documentation - * @description The type parameter name given in a '' tag does not exist. Rename the parameter or + * @description The type parameter name given in a `` tag does not exist. Rename the parameter or * change the name in the documentation to ensure that they are the same. * @kind problem * @problem.severity recommendation diff --git a/csharp/ql/src/Documentation/XmldocMissingException.ql b/csharp/ql/src/Documentation/XmldocMissingException.ql index 87af9c299f5..a5c06c598c7 100644 --- a/csharp/ql/src/Documentation/XmldocMissingException.ql +++ b/csharp/ql/src/Documentation/XmldocMissingException.ql @@ -1,6 +1,6 @@ /** * @name Missing documentation for exception - * @description Exceptions thrown by the method should be documented using ' ' tags. + * @description Exceptions thrown by the method should be documented using ` ` tags. * Ensure that the correct type of the exception is given in the 'cref' attribute. * @kind problem * @problem.severity recommendation diff --git a/csharp/ql/src/Documentation/XmldocMissingParam.ql b/csharp/ql/src/Documentation/XmldocMissingParam.ql index 1926bee4eb6..adf9fcd5718 100644 --- a/csharp/ql/src/Documentation/XmldocMissingParam.ql +++ b/csharp/ql/src/Documentation/XmldocMissingParam.ql @@ -1,6 +1,6 @@ /** * @name Missing documentation for parameter - * @description All parameters should be documented using ' ' tags. + * @description All parameters should be documented using ` ` tags. * Ensure that the name attribute matches the name of the parameter. * @kind problem * @problem.severity recommendation diff --git a/csharp/ql/src/Documentation/XmldocMissingReturn.ql b/csharp/ql/src/Documentation/XmldocMissingReturn.ql index 112c6238d97..05c93227c3c 100644 --- a/csharp/ql/src/Documentation/XmldocMissingReturn.ql +++ b/csharp/ql/src/Documentation/XmldocMissingReturn.ql @@ -1,7 +1,7 @@ /** * @name Missing documentation for return value * @description The method returns a value, but the return value is not documented using - * a '' tag. + * a `` tag. * @kind problem * @problem.severity recommendation * @precision low diff --git a/csharp/ql/src/Documentation/XmldocMissingSummary.ql b/csharp/ql/src/Documentation/XmldocMissingSummary.ql index 74238b63ed4..312848b6bdf 100644 --- a/csharp/ql/src/Documentation/XmldocMissingSummary.ql +++ b/csharp/ql/src/Documentation/XmldocMissingSummary.ql @@ -1,6 +1,6 @@ /** * @name Missing a summary in documentation comment - * @description The documentation comment does not contain a '' tag. + * @description The documentation comment does not contain a `` tag. * @kind problem * @problem.severity recommendation * @precision high diff --git a/csharp/ql/src/Documentation/XmldocMissingTypeParam.ql b/csharp/ql/src/Documentation/XmldocMissingTypeParam.ql index d559783146c..cd1e0eeea3e 100644 --- a/csharp/ql/src/Documentation/XmldocMissingTypeParam.ql +++ b/csharp/ql/src/Documentation/XmldocMissingTypeParam.ql @@ -1,6 +1,6 @@ /** * @name Missing documentation for type parameter - * @description All type parameters should be documented using ' ' tags. + * @description All type parameters should be documented using ` ` tags. * Ensure that the 'name' attribute matches the name of the type parameter. * @kind problem * @problem.severity recommendation diff --git a/csharp/ql/src/Language Abuse/ForeachCapture.ql b/csharp/ql/src/Language Abuse/ForeachCapture.ql index 7bef3bc3405..b3597418390 100644 --- a/csharp/ql/src/Language Abuse/ForeachCapture.ql +++ b/csharp/ql/src/Language Abuse/ForeachCapture.ql @@ -13,6 +13,7 @@ import csharp import semmle.code.csharp.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl +import semmle.code.csharp.dataflow.internal.DataFlowDispatch as DataFlowDispatch import semmle.code.csharp.dataflow.internal.DataFlowPrivate as DataFlowPrivate import semmle.code.csharp.frameworks.system.Collections import semmle.code.csharp.frameworks.system.collections.Generic @@ -76,7 +77,8 @@ Element getAssignmentTarget(Expr e) { Element getCollectionAssignmentTarget(Expr e) { // Store into collection via method exists(DataFlowPrivate::PostUpdateNode postNode | - FlowSummaryImpl::Private::Steps::summarySetterStep(DataFlow::exprNode(e), _, postNode) and + FlowSummaryImpl::Private::Steps::summarySetterStep(DataFlow::exprNode(e), _, postNode, + any(DataFlowDispatch::DataFlowSummarizedCallable sc)) and result.(Variable).getAnAccess() = postNode.getPreUpdateNode().asExpr() ) or diff --git a/csharp/ql/src/Likely Bugs/ICryptoTransform.qll b/csharp/ql/src/Likely Bugs/ICryptoTransform.qll index 5570e51bdfc..574dd1e69af 100644 --- a/csharp/ql/src/Likely Bugs/ICryptoTransform.qll +++ b/csharp/ql/src/Likely Bugs/ICryptoTransform.qll @@ -1,6 +1,4 @@ import csharp -import semmle.code.csharp.dataflow.DataFlow -import csharp class ImplementsICryptoTransform extends Class { ImplementsICryptoTransform() { diff --git a/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql b/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql index 6dab3dfcfab..838406ab82e 100644 --- a/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql +++ b/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql @@ -11,7 +11,6 @@ import csharp import DataFlow::PathGraph -import semmle.code.csharp.dataflow.TaintTracking class UnsafeYearCreationFromArithmeticConfiguration extends TaintTracking::Configuration { UnsafeYearCreationFromArithmeticConfiguration() { @@ -21,7 +20,7 @@ class UnsafeYearCreationFromArithmeticConfiguration extends TaintTracking::Confi override predicate isSource(DataFlow::Node source) { exists(ArithmeticOperation ao, PropertyAccess pa | ao = source.asExpr() | pa = ao.getAChild*() and - pa.getProperty().getQualifiedName().matches("System.DateTime.Year") + pa.getProperty().hasQualifiedName("System.DateTime.Year") ) } diff --git a/csharp/ql/src/Likely Bugs/ParallelSink.qll b/csharp/ql/src/Likely Bugs/ParallelSink.qll index 0b2cac08152..ee807b6d95e 100644 --- a/csharp/ql/src/Likely Bugs/ParallelSink.qll +++ b/csharp/ql/src/Likely Bugs/ParallelSink.qll @@ -1,5 +1,4 @@ import csharp -import semmle.code.csharp.dataflow.DataFlow abstract class ParallelSink extends DataFlow::Node { } diff --git a/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql b/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql index 7787a1bd622..9ed4963169f 100644 --- a/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql +++ b/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql @@ -15,7 +15,6 @@ */ import csharp -import semmle.code.csharp.dataflow.DataFlow import ParallelSink import ICryptoTransform diff --git a/csharp/ql/src/Metrics/Summaries/FrameworkCoverage.ql b/csharp/ql/src/Metrics/Summaries/FrameworkCoverage.ql new file mode 100644 index 00000000000..625c4e3e881 --- /dev/null +++ b/csharp/ql/src/Metrics/Summaries/FrameworkCoverage.ql @@ -0,0 +1,18 @@ +/** + * @id csharp/summary/framework-coverage + * @name Metrics of framework coverage + * @description Expose metrics for the number of API endpoints covered by CSV models. + * @kind metric + * @tags summary + */ + +import csharp +import semmle.code.csharp.dataflow.ExternalFlow + +from string namespaceAndType, int rows +where + exists(string namespace, string type | + namespaceAndType = namespace + ";" + type and + rows = strictsum(int n, string kind | modelCoverage(namespace, _, kind, type, n) | n) + ) +select namespaceAndType, rows diff --git a/csharp/ql/src/Security Features/CWE-020/UntrustedDataToExternalAPI.ql b/csharp/ql/src/Security Features/CWE-020/UntrustedDataToExternalAPI.ql index aaf18f7f312..01faeb6ba75 100644 --- a/csharp/ql/src/Security Features/CWE-020/UntrustedDataToExternalAPI.ql +++ b/csharp/ql/src/Security Features/CWE-020/UntrustedDataToExternalAPI.ql @@ -10,7 +10,6 @@ */ import csharp -import semmle.code.csharp.dataflow.TaintTracking import semmle.code.csharp.security.dataflow.ExternalAPIsQuery import DataFlow::PathGraph diff --git a/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql b/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql index 1ad4fad9e41..02aa158a120 100644 --- a/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql +++ b/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql @@ -2,7 +2,7 @@ * @name XML injection * @description Building an XML document from user-controlled sources is vulnerable to insertion of * malicious code by the user. - * @kind problem + * @kind path-problem * @id cs/xml-injection * @problem.severity error * @security-severity 8.8 @@ -12,6 +12,7 @@ */ import csharp +import DataFlow::PathGraph import semmle.code.csharp.security.dataflow.flowsources.Remote import semmle.code.csharp.frameworks.system.Xml @@ -45,6 +46,6 @@ class TaintTrackingConfiguration extends TaintTracking::Configuration { } } -from TaintTrackingConfiguration c, DataFlow::Node source, DataFlow::Node sink -where c.hasFlow(source, sink) -select sink, "$@ flows to here and is inserted as XML.", source, "User-provided value" +from TaintTrackingConfiguration c, DataFlow::PathNode source, DataFlow::PathNode sink +where c.hasFlowPath(source, sink) +select sink, source, sink, "$@ flows to here and is inserted as XML.", source, "User-provided value" diff --git a/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql b/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql index d079c4f9ac9..f2b0918e1e5 100644 --- a/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql +++ b/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql @@ -14,7 +14,6 @@ import csharp import semmle.code.csharp.security.dataflow.flowsources.Remote import semmle.code.csharp.security.dataflow.flowsources.Local -import semmle.code.csharp.dataflow.TaintTracking import semmle.code.csharp.frameworks.Format import DataFlow::PathGraph diff --git a/csharp/ql/src/Security Features/CWE-209/ExceptionInformationExposure.ql b/csharp/ql/src/Security Features/CWE-209/ExceptionInformationExposure.ql index 34f45c0c64e..7f9c87de5fc 100644 --- a/csharp/ql/src/Security Features/CWE-209/ExceptionInformationExposure.ql +++ b/csharp/ql/src/Security Features/CWE-209/ExceptionInformationExposure.ql @@ -28,13 +28,6 @@ class TaintTrackingConfiguration extends TaintTracking::Configuration { exists(Expr exceptionExpr | // Writing an exception directly is bad source.asExpr() = exceptionExpr - or - // Writing an exception property is bad - source.asExpr().(PropertyAccess).getQualifier() = exceptionExpr - or - // Writing the result of ToString is bad - source.asExpr() = - any(MethodCall mc | mc.getQualifier() = exceptionExpr and mc.getTarget().hasName("ToString")) | // Expr has type `System.Exception`. exceptionExpr.getType().(RefType).getABaseType*() instanceof SystemExceptionClass and @@ -47,12 +40,26 @@ class TaintTrackingConfiguration extends TaintTracking::Configuration { ) } + override predicate isAdditionalTaintStep(DataFlow::Node source, DataFlow::Node sink) { + sink.asExpr() = + any(MethodCall mc | + source.asExpr() = mc.getQualifier() and + mc.getTarget().hasName("ToString") and + mc.getQualifier().getType().(RefType).getABaseType*() instanceof SystemExceptionClass + ) + } + override predicate isSink(DataFlow::Node sink) { sink instanceof RemoteFlowSink } override predicate isSanitizer(DataFlow::Node sanitizer) { // Do not flow through Message sanitizer.asExpr() = any(SystemExceptionClass se).getProperty("Message").getAnAccess() } + + override predicate isSanitizerIn(DataFlow::Node sanitizer) { + // Do not flow through Message + sanitizer.asExpr().getType().(RefType).getABaseType*() instanceof SystemExceptionClass + } } from TaintTrackingConfiguration c, DataFlow::PathNode source, DataFlow::PathNode sink diff --git a/csharp/ql/src/Security Features/CWE-248/MissingASPNETGlobalErrorHandler.ql b/csharp/ql/src/Security Features/CWE-248/MissingASPNETGlobalErrorHandler.ql index 1e7a9a4ddb1..f37d4c497de 100644 --- a/csharp/ql/src/Security Features/CWE-248/MissingASPNETGlobalErrorHandler.ql +++ b/csharp/ql/src/Security Features/CWE-248/MissingASPNETGlobalErrorHandler.ql @@ -14,7 +14,6 @@ import csharp import semmle.code.asp.WebConfig -import semmle.code.csharp.XML class Application_Error extends Method { Application_Error() { diff --git a/csharp/ql/src/Stubs/make_stubs_nuget.py b/csharp/ql/src/Stubs/make_stubs_nuget.py index c95ab3a0258..f06fc75e0de 100644 --- a/csharp/ql/src/Stubs/make_stubs_nuget.py +++ b/csharp/ql/src/Stubs/make_stubs_nuget.py @@ -71,7 +71,7 @@ if (version != "latest"): cmd.append(version) run_cmd(cmd) -sdk_version = '6.0.101' +sdk_version = '6.0.202' print("\n* Creating new global.json file and setting SDK to " + sdk_version) run_cmd(['dotnet', 'new', 'globaljson', '--force', '--sdk-version', sdk_version, '--output', workDir]) diff --git a/csharp/ql/src/Telemetry/ExternalApi.qll b/csharp/ql/src/Telemetry/ExternalApi.qll index 5ad5bab7784..b47c9c2c077 100644 --- a/csharp/ql/src/Telemetry/ExternalApi.qll +++ b/csharp/ql/src/Telemetry/ExternalApi.qll @@ -1,14 +1,13 @@ /** Provides classes and predicates related to handling APIs from external libraries. */ private import csharp +private import dotnet private import semmle.code.csharp.dispatch.Dispatch -private import semmle.code.csharp.dataflow.DataFlow private import semmle.code.csharp.dataflow.ExternalFlow private import semmle.code.csharp.dataflow.FlowSummary private import semmle.code.csharp.dataflow.internal.DataFlowImplCommon as DataFlowImplCommon private import semmle.code.csharp.dataflow.internal.DataFlowPrivate private import semmle.code.csharp.dataflow.internal.DataFlowDispatch as DataFlowDispatch -private import semmle.code.csharp.dataflow.TaintTracking private import semmle.code.csharp.dataflow.internal.TaintTrackingPrivate private import semmle.code.csharp.security.dataflow.flowsources.Remote @@ -26,8 +25,8 @@ class TestLibrary extends RefType { /** * An external API from either the C# Standard Library or a 3rd party library. */ -class ExternalApi extends DataFlowDispatch::DataFlowCallable { - ExternalApi() { this.fromLibrary() } +class ExternalApi extends DotNet::Callable { + ExternalApi() { this.isUnboundDeclaration() and this.fromLibrary() } /** * Gets the unbound type, name and parameter types of this API. @@ -81,7 +80,8 @@ class ExternalApi extends DataFlowDispatch::DataFlowCallable { /** Holds if this API has a supported summary. */ predicate hasSummary() { - this instanceof SummarizedCallable or + this instanceof SummarizedCallable + or defaultAdditionalTaintStep(this.getAnInput(), _) } diff --git a/csharp/ql/src/Telemetry/ExternalLibraryUsage.ql b/csharp/ql/src/Telemetry/ExternalLibraryUsage.ql index 473d1ce986d..51ae5609025 100644 --- a/csharp/ql/src/Telemetry/ExternalLibraryUsage.ql +++ b/csharp/ql/src/Telemetry/ExternalLibraryUsage.ql @@ -2,7 +2,7 @@ * @name External libraries * @description A list of external libraries used in the code * @kind metric - * @tags summary + * @tags summary telemetry * @id csharp/telemetry/external-libs */ diff --git a/csharp/ql/src/Telemetry/SupportedExternalSinks.ql b/csharp/ql/src/Telemetry/SupportedExternalSinks.ql index 446da21043d..2f13c334ba4 100644 --- a/csharp/ql/src/Telemetry/SupportedExternalSinks.ql +++ b/csharp/ql/src/Telemetry/SupportedExternalSinks.ql @@ -2,7 +2,7 @@ * @name Supported sinks in external libraries * @description A list of 3rd party APIs detected as sinks. Excludes APIs exposed by test libraries. * @kind metric - * @tags summary + * @tags summary telemetry * @id csharp/telemetry/supported-external-api-sinks */ diff --git a/csharp/ql/src/Telemetry/SupportedExternalSources.ql b/csharp/ql/src/Telemetry/SupportedExternalSources.ql index ae785ee518e..9a81f7a7ffd 100644 --- a/csharp/ql/src/Telemetry/SupportedExternalSources.ql +++ b/csharp/ql/src/Telemetry/SupportedExternalSources.ql @@ -2,7 +2,7 @@ * @name Supported sources in external libraries * @description A list of 3rd party APIs detected as sources. Excludes APIs exposed by test libraries. * @kind metric - * @tags summary + * @tags summary telemetry * @id csharp/telemetry/supported-external-api-sources */ diff --git a/csharp/ql/src/Telemetry/SupportedExternalTaint.ql b/csharp/ql/src/Telemetry/SupportedExternalTaint.ql index 51c0e1713d8..022c935f77e 100644 --- a/csharp/ql/src/Telemetry/SupportedExternalTaint.ql +++ b/csharp/ql/src/Telemetry/SupportedExternalTaint.ql @@ -2,7 +2,7 @@ * @name Supported flow steps in external libraries * @description A list of 3rd party APIs detected as flow steps. Excludes APIs exposed by test libraries. * @kind metric - * @tags summary + * @tags summary telemetry * @id csharp/telemetry/supported-external-api-taint */ diff --git a/csharp/ql/src/Telemetry/UnsupportedExternalAPIs.ql b/csharp/ql/src/Telemetry/UnsupportedExternalAPIs.ql index 59a4064c3a2..c9428be413f 100644 --- a/csharp/ql/src/Telemetry/UnsupportedExternalAPIs.ql +++ b/csharp/ql/src/Telemetry/UnsupportedExternalAPIs.ql @@ -2,7 +2,7 @@ * @name Usage of unsupported APIs coming from external libraries * @description A list of 3rd party APIs used in the codebase. Excludes APIs exposed by test libraries. * @kind metric - * @tags summary + * @tags summary telemetry * @id csharp/telemetry/unsupported-external-api */ diff --git a/csharp/ql/src/change-notes/released/0.1.0.md b/csharp/ql/src/change-notes/released/0.1.0.md new file mode 100644 index 00000000000..716b38240a4 --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.1.0.md @@ -0,0 +1 @@ +## 0.1.0 diff --git a/csharp/ql/src/change-notes/released/0.1.1.md b/csharp/ql/src/change-notes/released/0.1.1.md new file mode 100644 index 00000000000..f8f257d7250 --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.1.1.md @@ -0,0 +1 @@ +## 0.1.1 diff --git a/csharp/ql/src/change-notes/released/0.1.2.md b/csharp/ql/src/change-notes/released/0.1.2.md new file mode 100644 index 00000000000..66bd49d11eb --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.1.2.md @@ -0,0 +1 @@ +## 0.1.2 diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 044e54e4f7e..6abd14b1ef8 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.13 +lastReleaseVersion: 0.1.2 diff --git a/csharp/ql/src/definitions.qll b/csharp/ql/src/definitions.qll index 8580f88d05d..4feaf20629c 100644 --- a/csharp/ql/src/definitions.qll +++ b/csharp/ql/src/definitions.qll @@ -105,7 +105,7 @@ private class AccessUse extends Access, Use { not this.(PropertyAccess).getParent().getParent() instanceof Property // Property initializer } - /** Gets the qualifier of this acccess, if any. */ + /** Gets the qualifier of this access, if any. */ private Expr getFormatQualifier() { result = this.(QualifiableExpr).getQualifier() and not result.isImplicit() 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 5a10f091b29..edcbf425497 100644 --- a/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql +++ b/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql @@ -10,7 +10,6 @@ import csharp import semmle.code.csharp.dataflow.DataFlow2 -import semmle.code.csharp.dataflow.TaintTracking import semmle.code.csharp.dataflow.TaintTracking2 import DataFlow::PathGraph diff --git a/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql b/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql index 31c00e8a378..4745daf6b8b 100644 --- a/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql +++ b/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql @@ -70,7 +70,7 @@ class DateTimeStruct extends Struct { } /** - * Holds if the Callable is used for DateTime comparision + * Holds if the Callable is used for DateTime comparison */ Callable getAComparisonCallable() { (result = this.getAnOperator() or result = this.getAMethod()) and diff --git a/csharp/ql/src/experimental/ir/implementation/EdgeKind.qll b/csharp/ql/src/experimental/ir/implementation/EdgeKind.qll index 32e36bb6787..91e1fe03e23 100644 --- a/csharp/ql/src/experimental/ir/implementation/EdgeKind.qll +++ b/csharp/ql/src/experimental/ir/implementation/EdgeKind.qll @@ -67,7 +67,7 @@ class DefaultEdge extends EdgeKind, TDefaultEdge { /** * A "case" edge, representing the successor of a `Switch` instruction when the - * the condition value matches a correponding `case` label. + * the condition value matches a corresponding `case` label. */ class CaseEdge extends EdgeKind, TCaseEdge { string minValue; diff --git a/csharp/ql/src/experimental/ir/implementation/raw/gvn/ValueNumbering.qll b/csharp/ql/src/experimental/ir/implementation/raw/gvn/ValueNumbering.qll index 796fb792366..ca3c378cd7e 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/gvn/ValueNumbering.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/gvn/ValueNumbering.qll @@ -34,7 +34,7 @@ class ValueNumber extends TValueNumber { final Instruction getAnInstruction() { this = valueNumber(result) } /** - * Gets one of the instructions that was assigned this value number. The chosen instuction is + * Gets one of the instructions that was assigned this value number. The chosen instruction is * deterministic but arbitrary. Intended for use only in debugging. */ final Instruction getExampleInstruction() { diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConstruction.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConstruction.qll index 032026e7969..db6bd5c24e5 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConstruction.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConstruction.qll @@ -13,7 +13,6 @@ private import TranslatedExpr private import TranslatedStmt private import desugar.Foreach private import TranslatedFunction -private import experimental.ir.Util private import experimental.ir.internal.IRCSharpLanguage as Language TranslatedElement getInstructionTranslatedElement(Instruction instruction) { diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedCall.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedCall.qll index a2c6a708c72..e131a26be65 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedCall.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedCall.qll @@ -5,7 +5,6 @@ private import InstructionTag private import TranslatedElement private import TranslatedExpr private import TranslatedInitialization -private import experimental.ir.Util private import experimental.ir.implementation.raw.internal.common.TranslatedCallBase private import experimental.ir.internal.IRCSharpLanguage as Language diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedElement.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedElement.qll index d44b2f453f1..7fc54f80b80 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedElement.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedElement.qll @@ -10,7 +10,6 @@ private import TranslatedCondition private import TranslatedFunction private import TranslatedStmt private import IRConstruction -private import experimental.ir.Util private import experimental.ir.internal.IRCSharpLanguage as Language private import desugar.Foreach private import desugar.Delegate diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedExpr.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedExpr.qll index a3327d6775c..c4ad2428202 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedExpr.qll @@ -16,7 +16,6 @@ private import common.TranslatedExprBase private import desugar.Delegate private import desugar.internal.TranslatedCompilerGeneratedCall import TranslatedCall -private import experimental.ir.Util private import experimental.ir.internal.IRCSharpLanguage as Language /** diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedInitialization.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedInitialization.qll index 3df60c9f80d..d5b287ddbde 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedInitialization.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedInitialization.qll @@ -11,7 +11,6 @@ private import InstructionTag private import TranslatedElement private import TranslatedExpr private import TranslatedFunction -private import experimental.ir.Util private import IRInternal private import desugar.Delegate diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedCallBase.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedCallBase.qll index a870ed02648..f14a420cfeb 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedCallBase.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedCallBase.qll @@ -9,7 +9,6 @@ private import experimental.ir.implementation.internal.OperandTag private import experimental.ir.implementation.raw.internal.InstructionTag private import experimental.ir.implementation.raw.internal.TranslatedElement private import experimental.ir.implementation.raw.internal.TranslatedExpr -private import experimental.ir.Util private import experimental.ir.internal.CSharpType private import experimental.ir.internal.IRCSharpLanguage as Language private import TranslatedExprBase diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Common.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Common.qll index ef40d716fea..19b773c2622 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Common.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Common.qll @@ -183,7 +183,7 @@ abstract class TranslatedCompilerGeneratedVariableAccess extends TranslatedCompi override Instruction getChildSuccessor(TranslatedElement child) { none() } /** - * Returns the type of the accessed variable. Can be overriden when the return + * Returns the type of the accessed variable. Can be overridden when the return * type is different than the type of the underlying variable. */ Type getVariableType() { result = getResultType() } diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll index 796fb792366..ca3c378cd7e 100644 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll +++ b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll @@ -34,7 +34,7 @@ class ValueNumber extends TValueNumber { final Instruction getAnInstruction() { this = valueNumber(result) } /** - * Gets one of the instructions that was assigned this value number. The chosen instuction is + * Gets one of the instructions that was assigned this value number. The chosen instruction is * deterministic but arbitrary. Intended for use only in debugging. */ final Instruction getExampleInstruction() { diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll index 13ec2ca4ca4..303a9683011 100644 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll +++ b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll @@ -1005,7 +1005,7 @@ predicate canReuseSsaForMemoryResult(Instruction instruction) { deprecated predicate canReuseSSAForMemoryResult = canReuseSsaForMemoryResult/1; /** - * Expose some of the internal predicates to PrintSSA.qll. We do this by publically importing those modules in the + * Expose some of the internal predicates to PrintSSA.qll. We do this by publicly importing those modules in the * `DebugSSA` module, which is then imported by PrintSSA. */ module DebugSsa { diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 7375f2937ac..873dbdff8c6 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.1.0-dev +version: 0.1.3-dev groups: - csharp - queries diff --git a/csharp/ql/src/utils/model-generator/CaptureSinkModels.ql b/csharp/ql/src/utils/model-generator/CaptureSinkModels.ql index 74a3b64636d..8aab373447e 100644 --- a/csharp/ql/src/utils/model-generator/CaptureSinkModels.ql +++ b/csharp/ql/src/utils/model-generator/CaptureSinkModels.ql @@ -3,6 +3,7 @@ * @description Finds public methods that act as sinks as they flow into a a known sink. * @kind diagnostic * @id cs/utils/model-generator/sink-models + * @tags model-generator */ private import internal.CaptureModels diff --git a/csharp/ql/src/utils/model-generator/CaptureSourceModels.ql b/csharp/ql/src/utils/model-generator/CaptureSourceModels.ql index df8c873f065..f60682b2b6d 100644 --- a/csharp/ql/src/utils/model-generator/CaptureSourceModels.ql +++ b/csharp/ql/src/utils/model-generator/CaptureSourceModels.ql @@ -3,6 +3,7 @@ * @description Finds APIs that act as sources as they expose already known sources. * @kind diagnostic * @id cs/utils/model-generator/source-models + * @tags model-generator */ private import internal.CaptureModels diff --git a/csharp/ql/src/utils/model-generator/CaptureSummaryModels.ql b/csharp/ql/src/utils/model-generator/CaptureSummaryModels.ql index 8e3b324f9f4..ffc98bd2250 100644 --- a/csharp/ql/src/utils/model-generator/CaptureSummaryModels.ql +++ b/csharp/ql/src/utils/model-generator/CaptureSummaryModels.ql @@ -3,6 +3,7 @@ * @description Finds applicable summary models to be used by other queries. * @kind diagnostic * @id cs/utils/model-generator/summary-models + * @tags model-generator */ private import semmle.code.csharp.dataflow.ExternalFlow diff --git a/csharp/ql/src/utils/model-generator/internal/CaptureModels.qll b/csharp/ql/src/utils/model-generator/internal/CaptureModels.qll index 81f13d978dd..84af7b57938 100644 --- a/csharp/ql/src/utils/model-generator/internal/CaptureModels.qll +++ b/csharp/ql/src/utils/model-generator/internal/CaptureModels.qll @@ -90,18 +90,34 @@ string captureQualifierFlow(TargetApi api) { result = asValueModel(api, qualifierString(), "ReturnValue") } +private int accessPathLimit() { result = 2 } + /** * A FlowState representing a tainted read. */ private class TaintRead extends DataFlow::FlowState { - TaintRead() { this = "TaintRead" } + private int step; + + TaintRead() { this = "TaintRead(" + step + ")" and step in [0 .. accessPathLimit()] } + + /** + * Gets the flow state step number. + */ + int getStep() { result = step } } /** * A FlowState representing a tainted write. */ private class TaintStore extends DataFlow::FlowState { - TaintStore() { this = "TaintStore" } + private int step; + + TaintStore() { this = "TaintStore(" + step + ")" and step in [1 .. accessPathLimit()] } + + /** + * Gets the flow state step number. + */ + int getStep() { result = step } } /** @@ -116,7 +132,7 @@ private class ThroughFlowConfig extends TaintTracking::Configuration { override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { source instanceof DataFlow::ParameterNode and source.getEnclosingCallable() instanceof TargetApi and - state instanceof TaintRead + state.(TaintRead).getStep() = 0 } override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { @@ -133,15 +149,17 @@ private class ThroughFlowConfig extends TaintTracking::Configuration { exists(DataFlowImplCommon::TypedContent tc | DataFlowImplCommon::store(node1, tc, node2, _) and isRelevantContent(tc.getContent()) and - (state1 instanceof TaintRead or state1 instanceof TaintStore) and - state2 instanceof TaintStore + ( + state1 instanceof TaintRead and state2.(TaintStore).getStep() = 1 + or + state1.(TaintStore).getStep() + 1 = state2.(TaintStore).getStep() + ) ) or exists(DataFlow::Content c | DataFlowPrivate::readStep(node1, c, node2) and isRelevantContent(c) and - state1 instanceof TaintRead and - state2 instanceof TaintRead + state1.(TaintRead).getStep() + 1 = state2.(TaintRead).getStep() ) } diff --git a/csharp/ql/src/utils/model-generator/internal/CaptureModelsSpecific.qll b/csharp/ql/src/utils/model-generator/internal/CaptureModelsSpecific.qll index b95d44a9a49..f33f18abee2 100644 --- a/csharp/ql/src/utils/model-generator/internal/CaptureModelsSpecific.qll +++ b/csharp/ql/src/utils/model-generator/internal/CaptureModelsSpecific.qll @@ -3,10 +3,12 @@ */ private import csharp as CS +private import dotnet private import semmle.code.csharp.commons.Util as Util private import semmle.code.csharp.commons.Collections as Collections private import semmle.code.csharp.dataflow.internal.DataFlowDispatch private import semmle.code.csharp.frameworks.System as System +private import semmle.code.csharp.frameworks.system.linq.Expressions import semmle.code.csharp.dataflow.ExternalFlow as ExternalFlow import semmle.code.csharp.dataflow.internal.DataFlowImplCommon as DataFlowImplCommon import semmle.code.csharp.dataflow.internal.DataFlowPrivate as DataFlowPrivate @@ -18,21 +20,11 @@ module TaintTracking = CS::TaintTracking; class Type = CS::Type; /** - * Holds if `api` is an override or an interface implementation that - * is irrelevant to the data flow analysis. + * Holds if any of the parameters of `api` are `System.Func<>`. */ -private predicate isIrrelevantOverrideOrImplementation(CS::Callable api) { - exists(CS::Callable exclude, CS::Method m | - ( - api = m.getAnOverrider*().getUnboundDeclaration() - or - api = m.getAnUltimateImplementor().getUnboundDeclaration() - ) and - exclude = m.getUnboundDeclaration() - | - exists(System::SystemObjectClass c | exclude = [c.getGetHashCodeMethod(), c.getEqualsMethod()]) - or - exists(System::SystemIEquatableTInterface i | exclude = i.getEqualsMethod()) +private predicate isHigherOrder(CS::Callable api) { + exists(Type t | t = api.getAParameter().getType().getUnboundDeclaration() | + t instanceof SystemLinqExpressions::DelegateExtType ) } @@ -44,7 +36,7 @@ private predicate isRelevantForModels(CS::Callable api) { api.getDeclaringType().getNamespace().getQualifiedName() != "" and not api instanceof CS::ConversionOperator and not api instanceof Util::MainMethod and - not isIrrelevantOverrideOrImplementation(api) + not isHigherOrder(api) } /** @@ -53,9 +45,10 @@ private predicate isRelevantForModels(CS::Callable api) { * In the Standard library and 3rd party libraries it the callables that can be called * from outside the library itself. */ -class TargetApiSpecific extends DataFlowCallable { +class TargetApiSpecific extends DotNet::Callable { TargetApiSpecific() { this.fromSource() and + this.isUnboundDeclaration() and isRelevantForModels(this) } } @@ -65,8 +58,13 @@ predicate asPartialModel = DataFlowPrivate::Csv::asPartialModel/1; /** * Holds for type `t` for fields that are relevant as an intermediate * read or write step in the data flow analysis. + * That is, flow through any data-flow node that does not have a relevant type + * will be excluded. */ -predicate isRelevantType(CS::Type t) { not t instanceof CS::Enum } +predicate isRelevantType(CS::Type t) { + not t instanceof CS::SimpleType and + not t instanceof CS::Enum +} /** * Gets the CSV string representation of the qualifier. @@ -114,7 +112,7 @@ string returnNodeAsOutput(DataFlowImplCommon::ReturnNodeExt node) { * Gets the enclosing callable of `ret`. */ CS::Callable returnNodeEnclosingCallable(DataFlowImplCommon::ReturnNodeExt ret) { - result = DataFlowImplCommon::getNodeEnclosingCallable(ret) + result = DataFlowImplCommon::getNodeEnclosingCallable(ret).getUnderlyingCallable() } /** diff --git a/csharp/ql/test/TestUtilities/InlineExpectationsTest.qll b/csharp/ql/test/TestUtilities/InlineExpectationsTest.qll index a4d264b2703..3891fcf13a1 100644 --- a/csharp/ql/test/TestUtilities/InlineExpectationsTest.qll +++ b/csharp/ql/test/TestUtilities/InlineExpectationsTest.qll @@ -181,7 +181,7 @@ private string expectationCommentPattern() { result = "\\s*\\$((?:[^/]|/[^/])*)( /** * The possible columns in an expectation comment. The `TDefaultColumn` branch represents the first * column in a comment. This column is not precedeeded by a name. `TNamedColumn(name)` represents a - * column containing expected results preceeded by the string `name:`. + * column containing expected results preceded by the string `name:`. */ private newtype TColumn = TDefaultColumn() or diff --git a/csharp/ql/test/TestUtilities/InlineExpectationsTestPrivate.qll b/csharp/ql/test/TestUtilities/InlineExpectationsTestPrivate.qll index 3df85cc0fd6..4f3c3f6bef5 100644 --- a/csharp/ql/test/TestUtilities/InlineExpectationsTestPrivate.qll +++ b/csharp/ql/test/TestUtilities/InlineExpectationsTestPrivate.qll @@ -1,5 +1,4 @@ import csharp -import semmle.code.csharp.Comments /** * A class representing line comments in C# used by the InlineExpectations core code diff --git a/csharp/ql/test/library-tests/cil/attributes/attribute.expected b/csharp/ql/test/library-tests/cil/attributes/attribute.expected index 8c2a9d89762..caf7df91c55 100644 --- a/csharp/ql/test/library-tests/cil/attributes/attribute.expected +++ b/csharp/ql/test/library-tests/cil/attributes/attribute.expected @@ -2342,7 +2342,7 @@ attrArgPositional | System.Number.BigInteger | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | | System.Number.BigInteger | [ObsoleteAttribute(...)] | 1 | True | | System.Number.BigInteger._blocks | [FixedBufferAttribute(...)] | 0 | System.UInt32 | -| System.Number.BigInteger._blocks | [FixedBufferAttribute(...)] | 1 | 115 | +| System.Number.BigInteger._blocks | [FixedBufferAttribute(...)] | 1 | 116 | | System.Number.DiyFp | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | | System.Number.DiyFp | [ObsoleteAttribute(...)] | 1 | True | | System.Number.NumberBuffer | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | diff --git a/csharp/ql/test/library-tests/cil/dataflow/TaintTracking.ql b/csharp/ql/test/library-tests/cil/dataflow/TaintTracking.ql index 5879865ac85..4a6397d2bbf 100644 --- a/csharp/ql/test/library-tests/cil/dataflow/TaintTracking.ql +++ b/csharp/ql/test/library-tests/cil/dataflow/TaintTracking.ql @@ -1,5 +1,4 @@ import csharp -import semmle.code.csharp.dataflow.TaintTracking // Test that all the copies of the taint tracking library can be imported // simultaneously without errors. import semmle.code.csharp.dataflow.TaintTracking2 diff --git a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected b/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected index e7a5bdfbdaa..26409836c35 100644 --- a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected +++ b/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected @@ -1178,6 +1178,7 @@ | Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.TryRead | parameter | 32 | | Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.TryWrite | parameter | 32 | | Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.Write | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.NFloat.TryParse | parameter | 32 | | Parameter 1 of System.Runtime.InteropServices.NativeLibrary.TryLoad | parameter | 32 | | Parameter 1 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.CreateReferenceTrackingHandle | parameter | 32 | | Parameter 1 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.UnhandledExceptionPropagationHandler.EndInvoke | parameter | 32 | @@ -1673,6 +1674,7 @@ | Parameter 2 of System.Runtime.InteropServices.Marshal.QueryInterface | parameter | 32 | | Parameter 2 of System.Runtime.InteropServices.MemoryMarshal.TryGetMemoryManager | parameter | 32 | | Parameter 2 of System.Runtime.InteropServices.MemoryMarshal.TryGetString | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.NFloat.TryFormat | parameter | 32 | | Parameter 2 of System.Runtime.InteropServices.NativeLibrary.TryGetExport | parameter | 32 | | Parameter 2 of System.Runtime.Serialization.SerializationInfo.GetElement | parameter | 32 | | Parameter 2 of System.Runtime.Serialization.SerializationInfo.GetElementNoThrow | parameter | 32 | @@ -1971,6 +1973,7 @@ | Parameter 3 of System.Runtime.InteropServices.ComWrappers.TryGetOrCreateComInterfaceForObjectInternal | parameter | 32 | | Parameter 3 of System.Runtime.InteropServices.MemoryMarshal.TryGetMemoryManager | parameter | 32 | | Parameter 3 of System.Runtime.InteropServices.MemoryMarshal.TryGetString | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.NFloat.TryParse | parameter | 32 | | Parameter 3 of System.Runtime.InteropServices.NativeLibrary.TryLoad | parameter | 32 | | Parameter 3 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.UnhandledExceptionPropagationHandler.BeginInvoke | parameter | 32 | | Parameter 3 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.UnhandledExceptionPropagationHandler.Invoke | parameter | 32 | diff --git a/csharp/ql/test/library-tests/commons/Disposal/DisposedVariables.ql b/csharp/ql/test/library-tests/commons/Disposal/DisposedVariables.ql index 5a6abf3fb11..4013d84e21b 100644 --- a/csharp/ql/test/library-tests/commons/Disposal/DisposedVariables.ql +++ b/csharp/ql/test/library-tests/commons/Disposal/DisposedVariables.ql @@ -1,5 +1,4 @@ import semmle.code.csharp.commons.Disposal -import csharp from Variable v where diff --git a/csharp/ql/test/library-tests/conversion/operator/Operator.expected b/csharp/ql/test/library-tests/conversion/operator/Operator.expected index bc9b3aae5b4..fb03f013375 100644 --- a/csharp/ql/test/library-tests/conversion/operator/Operator.expected +++ b/csharp/ql/test/library-tests/conversion/operator/Operator.expected @@ -3,18 +3,27 @@ | ArraySegment | ReadOnlySpan<> | | ArraySegment | Span<> | | Byte | Decimal | +| Byte | NFloat | | Char | Decimal | +| Char | NFloat | | Char | StandardFormat | | DateTime | DateTimeOffset | | Int16 | Decimal | +| Int16 | NFloat | | Int32 | C | | Int32 | Decimal | | Int32 | Index | | Int32 | MetadataToken | +| Int32 | NFloat | | Int64 | Decimal | +| Int64 | NFloat | +| IntPtr | NFloat | | Memory<> | ReadOnlyMemory | | MetadataToken | Int32 | +| NFloat | Double | | SByte | Decimal | +| SByte | NFloat | +| Single | NFloat | | Span<> | ReadOnlySpan | | String | ReadOnlySpan | | T | Nullable<> | @@ -24,5 +33,9 @@ | T[] | ReadOnlySpan<> | | T[] | Span<> | | UInt16 | Decimal | +| UInt16 | NFloat | | UInt32 | Decimal | +| UInt32 | NFloat | | UInt64 | Decimal | +| UInt64 | NFloat | +| UIntPtr | NFloat | diff --git a/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected b/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected index cbc107fe973..d5302764f5c 100644 --- a/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected +++ b/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected @@ -206,7 +206,9 @@ | CSharp7.cs:283:13:283:62 | SSA def(list) | CSharp7.cs:285:39:285:42 | access to local variable list | | CSharp7.cs:283:20:283:62 | call to method Select,(Int32,String)> | CSharp7.cs:283:13:283:62 | SSA def(list) | | CSharp7.cs:283:32:283:35 | item | CSharp7.cs:283:41:283:44 | access to parameter item | +| CSharp7.cs:283:41:283:44 | access to parameter item | CSharp7.cs:283:41:283:48 | access to property Key | | CSharp7.cs:283:41:283:44 | access to parameter item | CSharp7.cs:283:51:283:54 | access to parameter item | +| CSharp7.cs:283:51:283:54 | access to parameter item | CSharp7.cs:283:51:283:60 | access to property Value | | CSharp7.cs:285:39:285:42 | access to local variable list | CSharp7.cs:287:36:287:39 | access to local variable list | | CSharp7.cs:287:36:287:39 | access to local variable list | CSharp7.cs:289:32:289:35 | access to local variable list | | CSharp7.cs:297:18:297:22 | SSA def(x) | CSharp7.cs:297:25:297:25 | SSA phi(x) | diff --git a/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.ql b/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.ql index ed293efc2ba..897085a92e2 100644 --- a/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.ql +++ b/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.ql @@ -1,5 +1,4 @@ import csharp -import semmle.code.csharp.dataflow.TaintTracking from DataFlow::Node pred, DataFlow::Node succ where diff --git a/csharp/ql/test/library-tests/csharp7/TaintReaches.ql b/csharp/ql/test/library-tests/csharp7/TaintReaches.ql index ff8664cae3a..77846ff6ab4 100644 --- a/csharp/ql/test/library-tests/csharp7/TaintReaches.ql +++ b/csharp/ql/test/library-tests/csharp7/TaintReaches.ql @@ -1,5 +1,4 @@ import csharp -import semmle.code.csharp.dataflow.TaintTracking from StringLiteral l, DataFlow::Node n where TaintTracking::localTaintStep+(DataFlow::exprNode(l), n) diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.ql b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.ql index ae3ba6178f0..6d89c413730 100644 --- a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.ql +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.ql @@ -17,7 +17,7 @@ class Conf extends DataFlow::Configuration { ) } - override int fieldFlowBranchLimit() { result = 10 } + override int fieldFlowBranchLimit() { result = 100 } } from DataFlow::PathNode source, DataFlow::PathNode sink, Conf conf diff --git a/csharp/ql/test/library-tests/dataflow/content/ContentFlow.cs b/csharp/ql/test/library-tests/dataflow/content/ContentFlow.cs new file mode 100644 index 00000000000..e3db962193f --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/content/ContentFlow.cs @@ -0,0 +1,51 @@ +using System; + +public class ContentFlow +{ + public class A + { + public A FieldA; + public B FieldB; + } + public class B + { + public A FieldA; + public B FieldB; + } + + public void M(A a, B b) + { + var a1 = new A(); + Sink(Through(a1.FieldA.FieldB)); + + a.FieldA.FieldB = new B(); + Sink(Through(a)); + + var a2 = new A(); + b.FieldB.FieldA = a2.FieldB.FieldA; + Sink(Through(b)); + + Sink(Through(Out())); + + In(new A().FieldA.FieldB); + } + + public static void Sink(T t) { } + + public T Through(T t) + { + Sink(t); + return t; + } + + public void In(T t) + { + Sink(t); + } + + public B Out() + { + var a = new A(); + return a.FieldA.FieldB; + } +} diff --git a/csharp/ql/test/library-tests/dataflow/content/ContentFlow.expected b/csharp/ql/test/library-tests/dataflow/content/ContentFlow.expected new file mode 100644 index 00000000000..ce55c9da51f --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/content/ContentFlow.expected @@ -0,0 +1,9 @@ +| ContentFlow.cs:18:18:18:24 | object creation of type A | field FieldB.field FieldA. | ContentFlow.cs:19:14:19:38 | call to method Through | | true | +| ContentFlow.cs:18:18:18:24 | object creation of type A | field FieldB.field FieldA. | ContentFlow.cs:37:14:37:14 | access to parameter t | | true | +| ContentFlow.cs:21:27:21:33 | object creation of type B | | ContentFlow.cs:22:14:22:23 | call to method Through | field FieldA.field FieldB. | true | +| ContentFlow.cs:21:27:21:33 | object creation of type B | | ContentFlow.cs:37:14:37:14 | access to parameter t | field FieldA.field FieldB. | true | +| ContentFlow.cs:24:18:24:24 | object creation of type A | field FieldA.field FieldB. | ContentFlow.cs:26:14:26:23 | call to method Through | field FieldB.field FieldA. | true | +| ContentFlow.cs:24:18:24:24 | object creation of type A | field FieldA.field FieldB. | ContentFlow.cs:37:14:37:14 | access to parameter t | field FieldB.field FieldA. | true | +| ContentFlow.cs:30:12:30:18 | object creation of type A | field FieldB.field FieldA. | ContentFlow.cs:43:14:43:14 | access to parameter t | | true | +| ContentFlow.cs:48:17:48:23 | object creation of type A | field FieldB.field FieldA. | ContentFlow.cs:28:14:28:27 | call to method Through | | true | +| ContentFlow.cs:48:17:48:23 | object creation of type A | field FieldB.field FieldA. | ContentFlow.cs:37:14:37:14 | access to parameter t | | true | diff --git a/csharp/ql/test/library-tests/dataflow/content/ContentFlow.ql b/csharp/ql/test/library-tests/dataflow/content/ContentFlow.ql new file mode 100644 index 00000000000..07a510a62ce --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/content/ContentFlow.ql @@ -0,0 +1,23 @@ +import csharp +import semmle.code.csharp.dataflow.internal.ContentDataFlow + +class Conf extends ContentDataFlow::Configuration { + Conf() { this = "ContentFlowConf" } + + override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof ObjectCreation } + + override predicate isSink(DataFlow::Node sink) { + exists(MethodCall mc | + mc.getTarget().hasUndecoratedName("Sink") and + mc.getAnArgument() = sink.asExpr() + ) + } + + override int accessPathLimit() { result = 2 } +} + +from + Conf conf, ContentDataFlow::Node source, ContentDataFlow::AccessPath sourceAp, + ContentDataFlow::Node sink, ContentDataFlow::AccessPath sinkAp, boolean preservesValue +where conf.hasFlow(source, sourceAp, sink, sinkAp, preservesValue) +select source, sourceAp, sink, sinkAp, preservesValue diff --git a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected index f9fbbbab6be..723086b649f 100644 --- a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected @@ -51,5 +51,5 @@ viableLambda | DelegateFlow.cs:125:9:125:25 | function pointer call | file://:0:0:0:0 | (none) | DelegateFlow.cs:7:17:7:18 | M2 | | DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:135:25:135:40 | call to method M19 | DelegateFlow.cs:135:29:135:36 | (...) => ... | | DelegateFlow.cs:132:9:132:11 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:131:17:131:24 | (...) => ... | -| file://:0:0:0:0 | [summary] call to valueFactory in Lazy | DelegateFlow.cs:105:9:105:24 | object creation of type Lazy | DelegateFlow.cs:104:23:104:30 | (...) => ... | -| file://:0:0:0:0 | [summary] call to valueFactory in Lazy | DelegateFlow.cs:107:9:107:24 | object creation of type Lazy | DelegateFlow.cs:106:13:106:20 | (...) => ... | +| file://:0:0:0:0 | [summary] call to parameter position 0 of Lazy in Lazy | DelegateFlow.cs:105:9:105:24 | object creation of type Lazy | DelegateFlow.cs:104:23:104:30 | (...) => ... | +| file://:0:0:0:0 | [summary] call to parameter position 0 of Lazy in Lazy | DelegateFlow.cs:107:9:107:24 | object creation of type Lazy | DelegateFlow.cs:106:13:106:20 | (...) => ... | diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ql b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ql index 316cd8ef0b7..9c570d3534b 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ql +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ql @@ -53,6 +53,14 @@ class Conf extends TaintTracking::Configuration { } } +/** + * Simulate that methods with summaries are not included in the source code. + * This is relevant for dataflow analysis using summaries tagged as generated. + */ +private class MyMethod extends Method { + override predicate fromSource() { none() } +} + from DataFlow::PathNode source, DataFlow::PathNode sink, Conf conf where conf.hasFlowPath(source, sink) select sink, source, sink, "$@", source, source.toString() diff --git a/csharp/ql/test/library-tests/dataflow/external-models/steps.expected b/csharp/ql/test/library-tests/dataflow/external-models/steps.expected index 6d8ed631741..af0e9cdfe4b 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/steps.expected +++ b/csharp/ql/test/library-tests/dataflow/external-models/steps.expected @@ -8,8 +8,6 @@ summaryThroughStep | Steps.cs:22:13:22:16 | this access | Steps.cs:22:13:22:30 | call to method StepQualRes | false | | Steps.cs:23:13:23:25 | this access | Steps.cs:23:13:23:25 | call to method StepQualRes | false | | Steps.cs:26:13:26:31 | this access | Steps.cs:26:25:26:30 | [post] access to local variable argOut | false | -| Steps.cs:30:13:30:16 | this access | Steps.cs:30:13:30:16 | [post] this access | true | -| Steps.cs:34:13:34:16 | this access | Steps.cs:34:13:34:16 | [post] this access | true | | Steps.cs:41:29:41:29 | 0 | Steps.cs:41:13:41:30 | call to method StepGeneric | true | | Steps.cs:42:30:42:34 | false | Steps.cs:42:13:42:35 | call to method StepGeneric2 | true | | Steps.cs:44:36:44:43 | "string" | Steps.cs:44:13:44:44 | call to method StepOverride | true | @@ -22,5 +20,5 @@ summarySetterStep | Steps.cs:34:37:34:37 | 0 | Steps.cs:34:13:34:16 | [post] this access | Steps.cs:63:13:63:20 | property Property | | Steps.cs:38:36:38:36 | 0 | Steps.cs:38:13:38:16 | [post] this access | file://:0:0:0:0 | element | clearsContent -| Steps.cs:61:14:61:28 | StepFieldSetter | Steps.cs:57:13:57:17 | field Field | this | -| Steps.cs:67:14:67:31 | StepPropertySetter | Steps.cs:63:13:63:20 | property Property | this | +| Steps.cs:61:14:61:28 | StepFieldSetter | file://:0:0:0:0 | element | this | +| Steps.cs:67:14:67:31 | StepPropertySetter | file://:0:0:0:0 | element | this | diff --git a/csharp/ql/test/library-tests/dataflow/external-models/steps.ql b/csharp/ql/test/library-tests/dataflow/external-models/steps.ql index ecd7ac5c6fd..a73c0c8c7c0 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/steps.ql +++ b/csharp/ql/test/library-tests/dataflow/external-models/steps.ql @@ -2,10 +2,11 @@ import csharp import DataFlow import semmle.code.csharp.dataflow.ExternalFlow import semmle.code.csharp.dataflow.FlowSummary +import semmle.code.csharp.dataflow.internal.DataFlowDispatch as DataFlowDispatch import semmle.code.csharp.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl import CsvValidation -class SummaryModelTest extends SummaryModelCsv { +private class SummaryModelTest extends SummaryModelCsv { override predicate row(string row) { row = [ @@ -28,18 +29,38 @@ class SummaryModelTest extends SummaryModelCsv { } } +private class SummarizedCallableClear extends SummarizedCallable { + SummarizedCallableClear() { + this.getName() = ["StepPropertySetter", "StepFieldSetter"] and + this.getFile().getBaseName() = "Steps.cs" + } + + override predicate clearsContent(ParameterPosition pos, DataFlow::ContentSet content) { + pos.isThisParameter() and + content instanceof DataFlow::ElementContent + } +} + query predicate summaryThroughStep( DataFlow::Node node1, DataFlow::Node node2, boolean preservesValue ) { - FlowSummaryImpl::Private::Steps::summaryThroughStep(node1, node2, preservesValue) + FlowSummaryImpl::Private::Steps::summaryThroughStepValue(node1, node2, + any(DataFlowDispatch::DataFlowSummarizedCallable sc)) and + preservesValue = true + or + FlowSummaryImpl::Private::Steps::summaryThroughStepTaint(node1, node2, + any(DataFlowDispatch::DataFlowSummarizedCallable sc)) and + preservesValue = false } query predicate summaryGetterStep(DataFlow::Node arg, DataFlow::Node out, Content c) { - FlowSummaryImpl::Private::Steps::summaryGetterStep(arg, c, out) + FlowSummaryImpl::Private::Steps::summaryGetterStep(arg, c, out, + any(DataFlowDispatch::DataFlowSummarizedCallable sc)) } query predicate summarySetterStep(DataFlow::Node arg, DataFlow::Node out, Content c) { - FlowSummaryImpl::Private::Steps::summarySetterStep(arg, c, out) + FlowSummaryImpl::Private::Steps::summarySetterStep(arg, c, out, + any(DataFlowDispatch::DataFlowSummarizedCallable sc)) } query predicate clearsContent(SummarizedCallable c, DataFlow::Content k, ParameterPosition pos) { diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 670905624bf..b888f827633 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -1,5 +1,33 @@ +| Microsoft.CSharp.RuntimeBinder;Binder;false;BinaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;BinaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;Convert;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Type);;Argument[2];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;GetIndex;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[1];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;GetIndex;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;GetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;GetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;Invoke;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[1];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;Invoke;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;InvokeConstructor;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[1];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;InvokeConstructor;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;InvokeMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Collections.Generic.IEnumerable,System.Type,System.Collections.Generic.IEnumerable);;Argument[4].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;IsEvent;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type);;Argument[2];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;SetIndex;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[1];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;SetIndex;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;SetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;SetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;UnaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;UnaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint | +| Microsoft.Extensions.Primitives;Extensions;false;Append;(System.Text.StringBuilder,Microsoft.Extensions.Primitives.StringSegment);;Argument[0];ReturnValue;generated:taint | +| Microsoft.Extensions.Primitives;StringSegment;false;Split;(System.Char[]);;Argument[0].Element;ReturnValue;generated:taint | +| Microsoft.Extensions.Primitives;StringSegment;false;Split;(System.Char[]);;Argument[Qualifier];ReturnValue;generated:taint | +| Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;false;Enumerator;(Microsoft.Extensions.Primitives.StringTokenizer);;Argument[0].Element;Argument[Qualifier];generated:taint | | Microsoft.Extensions.Primitives;StringTokenizer;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | Microsoft.Extensions.Primitives;StringTokenizer;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| Microsoft.Extensions.Primitives;StringTokenizer;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| Microsoft.Extensions.Primitives;StringTokenizer;false;StringTokenizer;(Microsoft.Extensions.Primitives.StringSegment,System.Char[]);;Argument[0];Argument[Qualifier];generated:taint | +| Microsoft.Extensions.Primitives;StringTokenizer;false;StringTokenizer;(Microsoft.Extensions.Primitives.StringSegment,System.Char[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| Microsoft.Extensions.Primitives;StringTokenizer;false;StringTokenizer;(System.String,System.Char[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| Microsoft.Extensions.Primitives;StringValues+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | Microsoft.Extensions.Primitives;StringValues;false;Add;(System.String);;Argument[0];Argument[Qualifier].Element;value | | Microsoft.Extensions.Primitives;StringValues;false;Add;(System.String);;Argument[0];ReturnValue;taint | | Microsoft.Extensions.Primitives;StringValues;false;Add;(System.String);;Argument[Qualifier];ReturnValue;taint | @@ -69,6 +97,10 @@ | Microsoft.VisualBasic;Collection;false;get_Item;(System.Object);;Argument[Qualifier].Element;ReturnValue;value | | Microsoft.VisualBasic;Collection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | | Microsoft.VisualBasic;Collection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| Microsoft.Win32.SafeHandles;SafeFileHandle;false;SafeFileHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| Microsoft.Win32.SafeHandles;SafePipeHandle;false;SafePipeHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| Microsoft.Win32.SafeHandles;SafeProcessHandle;false;SafeProcessHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| Microsoft.Win32.SafeHandles;SafeWaitHandle;false;SafeWaitHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | | Newtonsoft.Json.Linq;JArray;false;Add;(Newtonsoft.Json.Linq.JToken);;Argument[0];Argument[Qualifier].Element;value | | Newtonsoft.Json.Linq;JArray;false;CopyTo;(Newtonsoft.Json.Linq.JToken[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | Newtonsoft.Json.Linq;JArray;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | @@ -190,16 +222,103 @@ | Newtonsoft.Json;JsonSerializer;false;Serialize;(Newtonsoft.Json.JsonWriter,System.Object,System.Type);;Argument[1];Argument[0];taint | | Newtonsoft.Json;JsonSerializer;false;Serialize;(System.IO.TextWriter,System.Object);;Argument[1];Argument[0];taint | | Newtonsoft.Json;JsonSerializer;false;Serialize;(System.IO.TextWriter,System.Object,System.Type);;Argument[1];Argument[0];taint | +| System.Buffers;ArrayBufferWriter<>;false;GetMemory;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ArrayBufferWriter<>;false;get_WrittenMemory;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;BuffersExtensions;false;PositionOf<>;(System.Buffers.ReadOnlySequence,T);;Argument[0];ReturnValue;generated:taint | +| System.Buffers;MemoryHandle;false;MemoryHandle;(System.Void*,System.Runtime.InteropServices.GCHandle,System.Buffers.IPinnable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Buffers;MemoryHandle;false;MemoryHandle;(System.Void*,System.Runtime.InteropServices.GCHandle,System.Buffers.IPinnable);;Argument[1];Argument[Qualifier];generated:taint | +| System.Buffers;MemoryHandle;false;MemoryHandle;(System.Void*,System.Runtime.InteropServices.GCHandle,System.Buffers.IPinnable);;Argument[2];Argument[Qualifier];generated:taint | +| System.Buffers;MemoryHandle;false;get_Pointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;MemoryManager<>;false;CreateMemory;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;MemoryManager<>;false;CreateMemory;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;MemoryManager<>;true;get_Memory;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>+Enumerator;false;Enumerator;(System.Buffers.ReadOnlySequence<>);;Argument[0];Argument[Qualifier];generated:taint | +| System.Buffers;ReadOnlySequence<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;GetPosition;(System.Int64);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;GetPosition;(System.Int64,System.SequencePosition);;Argument[1];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);;Argument[2];Argument[Qualifier];generated:taint | +| System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(System.ReadOnlyMemory);;Argument[0];Argument[Qualifier];generated:taint | +| System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(T[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int32,System.SequencePosition);;Argument[1];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int32,System.SequencePosition);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int64);;Argument[Qualifier];ReturnValue;generated:value | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int64,System.Int64);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int64,System.SequencePosition);;Argument[1];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int64,System.SequencePosition);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition);;Argument[0];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.Int64);;Argument[0];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.Int64);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.SequencePosition);;Argument[0];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.SequencePosition);;Argument[1];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;TryGet;(System.SequencePosition,System.ReadOnlyMemory,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;get_End;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;get_First;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;get_Start;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;SequenceReader<>;false;SequenceReader;(System.Buffers.ReadOnlySequence);;Argument[0];Argument[Qualifier];generated:taint | +| System.Buffers;SequenceReader<>;false;TryReadTo;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;SequenceReader<>;false;TryReadTo;(System.Buffers.ReadOnlySequence,T,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;SequenceReader<>;false;TryReadTo;(System.Buffers.ReadOnlySequence,T,T,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;SequenceReader<>;false;TryReadToAny;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;SequenceReader<>;false;get_Position;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;SequenceReader<>;false;get_UnreadSequence;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.CodeDom.Compiler;GeneratedCodeAttribute;false;GeneratedCodeAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;GeneratedCodeAttribute;false;GeneratedCodeAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;GeneratedCodeAttribute;false;get_Tool;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.CodeDom.Compiler;GeneratedCodeAttribute;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;IndentedTextWriter;(System.IO.TextWriter,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;IndentedTextWriter;(System.IO.TextWriter,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;Write;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;Write;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;Write;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;Write;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;Write;(System.String,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;Write;(System.String,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;Write;(System.String,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;Write;(System.String,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;Write;(System.String,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;WriteLine;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;WriteLine;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;WriteLine;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;WriteLine;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;WriteLine;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;WriteLine;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;WriteLine;(System.String,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;WriteLine;(System.String,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;WriteLine;(System.String,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;WriteLine;(System.String,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;WriteLine;(System.String,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;get_InnerWriter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;get_NewLine;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;set_NewLine;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Concurrent;BlockingCollection<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Concurrent;BlockingCollection<>;false;Add;(T,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;BlockingCollection<>;false;BlockingCollection;(System.Collections.Concurrent.IProducerConsumerCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;BlockingCollection<>;false;BlockingCollection;(System.Collections.Concurrent.IProducerConsumerCollection,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections.Concurrent;BlockingCollection<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Concurrent;BlockingCollection<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Concurrent;BlockingCollection<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Concurrent;BlockingCollection<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Concurrent;BlockingCollection<>;false;TryAdd;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;BlockingCollection<>;false;TryAdd;(T,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;BlockingCollection<>;false;TryAdd;(T,System.Int32,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;BlockingCollection<>;false;TryAdd;(T,System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Concurrent;ConcurrentBag<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Concurrent;ConcurrentBag<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Concurrent;ConcurrentBag<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Concurrent;ConcurrentBag<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Concurrent;ConcurrentBag<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Concurrent;ConcurrentBag<>;false;ToArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Concurrent;ConcurrentBag<>;false;TryAdd;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;ConcurrentBag<>;false;TryPeek;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Concurrent;ConcurrentBag<>;false;TryTake;(T);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0];Argument[Qualifier].Element;value | @@ -217,6 +336,8 @@ | System.Collections.Concurrent;ConcurrentDictionary<,>;false;CopyTo;(System.Collections.Generic.KeyValuePair[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Concurrent;ConcurrentDictionary<,>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Concurrent;ConcurrentDictionary<,>;false;GetOrAdd;(TKey,TValue);;Argument[1];ReturnValue;generated:taint | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;get_Item;(TKey);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | @@ -229,23 +350,51 @@ | System.Collections.Concurrent;ConcurrentQueue<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Concurrent;ConcurrentQueue<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Concurrent;ConcurrentQueue<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Concurrent;ConcurrentStack<>;false;ConcurrentStack;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections.Concurrent;ConcurrentStack<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Concurrent;ConcurrentStack<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Concurrent;ConcurrentStack<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Concurrent;ConcurrentStack<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Concurrent;ConcurrentStack<>;false;TryPeek;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Concurrent;ConcurrentStack<>;false;TryPop;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Concurrent;ConcurrentStack<>;false;TryPopRange;(T[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Collections.Concurrent;ConcurrentStack<>;false;TryPopRange;(T[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Collections.Concurrent;ConcurrentStack<>;false;TryTake;(T);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Concurrent;IProducerConsumerCollection<>;true;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Concurrent;OrderablePartitioner<>;false;GetDynamicPartitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Concurrent;Partitioner;false;Create<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Concurrent;Partitioner;false;Create<>;(System.Collections.Generic.IEnumerable,System.Collections.Concurrent.EnumerablePartitionerOptions);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Concurrent;Partitioner;false;Create<>;(System.Collections.Generic.IList,System.Boolean);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Concurrent;Partitioner;false;Create<>;(TSource[],System.Boolean);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Generic;CollectionExtensions;false;GetValueOrDefault<,>;(System.Collections.Generic.IReadOnlyDictionary,TKey,TValue);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Generic;CollectionExtensions;false;GetValueOrDefault<,>;(System.Collections.Generic.IReadOnlyDictionary,TKey,TValue);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Generic;CollectionExtensions;false;GetValueOrDefault<,>;(System.Collections.Generic.IReadOnlyDictionary,TKey,TValue);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Generic;CollectionExtensions;false;Remove<,>;(System.Collections.Generic.IDictionary,TKey,TValue);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Generic;CollectionExtensions;false;TryAdd<,>;(System.Collections.Generic.IDictionary,TKey,TValue);;Argument[0].Element;Argument[2];generated:taint | +| System.Collections.Generic;CollectionExtensions;false;TryAdd<,>;(System.Collections.Generic.IDictionary,TKey,TValue);;Argument[1];Argument[0].Element;generated:taint | +| System.Collections.Generic;CollectionExtensions;false;TryAdd<,>;(System.Collections.Generic.IDictionary,TKey,TValue);;Argument[2];Argument[0].Element;generated:taint | +| System.Collections.Generic;Dictionary<,>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Dictionary<,>+Enumerator;false;get_Entry;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Dictionary<,>+Enumerator;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Dictionary<,>+Enumerator;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Dictionary<,>+KeyCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;Dictionary<,>+KeyCollection;false;Add;(TKey);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Generic;Dictionary<,>+KeyCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;Dictionary<,>+KeyCollection;false;CopyTo;(TKey[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;Dictionary<,>+KeyCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.Dictionary<,>+KeyCollection+Enumerator.Current];value | | System.Collections.Generic;Dictionary<,>+KeyCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Generic;Dictionary<,>+KeyCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Generic;Dictionary<,>+KeyCollection;false;KeyCollection;(System.Collections.Generic.Dictionary<,>);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;Dictionary<,>+KeyCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Dictionary<,>+ValueCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;Dictionary<,>+ValueCollection;false;Add;(TValue);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Generic;Dictionary<,>+ValueCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;Dictionary<,>+ValueCollection;false;CopyTo;(TValue[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;Dictionary<,>+ValueCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.Dictionary<,>+ValueCollection+Enumerator.Current];value | | System.Collections.Generic;Dictionary<,>+ValueCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Generic;Dictionary<,>+ValueCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Generic;Dictionary<,>+ValueCollection;false;ValueCollection;(System.Collections.Generic.Dictionary<,>);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;Dictionary<,>+ValueCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;Dictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;Dictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Generic;Dictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0];Argument[Qualifier].Element;value | @@ -263,22 +412,31 @@ | System.Collections.Generic;Dictionary<,>;false;Dictionary;(System.Collections.Generic.IEnumerable>);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Generic;Dictionary<,>;false;Dictionary;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;Dictionary<,>;false;Dictionary;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Generic;Dictionary<,>;false;Dictionary;(System.Int32,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[Qualifier];generated:taint | | System.Collections.Generic;Dictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.Dictionary<,>+Enumerator.Current];value | | System.Collections.Generic;Dictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Generic;Dictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Generic;Dictionary<,>;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections.Generic;Dictionary<,>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;Dictionary<,>;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Generic;Dictionary<,>;false;get_Item;(TKey);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Generic;Dictionary<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Generic;Dictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Generic;Dictionary<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.Generic;Dictionary<,>;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;Dictionary<,>;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Generic;Dictionary<,>;false;set_Item;(TKey,TValue);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;Dictionary<,>;false;set_Item;(TKey,TValue);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Generic;HashSet<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;HashSet<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Generic;HashSet<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;HashSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.HashSet<>+Enumerator.Current];value | | System.Collections.Generic;HashSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Generic;HashSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Generic;HashSet<>;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections.Generic;HashSet<>;false;HashSet;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;HashSet<>;false;TryGetValue;(T,T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;HashSet<>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;ICollection<>;true;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Generic;ICollection<>;true;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;IDictionary<,>;true;Add;(TKey,TValue);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | @@ -293,9 +451,39 @@ | System.Collections.Generic;IList<>;true;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Collections.Generic;IList<>;true;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Generic;ISet<>;true;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Generic;KeyValuePair;false;Create<,>;(TKey,TValue);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Generic;KeyValuePair;false;Create<,>;(TKey,TValue);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Generic;KeyValuePair<,>;false;Deconstruct;(TKey,TValue);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;KeyValuePair<,>;false;KeyValuePair;(TKey,TValue);;Argument[0];ReturnValue.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;KeyValuePair<,>;false;KeyValuePair;(TKey,TValue);;Argument[1];ReturnValue.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Generic;KeyValuePair<,>;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;KeyValuePair<,>;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;LinkedList<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Generic;LinkedList<>;false;AddAfter;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[0];Argument[1];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddAfter;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddAfter;(System.Collections.Generic.LinkedListNode,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddAfter;(System.Collections.Generic.LinkedListNode,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[0];Argument[1];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[1];Argument[0];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[1];Argument[0];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddFirst;(System.Collections.Generic.LinkedListNode);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddFirst;(System.Collections.Generic.LinkedListNode);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddFirst;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddFirst;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddFirst;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddLast;(System.Collections.Generic.LinkedListNode);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddLast;(System.Collections.Generic.LinkedListNode);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddLast;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddLast;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddLast;(T);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;LinkedList<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;LinkedList<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;LinkedList<>;false;Find;(T);;Argument[Qualifier].Element;ReturnValue;value | @@ -303,11 +491,25 @@ | System.Collections.Generic;LinkedList<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Generic;LinkedList<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.LinkedList<>+Enumerator.Current];value | | System.Collections.Generic;LinkedList<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Generic;LinkedList<>;false;LinkedList;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;LinkedList;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;Remove;(System.Collections.Generic.LinkedListNode);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;get_First;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;get_Last;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Generic;LinkedListNode<>;false;LinkedListNode;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedListNode<>;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedListNode<>;false;get_Next;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedListNode<>;false;get_Previous;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedListNode<>;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedListNode<>;false;set_Value;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;List<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;List<>;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Generic;List<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Generic;List<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Generic;List<>;false;AsReadOnly;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections.Generic;List<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Generic;List<>;false;CopyTo;(T[]);;Argument[Qualifier];Argument[0].Element;generated:taint | | System.Collections.Generic;List<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;List<>;false;Find;(System.Predicate);;Argument[Qualifier].Element;Argument[0].Parameter[0];value | | System.Collections.Generic;List<>;false;Find;(System.Predicate);;Argument[Qualifier].Element;ReturnValue;value | @@ -322,29 +524,42 @@ | System.Collections.Generic;List<>;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Generic;List<>;false;Insert;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Generic;List<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier].Element;value | +| System.Collections.Generic;List<>;false;List;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections.Generic;List<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections.Generic;List<>;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | | System.Collections.Generic;List<>;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Generic;List<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Generic;List<>;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Generic;List<>;false;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.Generic;Queue<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;Queue<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;Queue<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Generic;Queue<>;false;Dequeue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Queue<>;false;Enqueue;(T);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Generic;Queue<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Generic;Queue<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.Queue<>+Enumerator.Current];value | | System.Collections.Generic;Queue<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Generic;Queue<>;false;Peek;();;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Generic;Queue<>;false;Queue;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;Queue<>;false;TryDequeue;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Queue<>;false;TryPeek;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Queue<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;Add;(TKey);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;CopyTo;(TKey[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.SortedDictionary<,>+KeyCollection+Enumerator.Current];value | | System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;KeyCollection;(System.Collections.Generic.SortedDictionary<,>);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;Add;(TValue);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;CopyTo;(TValue[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.SortedDictionary<,>+ValueCollection+Enumerator.Current];value | | System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;ValueCollection;(System.Collections.Generic.SortedDictionary<,>);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;SortedDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;SortedDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Generic;SortedDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0];Argument[Qualifier].Element;value | @@ -364,6 +579,7 @@ | System.Collections.Generic;SortedDictionary<,>;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Generic;SortedDictionary<,>;false;get_Item;(TKey);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Generic;SortedDictionary<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Generic;SortedDictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;SortedDictionary<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.Generic;SortedDictionary<,>;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;SortedDictionary<,>;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | @@ -380,13 +596,17 @@ | System.Collections.Generic;SortedList<,>;false;CopyTo;(System.Collections.Generic.KeyValuePair[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;SortedList<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Generic;SortedList<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Generic;SortedList<,>;false;SortedList;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Generic;SortedList<,>;false;SortedList;(System.Collections.Generic.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;SortedList<,>;false;SortedList;(System.Collections.Generic.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Generic;SortedList<,>;false;SortedList;(System.Collections.Generic.IDictionary,System.Collections.Generic.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;SortedList<,>;false;SortedList;(System.Collections.Generic.IDictionary,System.Collections.Generic.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Generic;SortedList<,>;false;TryGetValue;(TKey,TValue);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;SortedList<,>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;SortedList<,>;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Generic;SortedList<,>;false;get_Item;(TKey);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Generic;SortedList<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Generic;SortedList<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Generic;SortedList<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.Generic;SortedList<,>;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;SortedList<,>;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | @@ -398,7 +618,19 @@ | System.Collections.Generic;SortedSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Generic;SortedSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.SortedSet<>+Enumerator.Current];value | | System.Collections.Generic;SortedSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Generic;SortedSet<>;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;SortedSet<>;false;IntersectWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections.Generic;SortedSet<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Generic;SortedSet<>;false;SortedSet;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;SortedSet<>;false;SortedSet;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;SortedSet<>;false;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;SortedSet<>;false;UnionWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;SortedSet<>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;SortedSet<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Generic;Stack<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;Stack<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;Stack<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;Stack<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | @@ -406,10 +638,30 @@ | System.Collections.Generic;Stack<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Generic;Stack<>;false;Peek;();;Argument[Qualifier].Element;ReturnValue;value | | System.Collections.Generic;Stack<>;false;Pop;();;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Generic;Stack<>;false;Push;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;Stack<>;false;Stack;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;Stack<>;false;ToArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Stack<>;false;TryPeek;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Stack<>;false;TryPop;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Stack<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Immutable;IImmutableDictionary<,>;true;AddRange;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;IImmutableList<>;true;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;IImmutableList<>;true;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;IImmutableSet<>;true;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(System.Collections.Immutable.ImmutableArray,System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T,T);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T,T);;Argument[3];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;ToImmutableArray<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableArray<>+Builder;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableArray<>+Builder;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableArray<>+Builder;false;AddRange;(System.Collections.Immutable.ImmutableArray<>);;Argument[0].Element;Argument[Qualifier].Element;value | @@ -422,21 +674,72 @@ | System.Collections.Immutable;ImmutableArray<>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Immutable;ImmutableArray<>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Immutable;ImmutableArray<>+Builder;false;Insert;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableArray<>+Builder;false;MoveToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableArray<>+Builder;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections.Immutable;ImmutableArray<>+Builder;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Collections.Immutable;ImmutableArray<>+Builder;false;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableArray<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableArray<>;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableArray<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableArray<>;false;Add;(T);;Argument[0];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Immutable.ImmutableArray<>);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Immutable.ImmutableArray<>);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;As<>;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;AsMemory;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;CastArray<>;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;CastUp<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableArray<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Immutable;ImmutableArray<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Immutable;ImmutableArray<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Immutable;ImmutableArray<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Immutable;ImmutableArray<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableArray<>;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableArray<>;false;Insert;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableArray<>;false;Insert;(System.Int32,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;InsertRange;(System.Int32,System.Collections.Immutable.ImmutableArray<>);;Argument[1].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;InsertRange;(System.Int32,System.Collections.Immutable.ImmutableArray<>);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;OfType<>;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Remove;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Remove;(T,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;RemoveAt;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Collections.Immutable.ImmutableArray<>);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Collections.Immutable.ImmutableArray<>,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Replace;(T,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;SetItem;(System.Int32,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Sort;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Sort;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Sort;(System.Int32,System.Int32,System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableArray<>;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Immutable;ImmutableArray<>;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableArray<>;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableArray<>;false;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableDictionary;false;Create<,>;(System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;Create<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;Create<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[1].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[2].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;GetValueOrDefault<,>;(System.Collections.Immutable.IImmutableDictionary,TKey,TValue);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Immutable.ImmutableDictionary+Builder);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0];Argument[Qualifier].Element;value | @@ -450,14 +753,22 @@ | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableDictionary<,>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;GetValueOrDefault;(TKey,TValue);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;TryGetKey;(TKey,TKey);;Argument[0];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_Item;(TKey);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_ValueComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;set_Item;(TKey,TValue);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;set_Item;(TKey,TValue);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;set_KeyComparer;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;set_ValueComparer;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0];Argument[Qualifier].Element;value | @@ -471,29 +782,79 @@ | System.Collections.Immutable;ImmutableDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Immutable;ImmutableDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Immutable;ImmutableDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableDictionary<,>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableDictionary<,>;false;Remove;(TKey);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;RemoveRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;SetItem;(TKey,TValue);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;SetItems;(System.Collections.Generic.IEnumerable>);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;TryGetKey;(TKey,TKey);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;WithComparers;(System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;WithComparers;(System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;WithComparers;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Immutable;ImmutableDictionary<,>;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Immutable;ImmutableDictionary<,>;false;get_Item;(TKey);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | +| System.Collections.Immutable;ImmutableDictionary<,>;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableDictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableDictionary<,>;false;get_ValueComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.Immutable;ImmutableDictionary<,>;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableDictionary<,>;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableDictionary<,>;false;set_Item;(TKey,TValue);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableDictionary<,>;false;set_Item;(TKey,TValue);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Immutable;ImmutableHashSet;false;Create<>;(System.Collections.Generic.IEqualityComparer,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet;false;CreateRange<>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet;false;ToImmutableHashSet<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet;false;ToImmutableHashSet<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet;false;ToImmutableHashSet<>;(System.Collections.Immutable.ImmutableHashSet+Builder);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableHashSet<>+Builder;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableHashSet<>+Builder;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Immutable;ImmutableHashSet<>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Immutable;ImmutableHashSet<>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Immutable;ImmutableHashSet<>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableHashSet<>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableHashSet<>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>+Builder;false;TryGetValue;(T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>+Builder;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>+Builder;false;set_KeyComparer;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Immutable;ImmutableHashSet<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableHashSet<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Immutable;ImmutableHashSet<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Immutable;ImmutableHashSet<>;false;Except;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableHashSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Immutable;ImmutableHashSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Immutable;ImmutableHashSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableHashSet<>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableHashSet<>;false;Intersect;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;Remove;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;TryGetValue;(T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;WithComparer;(System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableHashSet<>;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableInterlocked;false;GetOrAdd<,>;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;Create<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;Remove<>;(System.Collections.Immutable.IImmutableList,T);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;RemoveRange<>;(System.Collections.Immutable.IImmutableList,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;Replace<>;(System.Collections.Immutable.IImmutableList,T,T);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;Replace<>;(System.Collections.Immutable.IImmutableList,T,T);;Argument[2];Argument[0].Element;generated:taint | +| System.Collections.Immutable;ImmutableList;false;Replace<>;(System.Collections.Immutable.IImmutableList,T,T);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;ToImmutableList<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;ToImmutableList<>;(System.Collections.Immutable.ImmutableList+Builder);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableList<>+Builder;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableList<>+Builder;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableList<>+Builder;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableList<>+Builder;false;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);;Argument[2];Argument[3];generated:taint | +| System.Collections.Immutable;ImmutableList<>+Builder;false;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);;Argument[Qualifier];Argument[3];generated:taint | +| System.Collections.Immutable;ImmutableList<>+Builder;false;BinarySearch;(T,System.Collections.Generic.IComparer);;Argument[0];Argument[1];generated:taint | +| System.Collections.Immutable;ImmutableList<>+Builder;false;BinarySearch;(T,System.Collections.Generic.IComparer);;Argument[Qualifier];Argument[1];generated:taint | | System.Collections.Immutable;ImmutableList<>+Builder;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Immutable;ImmutableList<>+Builder;false;CopyTo;(T[]);;Argument[Qualifier];Argument[0].Element;generated:taint | | System.Collections.Immutable;ImmutableList<>+Builder;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Immutable;ImmutableList<>+Builder;false;Find;(System.Predicate);;Argument[Qualifier].Element;Argument[0].Parameter[0];value | | System.Collections.Immutable;ImmutableList<>+Builder;false;Find;(System.Predicate);;Argument[Qualifier].Element;ReturnValue;value | @@ -510,13 +871,21 @@ | System.Collections.Immutable;ImmutableList<>+Builder;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableList<>+Builder;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections.Immutable;ImmutableList<>+Builder;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableList<>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableList<>+Builder;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Immutable;ImmutableList<>+Builder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableList<>+Builder;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableList<>+Builder;false;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableList<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableList<>;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableList<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableList<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableList<>;false;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);;Argument[2];Argument[3];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);;Argument[Qualifier];Argument[3];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;BinarySearch;(T,System.Collections.Generic.IComparer);;Argument[0];Argument[1];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;BinarySearch;(T,System.Collections.Generic.IComparer);;Argument[Qualifier];Argument[1];generated:taint | | System.Collections.Immutable;ImmutableList<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Immutable;ImmutableList<>;false;CopyTo;(T[]);;Argument[Qualifier];Argument[0].Element;generated:taint | | System.Collections.Immutable;ImmutableList<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Immutable;ImmutableList<>;false;Find;(System.Predicate);;Argument[Qualifier].Element;Argument[0].Parameter[0];value | | System.Collections.Immutable;ImmutableList<>;false;Find;(System.Predicate);;Argument[Qualifier].Element;ReturnValue;value | @@ -531,14 +900,64 @@ | System.Collections.Immutable;ImmutableList<>;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableList<>;false;Insert;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableList<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableList<>;false;Remove;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Remove;(T,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;RemoveAt;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;RemoveRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;RemoveRange;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;RemoveRange;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableList<>;false;RemoveRange;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableList<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections.Immutable;ImmutableList<>;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Sort;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Sort;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Sort;(System.Int32,System.Int32,System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableList<>;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Immutable;ImmutableList<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Immutable;ImmutableList<>;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableList<>;false;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableQueue;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue;false;Create<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue;false;Dequeue<>;(System.Collections.Immutable.IImmutableQueue,T);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue<>;false;Dequeue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue<>;false;Dequeue;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue<>;false;Enqueue;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue<>;false;Enqueue;(T);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableQueue<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Immutable;ImmutableQueue<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Immutable;ImmutableQueue<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableQueue<>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableQueue<>;false;Peek;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;Create<,>;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;Create<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;Create<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateBuilder<,>;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateBuilder<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateBuilder<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEnumerable>);;Argument[1].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[2].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Immutable.ImmutableSortedDictionary+Builder);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0];Argument[Qualifier].Element;value | @@ -552,14 +971,24 @@ | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedDictionary<,>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;GetValueOrDefault;(TKey,TValue);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;TryGetKey;(TKey,TKey);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;TryGetKey;(TKey,TKey);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_Item;(TKey);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_ValueComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;set_Item;(TKey,TValue);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;set_Item;(TKey,TValue);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;set_KeyComparer;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;set_ValueComparer;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0];Argument[Qualifier].Element;value | @@ -573,49 +1002,136 @@ | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedDictionary<,>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;Remove;(TKey);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;RemoveRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItem;(TKey,TValue);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItem;(TKey,TValue);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItem;(TKey,TValue);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItems;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItems;(System.Collections.Generic.IEnumerable>);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;TryGetKey;(TKey,TKey);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;TryGetKey;(TKey,TKey);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;WithComparers;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;WithComparers;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;WithComparers;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_Item;(TKey);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_ValueComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;set_Item;(TKey,TValue);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;set_Item;(TKey,TValue);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(System.Collections.Generic.IComparer,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(System.Collections.Generic.IComparer,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(System.Collections.Generic.IComparer,T[]);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;CreateBuilder<>;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;CreateRange<>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;CreateRange<>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Immutable.ImmutableSortedSet+Builder);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedSet<>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;IntersectWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;TryGetValue;(T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;TryGetValue;(T,T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;UnionWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;get_Max;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;get_Min;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;set_KeyComparer;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedSet<>;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableSortedSet<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableSortedSet<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Immutable;ImmutableSortedSet<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Except;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Immutable;ImmutableSortedSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Immutable;ImmutableSortedSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedSet<>+Enumerator.Current];value | | System.Collections.Immutable;ImmutableSortedSet<>;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableSortedSet<>;false;Insert;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Intersect;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Remove;(T);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedSet<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;TryGetValue;(T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;TryGetValue;(T,T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableSortedSet<>;false;WithComparer;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Immutable;ImmutableSortedSet<>;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Immutable;ImmutableSortedSet<>;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;get_Max;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;get_Min;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Immutable;ImmutableSortedSet<>;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableSortedSet<>;false;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableStack;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack;false;Create<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack;false;Pop<>;(System.Collections.Immutable.IImmutableStack,T);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableStack<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.Immutable;ImmutableStack<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.Immutable;ImmutableStack<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableStack<>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableStack<>;false;Peek;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack<>;false;Pop;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack<>;false;Pop;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack<>;false;Push;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack<>;false;Push;(T);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;Collection<>;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.ObjectModel;Collection<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.ObjectModel;Collection<>;false;Collection;(System.Collections.Generic.IList);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections.ObjectModel;Collection<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.ObjectModel;Collection<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.ObjectModel;Collection<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.ObjectModel;Collection<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.ObjectModel;Collection<>;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.ObjectModel;Collection<>;false;Insert;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.ObjectModel;Collection<>;false;InsertItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;Collection<>;false;InsertItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.ObjectModel;Collection<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;Collection<>;false;SetItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint | | System.Collections.ObjectModel;Collection<>;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.ObjectModel;Collection<>;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.ObjectModel;Collection<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;Collection<>;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.ObjectModel;Collection<>;false;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.ObjectModel;KeyedCollection<,>;false;InsertItem;(System.Int32,TItem);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;InsertItem;(System.Int32,TItem);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;KeyedCollection;(System.Collections.Generic.IEqualityComparer,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;SetItem;(System.Int32,TItem);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;SetItem;(System.Int32,TItem);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;TryGetValue;(TKey,TItem);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;get_Dictionary;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;KeyedCollection<,>;false;get_Item;(TKey);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.ObjectModel;ObservableCollection<>;false;InsertItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;ObservableCollection<>;false;InsertItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.ObjectModel;ObservableCollection<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;ObservableCollection<>;false;SetItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint | | System.Collections.ObjectModel;ReadOnlyCollection<>;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.ObjectModel;ReadOnlyCollection<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.ObjectModel;ReadOnlyCollection<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | @@ -624,7 +1140,10 @@ | System.Collections.ObjectModel;ReadOnlyCollection<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections.ObjectModel;ReadOnlyCollection<>;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.ObjectModel;ReadOnlyCollection<>;false;Insert;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.ObjectModel;ReadOnlyCollection<>;false;ReadOnlyCollection;(System.Collections.Generic.IList);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections.ObjectModel;ReadOnlyCollection<>;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.ObjectModel;ReadOnlyCollection<>;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.ObjectModel;ReadOnlyCollection<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;ReadOnlyCollection<>;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.ObjectModel;ReadOnlyCollection<>;false;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>+KeyCollection;false;Add;(TKey);;Argument[0];Argument[Qualifier].Element;value | @@ -632,11 +1151,13 @@ | System.Collections.ObjectModel;ReadOnlyDictionary<,>+KeyCollection;false;CopyTo;(TKey[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>+KeyCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>+KeyCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.ObjectModel;ReadOnlyDictionary<,>+KeyCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;ReadOnlyDictionary<,>+ValueCollection;false;Add;(TValue);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>+ValueCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>+ValueCollection;false;CopyTo;(TValue[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>+ValueCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>+ValueCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.ObjectModel;ReadOnlyDictionary<,>+ValueCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0];Argument[Qualifier].Element;value | @@ -648,11 +1169,14 @@ | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;CopyTo;(System.Collections.Generic.KeyValuePair[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;ReadOnlyDictionary;(System.Collections.Generic.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;ReadOnlyDictionary;(System.Collections.Generic.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_Dictionary;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_Item;(TKey);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | @@ -662,8 +1186,10 @@ | System.Collections.Specialized;HybridDictionary;false;Add;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Specialized;HybridDictionary;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Specialized;HybridDictionary;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Specialized;HybridDictionary;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Specialized;HybridDictionary;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Specialized;HybridDictionary;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Specialized;HybridDictionary;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Specialized;HybridDictionary;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.Specialized;HybridDictionary;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Specialized;HybridDictionary;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | @@ -674,25 +1200,71 @@ | System.Collections.Specialized;ListDictionary;false;Add;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Specialized;ListDictionary;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Specialized;ListDictionary;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Specialized;ListDictionary;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;ListDictionary;false;ListDictionary;(System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Specialized;ListDictionary;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Specialized;ListDictionary;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Specialized;ListDictionary;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Specialized;ListDictionary;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.Specialized;ListDictionary;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Specialized;ListDictionary;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Specialized;NameObjectCollectionBase+KeysCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Specialized;NameObjectCollectionBase+KeysCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Specialized;NameObjectCollectionBase+KeysCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseAdd;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseAdd;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseGet;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseGet;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseGetAllKeys;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseGetAllValues;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseGetAllValues;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseGetKey;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseSet;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseSet;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | | System.Collections.Specialized;NameObjectCollectionBase;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Collections.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Int32,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Int32,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[2];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Specialized;NameObjectCollectionBase;true;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Specialized;NameObjectCollectionBase;true;get_Keys;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Specialized;NameValueCollection;false;Add;(System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Specialized;NameValueCollection;false;Add;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Specialized;NameValueCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Specialized;NameValueCollection;false;Get;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameValueCollection;false;Get;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameValueCollection;false;GetKey;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameValueCollection;false;NameValueCollection;(System.Collections.Specialized.NameValueCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameValueCollection;false;NameValueCollection;(System.Int32,System.Collections.Specialized.NameValueCollection);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameValueCollection;false;Set;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameValueCollection;false;get_AllKeys;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameValueCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameValueCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameValueCollection;false;set_Item;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Collections.IList,System.Collections.IList,System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Collections.IList,System.Collections.IList,System.Int32);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Collections.IList,System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Collections.IList,System.Int32,System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Int32);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Int32,System.Int32);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Object,System.Int32);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Object,System.Int32);;Argument[2];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;get_NewItems;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;get_OldItems;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Specialized;OrderedDictionary;false;Add;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Specialized;OrderedDictionary;false;Add;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Specialized;OrderedDictionary;false;AsReadOnly;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections.Specialized;OrderedDictionary;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Specialized;OrderedDictionary;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Specialized;OrderedDictionary;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections.Specialized;OrderedDictionary;false;OrderedDictionary;(System.Int32,System.Collections.IEqualityComparer);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;OrderedDictionary;false;OrderedDictionary;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Specialized;OrderedDictionary;false;get_Item;(System.Int32);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Specialized;OrderedDictionary;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Specialized;OrderedDictionary;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Specialized;OrderedDictionary;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Specialized;OrderedDictionary;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.Specialized;OrderedDictionary;false;set_Item;(System.Int32,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Specialized;OrderedDictionary;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | @@ -708,12 +1280,20 @@ | System.Collections.Specialized;StringCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Specialized;StringCollection;false;Insert;(System.Int32,System.String);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Specialized;StringCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Specialized;StringCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Specialized;StringCollection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Specialized;StringCollection;false;set_Item;(System.Int32,System.String);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.Specialized;StringDictionary;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint | | System.Collections.Specialized;StringDictionary;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections.Specialized;StringDictionary;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;StringDictionary;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;StringEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;ArrayList;false;Adapter;(System.Collections.IList);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections;ArrayList;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Collections;ArrayList;false;AddRange;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier].Element;value | +| System.Collections;ArrayList;false;ArrayList;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections;ArrayList;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections;ArrayList;false;CopyTo;(System.Array);;Argument[Qualifier];Argument[0].Element;generated:taint | | System.Collections;ArrayList;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections;ArrayList;false;FixedSize;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue.Element;value | | System.Collections;ArrayList;false;FixedSize;(System.Collections.IList);;Argument[0].Element;ReturnValue.Element;value | @@ -722,34 +1302,67 @@ | System.Collections;ArrayList;false;GetRange;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | | System.Collections;ArrayList;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections;ArrayList;false;InsertRange;(System.Int32,System.Collections.ICollection);;Argument[1].Element;Argument[Qualifier].Element;value | +| System.Collections;ArrayList;false;ReadOnly;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections;ArrayList;false;ReadOnly;(System.Collections.IList);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections;ArrayList;false;Repeat;(System.Object,System.Int32);;Argument[0];ReturnValue.Element;value | | System.Collections;ArrayList;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections;ArrayList;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System.Collections;ArrayList;false;SetRange;(System.Int32,System.Collections.ICollection);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Collections;ArrayList;false;Synchronized;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections;ArrayList;false;Synchronized;(System.Collections.IList);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections;ArrayList;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections;ArrayList;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections;ArrayList;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections;BitArray;false;And;(System.Collections.BitArray);;Argument[Qualifier];ReturnValue;generated:value | | System.Collections;BitArray;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections;BitArray;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections;BitArray;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections;BitArray;false;LeftShift;(System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;BitArray;false;Not;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;BitArray;false;Or;(System.Collections.BitArray);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;BitArray;false;RightShift;(System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;BitArray;false;Xor;(System.Collections.BitArray);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;BitArray;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections;CollectionBase;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Collections;CollectionBase;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections;CollectionBase;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections;CollectionBase;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections;CollectionBase;false;Remove;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections;CollectionBase;false;Remove;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections;CollectionBase;false;get_InnerList;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections;CollectionBase;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections;CollectionBase;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;CollectionBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections;CollectionBase;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections;Comparer;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | | System.Collections;DictionaryBase;false;Add;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;DictionaryBase;false;Add;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections;DictionaryBase;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections;DictionaryBase;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections;DictionaryBase;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;DictionaryBase;false;get_Dictionary;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;DictionaryBase;false;get_InnerHashtable;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections;DictionaryBase;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections;DictionaryBase;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections;DictionaryBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections;DictionaryBase;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections;DictionaryBase;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;DictionaryBase;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections;DictionaryBase;true;OnGet;(System.Object,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.Collections;DictionaryEntry;false;Deconstruct;(System.Object,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;DictionaryEntry;false;DictionaryEntry;(System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections;DictionaryEntry;false;DictionaryEntry;(System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections;DictionaryEntry;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;DictionaryEntry;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;DictionaryEntry;false;set_Key;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections;DictionaryEntry;false;set_Value;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections;Hashtable;false;Add;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;Hashtable;false;Add;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections;Hashtable;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections;Hashtable;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections;Hashtable;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections;Hashtable;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;Hashtable;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary,System.Collections.IEqualityComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | @@ -762,11 +1375,21 @@ | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary,System.Single,System.Collections.IEqualityComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections;Hashtable;false;Hashtable;(System.Int32,System.Single,System.Collections.IEqualityComparer);;Argument[2];Argument[Qualifier];generated:taint | +| System.Collections;Hashtable;false;Hashtable;(System.Int32,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[2];Argument[Qualifier];generated:taint | +| System.Collections;Hashtable;false;Hashtable;(System.Int32,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[3];Argument[Qualifier];generated:taint | +| System.Collections;Hashtable;false;Synchronized;(System.Collections.Hashtable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections;Hashtable;false;get_EqualityComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections;Hashtable;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections;Hashtable;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections;Hashtable;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections;Hashtable;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | +| System.Collections;Hashtable;false;get_comparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;Hashtable;false;get_hcp;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections;Hashtable;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;Hashtable;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections;Hashtable;false;set_comparer;(System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections;Hashtable;false;set_hcp;(System.Collections.IHashCodeProvider);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections;ICollection;true;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections;IDictionary;true;Add;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;IDictionary;true;Add;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | @@ -782,9 +1405,16 @@ | System.Collections;IList;true;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections;Queue;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections;Queue;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections;Queue;false;Dequeue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;Queue;false;Enqueue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections;Queue;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections;Queue;false;Peek;();;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections;Queue;false;Queue;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections;Queue;false;Synchronized;(System.Collections.Queue);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections;Queue;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections;ReadOnlyCollectionBase;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections;ReadOnlyCollectionBase;false;get_InnerList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;ReadOnlyCollectionBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections;ReadOnlyCollectionBase;true;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections;SortedList;false;Add;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;SortedList;false;Add;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | @@ -792,13 +1422,20 @@ | System.Collections;SortedList;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections;SortedList;false;GetByIndex;(System.Int32);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections;SortedList;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Collections;SortedList;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;SortedList;false;GetKey;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;SortedList;false;GetKeyList;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections;SortedList;false;GetValueList;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | +| System.Collections;SortedList;false;SetByIndex;(System.Int32,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections;SortedList;false;SortedList;(System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections;SortedList;false;SortedList;(System.Collections.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;SortedList;false;SortedList;(System.Collections.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections;SortedList;false;SortedList;(System.Collections.IDictionary,System.Collections.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;SortedList;false;SortedList;(System.Collections.IDictionary,System.Collections.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections;SortedList;false;Synchronized;(System.Collections.SortedList);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections;SortedList;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections;SortedList;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections;SortedList;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections;SortedList;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections;SortedList;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;SortedList;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | @@ -807,44 +1444,255 @@ | System.Collections;Stack;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections;Stack;false;Peek;();;Argument[Qualifier].Element;ReturnValue;value | | System.Collections;Stack;false;Pop;();;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections;Stack;false;Push;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections;Stack;false;Stack;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections;Stack;false;Synchronized;(System.Collections.Stack);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections;Stack;false;ToArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;Stack;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.ComponentModel.DataAnnotations.Schema;ColumnAttribute;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations.Schema;ColumnAttribute;false;set_TypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations.Schema;TableAttribute;false;get_Schema;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations.Schema;TableAttribute;false;set_Schema;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;AssociatedMetadataTypeTypeDescriptionProvider;false;AssociatedMetadataTypeTypeDescriptionProvider;(System.Type,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;AssociatedMetadataTypeTypeDescriptionProvider;false;GetTypeDescriptor;(System.Type,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;AssociatedMetadataTypeTypeDescriptionProvider;false;GetTypeDescriptor;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;AssociatedMetadataTypeTypeDescriptionProvider;false;GetTypeDescriptor;(System.Type,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;CompareAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;CustomValidationAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;CustomValidationAttribute;false;FormatErrorMessage;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;GetAutoGenerateField;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;GetAutoGenerateFilter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;GetOrder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_GroupName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_Prompt;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_ResourceType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_ShortName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_Description;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_GroupName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_Prompt;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_ResourceType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_ShortName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayFormatAttribute;false;get_NullDisplayText;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayFormatAttribute;false;get_NullDisplayTextResourceType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayFormatAttribute;false;set_NullDisplayText;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayFormatAttribute;false;set_NullDisplayTextResourceType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;FileExtensionsAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;FileExtensionsAttribute;false;FormatErrorMessage;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;FileExtensionsAttribute;false;get_Extensions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;FileExtensionsAttribute;false;set_Extensions;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;FilterUIHintAttribute;false;get_ControlParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;MaxLengthAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;MetadataTypeAttribute;false;MetadataTypeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;MetadataTypeAttribute;false;get_MetadataClassType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;MinLengthAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;RangeAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;RegularExpressionAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;StringLengthAttribute;false;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;UIHintAttribute;false;get_ControlParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;false;get_ErrorMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;false;get_ErrorMessageResourceName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;false;get_ErrorMessageResourceType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;false;set_ErrorMessage;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;false;set_ErrorMessageResourceName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;false;set_ErrorMessageResourceType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;true;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationContext;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationContext;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationContext;false;set_DisplayName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;ValidationException;false;ValidationException;(System.ComponentModel.DataAnnotations.ValidationResult,System.ComponentModel.DataAnnotations.ValidationAttribute,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;ValidationException;false;get_ValidationResult;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design.Serialization;ContextStack;false;Append;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.Design.Serialization;ContextStack;false;Pop;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design.Serialization;ContextStack;false;Push;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.Design.Serialization;ContextStack;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design.Serialization;ContextStack;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design.Serialization;ContextStack;false;get_Item;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design.Serialization;DesignerSerializerAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design.Serialization;RootDesignerSerializerAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint | | System.ComponentModel.Design;DesignerCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.ComponentModel.Design;DesignerCollection;false;DesignerCollection;(System.Collections.IList);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.ComponentModel.Design;DesignerCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.ComponentModel.Design;DesignerCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | | System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | +| System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel.Design;DesignerOptionService;false;CreateOptionCollection;(System.ComponentModel.Design.DesignerOptionService+DesignerOptionCollection,System.String,System.Object);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerOptionService;false;CreateOptionCollection;(System.ComponentModel.Design.DesignerOptionService+DesignerOptionCollection,System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerOptionService;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerVerb;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerVerb;false;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerVerb;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerVerb;false;set_Description;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.ComponentModel.Design;DesignerVerbCollection;false;Add;(System.ComponentModel.Design.DesignerVerb);;Argument[0];Argument[Qualifier].Element;value | | System.ComponentModel.Design;DesignerVerbCollection;false;AddRange;(System.ComponentModel.Design.DesignerVerbCollection);;Argument[0].Element;Argument[Qualifier].Element;value | | System.ComponentModel.Design;DesignerVerbCollection;false;AddRange;(System.ComponentModel.Design.DesignerVerb[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.ComponentModel.Design;DesignerVerbCollection;false;CopyTo;(System.ComponentModel.Design.DesignerVerb[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.ComponentModel.Design;DesignerVerbCollection;false;DesignerVerbCollection;(System.ComponentModel.Design.DesignerVerb[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.ComponentModel.Design;DesignerVerbCollection;false;Insert;(System.Int32,System.ComponentModel.Design.DesignerVerb);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel.Design;DesignerVerbCollection;false;Remove;(System.ComponentModel.Design.DesignerVerb);;Argument[0];Argument[Qualifier];generated:taint | | System.ComponentModel.Design;DesignerVerbCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.ComponentModel.Design;DesignerVerbCollection;false;set_Item;(System.Int32,System.ComponentModel.Design.DesignerVerb);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel.Design;MenuCommand;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;ServiceContainer;false;GetService;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;ServiceContainer;false;ServiceContainer;(System.IServiceProvider);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;ArrayConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;AsyncOperation;false;get_SynchronizationContext;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;AttributeCollection;false;AttributeCollection;(System.Attribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.ComponentModel;AttributeCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.ComponentModel;AttributeCollection;false;FromExisting;(System.ComponentModel.AttributeCollection,System.Attribute[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.ComponentModel;AttributeCollection;false;FromExisting;(System.ComponentModel.AttributeCollection,System.Attribute[]);;Argument[1].Element;ReturnValue;generated:taint | | System.ComponentModel;AttributeCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.ComponentModel;AttributeCollection;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;AttributeCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;AttributeCollection;false;get_Item;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;AttributeCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.ComponentModel;BaseNumberConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;BaseNumberConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | | System.ComponentModel;BindingList<>;false;Find;(System.ComponentModel.PropertyDescriptor,System.Object);;Argument[Qualifier].Element;ReturnValue;value | +| System.ComponentModel;BindingList<>;false;InsertItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;BindingList<>;false;InsertItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint | +| System.ComponentModel;BindingList<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;BindingList<>;false;SetItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint | +| System.ComponentModel;CategoryAttribute;false;CategoryAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;CategoryAttribute;false;get_Category;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;CharConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;CollectionConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;Component;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;Component;false;get_Events;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;Component;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;Component;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;ComponentCollection;false;ComponentCollection;(System.ComponentModel.IComponent[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.ComponentModel;ComponentCollection;false;CopyTo;(System.ComponentModel.IComponent[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.ComponentModel;ComponentCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ComponentCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ComponentResourceManager;false;ApplyResources;(System.Object,System.String);;Argument[Qualifier];Argument[0];generated:taint | +| System.ComponentModel;ComponentResourceManager;false;ApplyResources;(System.Object,System.String,System.Globalization.CultureInfo);;Argument[Qualifier];Argument[0];generated:taint | +| System.ComponentModel;Container;false;Add;(System.ComponentModel.IComponent,System.String);;Argument[1];Argument[0];generated:taint | +| System.ComponentModel;Container;false;CreateSite;(System.ComponentModel.IComponent,System.String);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;Container;false;GetService;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;Container;false;get_Components;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ContainerFilterService;true;FilterComponents;(System.ComponentModel.ComponentCollection);;Argument[0].Element;ReturnValue;generated:taint | +| System.ComponentModel;CultureInfoConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;CultureInfoConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;CultureInfoConverter;false;GetStandardValues;(System.ComponentModel.ITypeDescriptorContext);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;CustomTypeDescriptor;false;CustomTypeDescriptor;(System.ComponentModel.ICustomTypeDescriptor);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;CustomTypeDescriptor;true;GetAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;CustomTypeDescriptor;true;GetProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;CustomTypeDescriptor;true;GetProperties;(System.Attribute[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;CustomTypeDescriptor;true;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;DateTimeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;DateTimeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;DateTimeOffsetConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;DateTimeOffsetConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;DecimalConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;DefaultValueAttribute;false;DefaultValueAttribute;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;DefaultValueAttribute;false;DefaultValueAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;DefaultValueAttribute;false;DefaultValueAttribute;(System.Type,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;DefaultValueAttribute;false;SetValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;DefaultValueAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;DesignerAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;EditorAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;EnumConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | | System.ComponentModel;EventDescriptorCollection;false;Add;(System.ComponentModel.EventDescriptor);;Argument[0];Argument[Qualifier].Element;value | | System.ComponentModel;EventDescriptorCollection;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.ComponentModel;EventDescriptorCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.ComponentModel;EventDescriptorCollection;false;EventDescriptorCollection;(System.ComponentModel.EventDescriptor[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.ComponentModel;EventDescriptorCollection;false;Find;(System.String,System.Boolean);;Argument[Qualifier].Element;ReturnValue;value | | System.ComponentModel;EventDescriptorCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.ComponentModel;EventDescriptorCollection;false;Insert;(System.Int32,System.ComponentModel.EventDescriptor);;Argument[1];Argument[Qualifier].Element;value | | System.ComponentModel;EventDescriptorCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel;EventDescriptorCollection;false;Sort;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;EventDescriptorCollection;false;Sort;(System.Collections.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;EventDescriptorCollection;false;Sort;(System.Collections.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;EventDescriptorCollection;false;Sort;(System.String[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;EventDescriptorCollection;false;Sort;(System.String[],System.Collections.IComparer);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;EventDescriptorCollection;false;Sort;(System.String[],System.Collections.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | | System.ComponentModel;EventDescriptorCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.ComponentModel;EventDescriptorCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | | System.ComponentModel;EventDescriptorCollection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel;EventHandlerList;false;AddHandler;(System.Object,System.Delegate);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;EventHandlerList;false;AddHandler;(System.Object,System.Delegate);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;EventHandlerList;false;AddHandlers;(System.ComponentModel.EventHandlerList);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;EventHandlerList;false;get_Item;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;EventHandlerList;false;set_Item;(System.Object,System.Delegate);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;EventHandlerList;false;set_Item;(System.Object,System.Delegate);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;GuidConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | | System.ComponentModel;IBindingList;true;Find;(System.ComponentModel.PropertyDescriptor,System.Object);;Argument[Qualifier].Element;ReturnValue;value | +| System.ComponentModel;InstallerTypeAttribute;false;InstallerTypeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;InstallerTypeAttribute;false;InstallerTypeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;LicFileLicenseProvider;false;GetKey;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;LicFileLicenseProvider;false;GetLicense;(System.ComponentModel.LicenseContext,System.Type,System.Object,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;LicenseException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.ComponentModel;LicenseException;false;LicenseException;(System.Type,System.Object,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;LicenseException;false;LicenseException;(System.Type,System.Object,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;LicenseProviderAttribute;false;LicenseProviderAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;LicenseProviderAttribute;false;LicenseProviderAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;LicenseProviderAttribute;false;get_LicenseProvider;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;LicenseProviderAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint | | System.ComponentModel;ListSortDescriptionCollection;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.ComponentModel;ListSortDescriptionCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.ComponentModel;ListSortDescriptionCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.ComponentModel;ListSortDescriptionCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel;ListSortDescriptionCollection;false;ListSortDescriptionCollection;(System.ComponentModel.ListSortDescription[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.ComponentModel;ListSortDescriptionCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.ComponentModel;ListSortDescriptionCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.ComponentModel;ListSortDescriptionCollection;false;set_Item;(System.Int32,System.ComponentModel.ListSortDescription);;Argument[1];Argument[Qualifier].Element;value | | System.ComponentModel;ListSortDescriptionCollection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel;MarshalByValueComponent;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MarshalByValueComponent;false;get_Events;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MarshalByValueComponent;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MarshalByValueComponent;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToDisplayString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean,System.Boolean,System.Boolean,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean,System.Boolean,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;false;FindMethod;(System.Type,System.String,System.Type[],System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;false;FindMethod;(System.Type,System.String,System.Type[],System.Type,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;false;GetInvokee;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;false;GetSite;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.ComponentModel.MemberDescriptor);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.ComponentModel.MemberDescriptor,System.Attribute[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.ComponentModel.MemberDescriptor,System.Attribute[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.String,System.Attribute[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.String,System.Attribute[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.ComponentModel;MemberDescriptor;true;CreateAttributeCollection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;FillAttributes;(System.Collections.IList);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.ComponentModel;MemberDescriptor;true;GetInvocationTarget;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;get_AttributeArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;get_Category;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;set_AttributeArray;(System.Attribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.ComponentModel;MultilineStringConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;NestedContainer;false;CreateSite;(System.ComponentModel.IComponent,System.String);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;NestedContainer;false;GetService;(System.Type);;Argument[Qualifier];ReturnValue;generated:value | +| System.ComponentModel;NullableConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;NullableConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;NullableConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;NullableConverter;false;GetProperties;(System.ComponentModel.ITypeDescriptorContext,System.Object,System.Attribute[]);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;ProgressChangedEventArgs;false;ProgressChangedEventArgs;(System.Int32,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;ProgressChangedEventArgs;false;get_UserState;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptor;false;FillAttributes;(System.Collections.IList);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.ComponentModel;PropertyDescriptor;false;GetInvocationTarget;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptor;false;GetValueChangedHandler;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptor;true;GetEditor;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;PropertyDescriptor;true;GetEditor;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptor;true;get_Converter;();;Argument[Qualifier];ReturnValue;generated:taint | | System.ComponentModel;PropertyDescriptorCollection;false;Add;(System.ComponentModel.PropertyDescriptor);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.ComponentModel;PropertyDescriptorCollection;false;Add;(System.ComponentModel.PropertyDescriptor);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.ComponentModel;PropertyDescriptorCollection;false;Add;(System.ComponentModel.PropertyDescriptor);;Argument[0];Argument[Qualifier].Element;value | @@ -862,6 +1710,12 @@ | System.ComponentModel;PropertyDescriptorCollection;false;PropertyDescriptorCollection;(System.ComponentModel.PropertyDescriptor[]);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.ComponentModel;PropertyDescriptorCollection;false;PropertyDescriptorCollection;(System.ComponentModel.PropertyDescriptor[],System.Boolean);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.ComponentModel;PropertyDescriptorCollection;false;PropertyDescriptorCollection;(System.ComponentModel.PropertyDescriptor[],System.Boolean);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.ComponentModel;PropertyDescriptorCollection;false;Sort;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.Collections.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.Collections.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.String[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.String[],System.Collections.IComparer);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.String[],System.Collections.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | | System.ComponentModel;PropertyDescriptorCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.ComponentModel;PropertyDescriptorCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.ComponentModel;PropertyDescriptorCollection;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | @@ -876,51 +1730,249 @@ | System.ComponentModel;PropertyDescriptorCollection;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.ComponentModel;PropertyDescriptorCollection;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.ComponentModel;PropertyDescriptorCollection;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel;PropertyTabAttribute;false;PropertyTabAttribute;(System.String,System.ComponentModel.PropertyTabScope);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;PropertyTabAttribute;false;PropertyTabAttribute;(System.Type,System.ComponentModel.PropertyTabScope);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;PropertyTabAttribute;false;get_TabClasses;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ReferenceConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;ReferenceConverter;false;ReferenceConverter;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;RunWorkerCompletedEventArgs;false;RunWorkerCompletedEventArgs;(System.Object,System.Exception,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;RunWorkerCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;StringConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TimeSpanConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;ToolboxItemAttribute;false;ToolboxItemAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;ToolboxItemAttribute;false;ToolboxItemAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;ToolboxItemAttribute;false;get_ToolboxItemType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ToolboxItemAttribute;false;get_ToolboxItemTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ToolboxItemFilterAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint | | System.ComponentModel;TypeConverter+StandardValuesCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.ComponentModel;TypeConverter+StandardValuesCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.ComponentModel;TypeConverter+StandardValuesCollection;false;StandardValuesCollection;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.ComponentModel;TypeConverter+StandardValuesCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFrom;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFrom;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromInvariantString;(System.ComponentModel.ITypeDescriptorContext,System.String);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromInvariantString;(System.ComponentModel.ITypeDescriptorContext,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromInvariantString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromInvariantString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromString;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.String);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromString;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromString;(System.ComponentModel.ITypeDescriptorContext,System.String);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromString;(System.ComponentModel.ITypeDescriptorContext,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertTo;(System.Object,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertToInvariantString;(System.ComponentModel.ITypeDescriptorContext,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertToInvariantString;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertToString;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertToString;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertToString;(System.ComponentModel.ITypeDescriptorContext,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertToString;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;GetProperties;(System.ComponentModel.ITypeDescriptorContext,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;GetProperties;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;GetStandardValues;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;SortProperties;(System.ComponentModel.PropertyDescriptorCollection,System.String[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;false;GetReflectionType;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;false;GetTypeDescriptor;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;false;GetTypeDescriptor;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;false;GetTypeDescriptor;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;false;GetTypeDescriptor;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;false;TypeDescriptionProvider;(System.ComponentModel.TypeDescriptionProvider);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetExtendedTypeDescriptor;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetExtendedTypeDescriptor;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetFullComponentName;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetReflectionType;(System.Type,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetRuntimeType;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetTypeDescriptor;(System.Type,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetTypeDescriptor;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetTypeDescriptor;(System.Type,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;AddAttributes;(System.Object,System.Attribute[]);;Argument[1].Element;ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;AddAttributes;(System.Type,System.Attribute[]);;Argument[1].Element;ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateEvent;(System.Type,System.ComponentModel.EventDescriptor,System.Attribute[]);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateEvent;(System.Type,System.ComponentModel.EventDescriptor,System.Attribute[]);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateEvent;(System.Type,System.String,System.Type,System.Attribute[]);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateEvent;(System.Type,System.String,System.Type,System.Attribute[]);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateProperty;(System.Type,System.ComponentModel.PropertyDescriptor,System.Attribute[]);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateProperty;(System.Type,System.ComponentModel.PropertyDescriptor,System.Attribute[]);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateProperty;(System.Type,System.String,System.Type,System.Attribute[]);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateProperty;(System.Type,System.String,System.Type,System.Attribute[]);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;GetAssociation;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;GetFullComponentName;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;GetProvider;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;GetReflectionType;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeListConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeListConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TypeListConverter;false;GetStandardValues;(System.ComponentModel.ITypeDescriptorContext);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeListConverter;false;TypeListConverter;(System.Type[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.ComponentModel;VersionConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;WarningException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.ComponentModel;Win32Exception;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.ComponentModel;Win32Exception;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataAdapter;false;get_TableMappings;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;DataColumnMapping;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DataColumnMapping;false;DataColumnMapping;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data.Common;DataColumnMapping;false;GetDataColumnBySchemaAction;(System.Data.DataTable,System.Type,System.Data.MissingSchemaAction);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;GetDataColumnBySchemaAction;(System.String,System.String,System.Data.DataTable,System.Type,System.Data.MissingSchemaAction);;Argument[2];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;get_DataSetColumn;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;get_SourceColumn;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;set_DataSetColumn;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DataColumnMapping;false;set_SourceColumn;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Data.Common;DataColumnMappingCollection;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | +| System.Data.Common;DataColumnMappingCollection;false;Add;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMappingCollection;false;Add;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMappingCollection;false;Add;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data.Common;DataColumnMappingCollection;false;AddRange;(System.Array);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data.Common;DataColumnMappingCollection;false;AddRange;(System.Data.Common.DataColumnMapping[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data.Common;DataColumnMappingCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Data.Common;DataColumnMappingCollection;false;CopyTo;(System.Data.Common.DataColumnMapping[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data.Common;DataColumnMappingCollection;false;GetByDataSetColumn;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMappingCollection;false;GetColumnMappingBySchemaAction;(System.Data.Common.DataColumnMappingCollection,System.String,System.Data.MissingMappingAction);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data.Common;DataColumnMappingCollection;false;GetColumnMappingBySchemaAction;(System.Data.Common.DataColumnMappingCollection,System.String,System.Data.MissingMappingAction);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMappingCollection;false;GetDataColumn;(System.Data.Common.DataColumnMappingCollection,System.String,System.Type,System.Data.DataTable,System.Data.MissingMappingAction,System.Data.MissingSchemaAction);;Argument[3];ReturnValue;generated:taint | | System.Data.Common;DataColumnMappingCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Data.Common;DataColumnMappingCollection;false;Insert;(System.Int32,System.Data.Common.DataColumnMapping);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataColumnMappingCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataColumnMappingCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Data.Common;DataColumnMappingCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | +| System.Data.Common;DataColumnMappingCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Data.Common;DataColumnMappingCollection;false;set_Item;(System.Int32,System.Data.Common.DataColumnMapping);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataColumnMappingCollection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataColumnMappingCollection;false;set_Item;(System.String,System.Data.Common.DataColumnMapping);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataColumnMappingCollection;false;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Data.Common;DataTableMapping;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String,System.Data.Common.DataColumnMapping[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String,System.Data.Common.DataColumnMapping[]);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String,System.Data.Common.DataColumnMapping[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMapping;false;GetColumnMappingBySchemaAction;(System.String,System.Data.MissingMappingAction);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;GetColumnMappingBySchemaAction;(System.String,System.Data.MissingMappingAction);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;GetDataColumn;(System.String,System.Type,System.Data.DataTable,System.Data.MissingMappingAction,System.Data.MissingSchemaAction);;Argument[2];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;GetDataTableBySchemaAction;(System.Data.DataSet,System.Data.MissingSchemaAction);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;GetDataTableBySchemaAction;(System.Data.DataSet,System.Data.MissingSchemaAction);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;get_ColumnMappings;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;get_DataSetTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;get_SourceTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;set_DataSetTable;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMapping;false;set_SourceTable;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Data.Common;DataTableMappingCollection;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | +| System.Data.Common;DataTableMappingCollection;false;Add;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DataTableMappingCollection;false;Add;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DataTableMappingCollection;false;Add;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data.Common;DataTableMappingCollection;false;AddRange;(System.Array);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data.Common;DataTableMappingCollection;false;AddRange;(System.Data.Common.DataTableMapping[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data.Common;DataTableMappingCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Data.Common;DataTableMappingCollection;false;CopyTo;(System.Data.Common.DataTableMapping[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data.Common;DataTableMappingCollection;false;GetByDataSetTable;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data.Common;DataTableMappingCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Data.Common;DataTableMappingCollection;false;GetTableMappingBySchemaAction;(System.Data.Common.DataTableMappingCollection,System.String,System.String,System.Data.MissingMappingAction);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data.Common;DataTableMappingCollection;false;GetTableMappingBySchemaAction;(System.Data.Common.DataTableMappingCollection,System.String,System.String,System.Data.MissingMappingAction);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DataTableMappingCollection;false;GetTableMappingBySchemaAction;(System.Data.Common.DataTableMappingCollection,System.String,System.String,System.Data.MissingMappingAction);;Argument[2];ReturnValue;generated:taint | | System.Data.Common;DataTableMappingCollection;false;Insert;(System.Int32,System.Data.Common.DataTableMapping);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataTableMappingCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataTableMappingCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Data.Common;DataTableMappingCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | +| System.Data.Common;DataTableMappingCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Data.Common;DataTableMappingCollection;false;set_Item;(System.Int32,System.Data.Common.DataTableMapping);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataTableMappingCollection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataTableMappingCollection;false;set_Item;(System.String,System.Data.Common.DataTableMapping);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataTableMappingCollection;false;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Data.Common;DbCommand;false;ExecuteReader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;ExecuteReader;(System.Data.CommandBehavior);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;ExecuteReaderAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;ExecuteReaderAsync;(System.Data.CommandBehavior);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;ExecuteReaderAsync;(System.Data.CommandBehavior,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;ExecuteReaderAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;get_Connection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;get_Parameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;get_Transaction;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;set_Connection;(System.Data.Common.DbConnection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommand;false;set_Connection;(System.Data.IDbConnection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommand;false;set_Transaction;(System.Data.Common.DbTransaction);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommand;false;set_Transaction;(System.Data.IDbTransaction);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommand;true;ExecuteDbDataReaderAsync;(System.Data.CommandBehavior,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;true;PrepareAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;GetDeleteCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;GetDeleteCommand;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;GetInsertCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;GetInsertCommand;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;GetUpdateCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;GetUpdateCommand;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;RowUpdatingHandler;(System.Data.Common.RowUpdatingEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data.Common;DbCommandBuilder;false;get_DataAdapter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;set_DataAdapter;(System.Data.Common.DbDataAdapter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommandBuilder;true;InitializeCommand;(System.Data.Common.DbCommand);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;true;get_CatalogSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;true;get_QuotePrefix;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;true;get_QuoteSuffix;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;true;get_SchemaSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;true;set_CatalogSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommandBuilder;true;set_QuotePrefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommandBuilder;true;set_QuoteSuffix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommandBuilder;true;set_SchemaSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbConnection;false;CreateCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbConnection;true;ChangeDatabaseAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DbConnection;true;OpenAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | | System.Data.Common;DbConnectionStringBuilder;false;Add;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Data.Common;DbConnectionStringBuilder;false;Add;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Data.Common;DbConnectionStringBuilder;false;Add;(System.String,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Data.Common;DbConnectionStringBuilder;false;Add;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Data.Common;DbConnectionStringBuilder;false;AppendKeyValuePair;(System.Text.StringBuilder,System.String,System.String);;Argument[1];Argument[0];generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;AppendKeyValuePair;(System.Text.StringBuilder,System.String,System.String);;Argument[2];Argument[0];generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;AppendKeyValuePair;(System.Text.StringBuilder,System.String,System.String,System.Boolean);;Argument[1];Argument[0];generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;AppendKeyValuePair;(System.Text.StringBuilder,System.String,System.String,System.Boolean);;Argument[2];Argument[0];generated:taint | | System.Data.Common;DbConnectionStringBuilder;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Data.Common;DbConnectionStringBuilder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Data.Common;DbConnectionStringBuilder;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;GetProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;GetProperties;(System.Attribute[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);;Argument[Qualifier];ReturnValue;generated:value | +| System.Data.Common;DbConnectionStringBuilder;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;get_ConnectionString;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data.Common;DbConnectionStringBuilder;false;get_Item;(System.Object);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Data.Common;DbConnectionStringBuilder;false;get_Item;(System.String);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Data.Common;DbConnectionStringBuilder;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Data.Common;DbConnectionStringBuilder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data.Common;DbConnectionStringBuilder;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Data.Common;DbConnectionStringBuilder;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Data.Common;DbConnectionStringBuilder;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Data.Common;DbConnectionStringBuilder;false;set_Item;(System.String,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Data.Common;DbConnectionStringBuilder;false;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Data.Common;DbDataAdapter;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;false;DbDataAdapter;(System.Data.Common.DbDataAdapter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;get_DeleteCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;false;get_InsertCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;false;get_SelectCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;false;get_UpdateCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;false;set_DeleteCommand;(System.Data.Common.DbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_DeleteCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_InsertCommand;(System.Data.Common.DbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_InsertCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_SelectCommand;(System.Data.Common.DbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_SelectCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_UpdateCommand;(System.Data.Common.DbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_UpdateCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;true;CreateRowUpdatedEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;true;CreateRowUpdatedEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;true;CreateRowUpdatedEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[3];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;true;CreateRowUpdatingEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;true;CreateRowUpdatingEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;true;CreateRowUpdatingEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[3];ReturnValue;generated:taint | +| System.Data.Common;DbDataReader;false;GetFieldValueAsync<>;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data.Common;DbDataReader;true;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Data.Common;DbDataReader;true;GetFieldValue<>;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataReader;true;GetFieldValueAsync<>;(System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataReader;true;GetProviderSpecificValue;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataReader;true;GetProviderSpecificValues;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Data.Common;DbDataReader;true;GetSchemaTableAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataReader;true;GetTextReader;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataRecord;false;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);;Argument[Qualifier];ReturnValue;generated:value | +| System.Data.Common;DbEnumerator;false;DbEnumerator;(System.Data.IDataReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbEnumerator;false;DbEnumerator;(System.Data.IDataReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data.Common;DbParameterCollection;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Data.Common;DbParameterCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DbParameterCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | @@ -934,16 +1986,205 @@ | System.Data.Common;DbParameterCollection;true;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Data.Common;DbParameterCollection;true;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Data.Common;DbParameterCollection;true;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Data.Common;DbTransaction;false;get_Connection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbTransaction;true;CommitAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DbTransaction;true;ReleaseAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DbTransaction;true;RollbackAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DbTransaction;true;RollbackAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DbTransaction;true;SaveAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;CopyToRows;(System.Data.DataRow[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;CopyToRows;(System.Data.DataRow[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;RowUpdatedEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;RowUpdatedEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;RowUpdatedEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[3];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;get_Command;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;get_Row;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;get_TableMapping;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;set_Errors;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;RowUpdatingEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;RowUpdatingEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;RowUpdatingEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[3];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;get_BaseCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;get_Command;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;get_Row;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;get_TableMapping;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;set_BaseCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;set_Command;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;set_Errors;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBinary;false;Add;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBinary;false;Add;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[1];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBinary;false;Concat;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBinary;false;Concat;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[1];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBinary;false;ReadXml;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBinary;false;SqlBinary;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBinary;false;ToSqlGuid;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBinary;false;WriteXml;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data.SqlTypes;SqlBinary;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBytes;false;Read;(System.Int64,System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[1].Element;generated:taint | +| System.Data.SqlTypes;SqlBytes;false;ReadXml;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBytes;false;SqlBytes;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBytes;false;SqlBytes;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBytes;false;Write;(System.Int64,System.Byte[],System.Int32,System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBytes;false;WriteXml;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data.SqlTypes;SqlBytes;false;get_Buffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBytes;false;get_Stream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBytes;false;set_Stream;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlChars;false;SqlChars;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlChars;false;WriteXml;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data.SqlTypes;SqlChars;false;get_Buffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;Abs;(System.Data.SqlTypes.SqlDecimal);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;AdjustScale;(System.Data.SqlTypes.SqlDecimal,System.Int32,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;Ceiling;(System.Data.SqlTypes.SqlDecimal);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;ConvertToPrecScale;(System.Data.SqlTypes.SqlDecimal,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;Floor;(System.Data.SqlTypes.SqlDecimal);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;Round;(System.Data.SqlTypes.SqlDecimal,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;Truncate;(System.Data.SqlTypes.SqlDecimal,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlGuid;false;SqlGuid;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlGuid;false;ToByteArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlGuid;false;ToSqlBinary;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;Add;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;Add;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[1];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;Concat;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;Concat;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[1];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;GetNonUnicodeBytes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;GetUnicodeBytes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;ReadXml;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlString;false;SqlString;(System.Int32,System.Data.SqlTypes.SqlCompareOptions,System.Byte[],System.Int32,System.Int32,System.Boolean);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlString;false;SqlString;(System.String,System.Int32,System.Data.SqlTypes.SqlCompareOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlString;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;WriteXml;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data.SqlTypes;SqlString;false;get_CompareInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlXml;false;SqlXml;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;Constraint;false;SetDataSet;(System.Data.DataSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;Constraint;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;Constraint;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;Constraint;true;get_ConstraintName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;Constraint;true;get__DataSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;Constraint;true;set_ConstraintName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Data;ConstraintCollection;false;Add;(System.Data.Constraint);;Argument[0];Argument[Qualifier].Element;value | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn);;Argument[0];ReturnValue;generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Boolean);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[0];ReturnValue;generated:taint | | System.Data;ConstraintCollection;false;AddRange;(System.Data.Constraint[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data;ConstraintCollection;false;CopyTo;(System.Data.Constraint[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data;ConstraintCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;ConstraintCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;ConstraintCollection;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DBConcurrencyException;false;CopyToRows;(System.Data.DataRow[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Data;DBConcurrencyException;false;CopyToRows;(System.Data.DataRow[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Data;DBConcurrencyException;false;DBConcurrencyException;(System.String,System.Exception,System.Data.DataRow[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Data;DBConcurrencyException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data;DBConcurrencyException;false;get_Row;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DBConcurrencyException;false;set_Row;(System.Data.DataRow);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;DataColumn;(System.String,System.Type,System.String,System.Data.MappingType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;DataColumn;(System.String,System.Type,System.String,System.Data.MappingType);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;DataColumn;(System.String,System.Type,System.String,System.Data.MappingType);;Argument[2];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_Caption;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_ColumnName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_DefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_Expression;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_Prefix;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_Table;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;set_Caption;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;set_ColumnName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;set_DataType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;set_DefaultValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;set_Expression;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumnChangeEventArgs;false;DataColumnChangeEventArgs;(System.Data.DataRow,System.Data.DataColumn,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataColumnChangeEventArgs;false;get_Column;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumnCollection;false;Add;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataColumnCollection;false;Add;(System.Data.DataColumn);;Argument[0];Argument[Qualifier].Element;value | | System.Data;DataColumnCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier].Element;value | +| System.Data;DataColumnCollection;false;Add;(System.String,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumnCollection;false;Add;(System.String,System.Type,System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataColumnCollection;false;AddRange;(System.Data.DataColumn[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data;DataColumnCollection;false;CopyTo;(System.Data.DataColumn[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data;DataColumnCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumnCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumnCollection;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetDateTime;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetFieldValue<>;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetFieldValueAsync<>;(System.Data.Common.DbDataReader,System.String,System.Threading.CancellationToken);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetGuid;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetProviderSpecificValue;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetString;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetTextReader;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetValue;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.Data.DataColumn,System.Data.DataColumn,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.Data.DataColumn[],System.Data.DataColumn[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[2];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[3];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[4];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[5].Element;Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[6].Element;Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[2];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[4].Element;Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_ChildColumns;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_ChildKeyConstraint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_DataSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_ParentColumns;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_ParentKeyConstraint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_RelationName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;set_RelationName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Data;DataRelationCollection;false;Add;(System.Data.DataRelation);;Argument[0];Argument[Qualifier].Element;value | | System.Data;DataRelationCollection;false;CopyTo;(System.Data.DataRelation[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data;DataRelationCollection;false;Remove;(System.Data.DataRelation);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.Data.DataColumn,System.Data.DataColumn);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[],System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[],System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataRelationCollection;true;AddRange;(System.Data.DataRelation[]);;Argument[0].Element;Argument[Qualifier].Element;value | +| System.Data;DataRow;false;DataRow;(System.Data.DataRowBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRow;false;GetChildRows;(System.Data.DataRelation);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetChildRows;(System.Data.DataRelation,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetChildRows;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetChildRows;(System.String,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetParentRows;(System.Data.DataRelation);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetParentRows;(System.Data.DataRelation,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetParentRows;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetParentRows;(System.String,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;SetNull;(System.Data.DataColumn);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRow;false;SetParentRow;(System.Data.DataRow,System.Data.DataRelation);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataRow;false;get_Item;(System.Data.DataColumn);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_Item;(System.Data.DataColumn,System.Data.DataRowVersion);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_Item;(System.Int32,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_Item;(System.String,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_ItemArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_RowError;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_Table;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;set_Item;(System.Data.DataColumn,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRow;false;set_RowError;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Data;DataRowCollection;false;Add;(System.Data.DataRow);;Argument[0];Argument[Qualifier].Element;value | | System.Data;DataRowCollection;false;Add;(System.Object[]);;Argument[0];Argument[Qualifier].Element;value | | System.Data;DataRowCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | @@ -951,30 +2192,166 @@ | System.Data;DataRowCollection;false;Find;(System.Object);;Argument[Qualifier].Element;ReturnValue;value | | System.Data;DataRowCollection;false;Find;(System.Object[]);;Argument[Qualifier].Element;ReturnValue;value | | System.Data;DataRowCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Data;DataRowCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowExtensions;false;SetField<>;(System.Data.DataRow,System.Data.DataColumn,T);;Argument[1];Argument[0];generated:taint | +| System.Data;DataRowView;false;CreateChildView;(System.Data.DataRelation);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataRowView;false;CreateChildView;(System.Data.DataRelation);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;CreateChildView;(System.Data.DataRelation,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataRowView;false;CreateChildView;(System.Data.DataRelation,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;CreateChildView;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;CreateChildView;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);;Argument[Qualifier];ReturnValue;generated:value | +| System.Data;DataRowView;false;get_DataView;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;get_Row;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;Copy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;CreateDataReader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;CreateDataReader;(System.Data.DataTable[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataSet;false;DataSet;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataSet;false;DataSet;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataSet;false;GetChanges;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;GetChanges;(System.Data.DataRowState);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;GetList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data;DataSet;false;get_DataSetName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_DefaultViewManager;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_Locale;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_Prefix;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_Relations;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_Tables;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;set_DataSetName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataSet;false;set_Locale;(System.Globalization.CultureInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataSet;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataSet;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataSet;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;Copy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;CreateDataReader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;DataTable;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;DataTable;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;DataTable;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;GetChanges;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;GetChanges;(System.Data.DataRowState);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;GetErrors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;GetList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data;DataTable;false;LoadDataRow;(System.Object[],System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;LoadDataRow;(System.Object[],System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;LoadDataRow;(System.Object[],System.Data.LoadOption);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;NewRow;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;NewRowArray;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;NewRowFromBuilder;(System.Data.DataRowBuilder);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataTable;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_ChildRelations;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Columns;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Constraints;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_DataSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_DefaultView;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_DisplayExpression;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Locale;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_ParentRelations;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Prefix;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Rows;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_TableName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;set_Locale;(System.Globalization.CultureInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;set_PrimaryKey;(System.Data.DataColumn[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;set_TableName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTableCollection;false;Add;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataTableCollection;false;Add;(System.Data.DataTable);;Argument[0];Argument[Qualifier].Element;value | | System.Data;DataTableCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier].Element;value | +| System.Data;DataTableCollection;false;Add;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataTableCollection;false;Add;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Data;DataTableCollection;false;Add;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataTableCollection;false;AddRange;(System.Data.DataTable[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data;DataTableCollection;false;CopyTo;(System.Data.DataTable[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data;DataTableCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableCollection;false;get_Item;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableCollection;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableExtensions;false;AsEnumerable;(System.Data.DataTable);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;DataTableReader;(System.Data.DataTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTableReader;false;DataTableReader;(System.Data.DataTable[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data;DataTableReader;false;GetDateTime;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataTableReader;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Data;DataTableReader;false;GetGuid;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;GetProviderSpecificValue;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;GetProviderSpecificValues;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Data;DataTableReader;false;GetSchemaTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;GetString;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;GetValue;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataView;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | +| System.Data;DataView;false;AddNew;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;ApplySort;(System.ComponentModel.PropertyDescriptor,System.ComponentModel.ListSortDirection);;Argument[0];Argument[Qualifier];generated:taint | | System.Data;DataView;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data;DataView;false;DataView;(System.Data.DataTable,System.String,System.String,System.Data.DataViewRowState);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataView;false;DataView;(System.Data.DataTable,System.String,System.String,System.Data.DataViewRowState);;Argument[2];Argument[Qualifier];generated:taint | | System.Data;DataView;false;Find;(System.ComponentModel.PropertyDescriptor,System.Object);;Argument[Qualifier].Element;ReturnValue;value | | System.Data;DataView;false;Find;(System.Object);;Argument[Qualifier].Element;ReturnValue;value | | System.Data;DataView;false;Find;(System.Object[]);;Argument[Qualifier].Element;ReturnValue;value | +| System.Data;DataView;false;FindRows;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;FindRows;(System.Object[]);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataView;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Data;DataView;false;GetItemProperties;(System.ComponentModel.PropertyDescriptor[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;GetListName;(System.ComponentModel.PropertyDescriptor[]);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataView;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Data;DataView;false;ToTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;ToTable;(System.Boolean,System.String[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;ToTable;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;ToTable;(System.String,System.Boolean,System.String[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;get_DataViewManager;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;get_Filter;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataView;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Data;DataView;false;get_RowFilter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;get_Sort;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Data;DataView;false;get_Table;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;set_Filter;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Data;DataView;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Data;DataView;false;set_RowFilter;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataView;false;set_Sort;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataView;false;set_Table;(System.Data.DataTable);;Argument[0];Argument[Qualifier];generated:taint | | System.Data;DataViewManager;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Data;DataViewManager;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data;DataViewManager;false;CreateDataView;(System.Data.DataTable);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataViewManager;false;Find;(System.ComponentModel.PropertyDescriptor,System.Object);;Argument[Qualifier].Element;ReturnValue;value | | System.Data;DataViewManager;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Data;DataViewManager;false;GetListName;(System.ComponentModel.PropertyDescriptor[]);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataViewManager;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Data;DataViewManager;false;get_DataSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewManager;false;get_DataViewSettings;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataViewManager;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Data;DataViewManager;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Data;DataViewManager;false;set_DataSet;(System.Data.DataSet);;Argument[0];Argument[Qualifier];generated:taint | | System.Data;DataViewManager;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Data;DataViewSetting;false;get_DataViewManager;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSetting;false;get_RowFilter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSetting;false;get_Sort;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSetting;false;get_Table;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSetting;false;set_RowFilter;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataViewSetting;false;set_Sort;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Data;DataViewSettingCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Data;DataViewSettingCollection;false;CopyTo;(System.Data.DataViewSetting[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Data;DataViewSettingCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Data;DataViewSettingCollection;false;get_Item;(System.Data.DataTable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSettingCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSettingCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSettingCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Data;DataViewSettingCollection;false;set_Item;(System.Data.DataTable,System.Data.DataViewSetting);;Argument[0];Argument[1];generated:taint | +| System.Data;DataViewSettingCollection;false;set_Item;(System.Data.DataTable,System.Data.DataViewSetting);;Argument[Qualifier];Argument[1];generated:taint | +| System.Data;DataViewSettingCollection;false;set_Item;(System.Int32,System.Data.DataViewSetting);;Argument[Qualifier];Argument[1];generated:taint | | System.Data;EnumerableRowCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Data;EnumerableRowCollection<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Data;EnumerableRowCollection<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | @@ -999,6 +2376,25 @@ | System.Data;EnumerableRowCollectionExtensions;false;ThenByDescending<,>;(System.Data.OrderedEnumerableRowCollection,System.Func,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue.Element;value | | System.Data;EnumerableRowCollectionExtensions;false;Where<>;(System.Data.EnumerableRowCollection,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Data;EnumerableRowCollectionExtensions;false;Where<>;(System.Data.EnumerableRowCollection,System.Func);;Argument[0].Element;ReturnValue.Element;value | +| System.Data;FillErrorEventArgs;false;FillErrorEventArgs;(System.Data.DataTable,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;FillErrorEventArgs;false;FillErrorEventArgs;(System.Data.DataTable,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Data;FillErrorEventArgs;false;get_DataTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;FillErrorEventArgs;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;FillErrorEventArgs;false;get_Values;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;FillErrorEventArgs;false;set_Errors;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.Data.DataColumn,System.Data.DataColumn);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[2];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[4].Element;Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;get_Columns;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;ForeignKeyConstraint;false;get_RelatedColumns;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;IColumnMappingCollection;true;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | | System.Data;IColumnMappingCollection;true;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Data;IDataParameterCollection;true;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | @@ -1007,7 +2403,9 @@ | System.Data;ITableMappingCollection;true;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Data;InternalDataCollectionBase;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Data;InternalDataCollectionBase;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Data;InternalDataCollectionBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Data;PropertyCollection;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | +| System.Data;TypedTableBase<>;false;Cast<>;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;TypedTableBase<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Data;TypedTableBase<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Data;TypedTableBaseExtensions;false;AsEnumerable<>;(System.Data.TypedTableBase);;Argument[0].Element;ReturnValue.Element;value | @@ -1024,6 +2422,87 @@ | System.Data;TypedTableBaseExtensions;false;Select<,>;(System.Data.TypedTableBase,System.Func);;Argument[1].ReturnValue;ReturnValue.Element;value | | System.Data;TypedTableBaseExtensions;false;Where<>;(System.Data.TypedTableBase,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Data;TypedTableBaseExtensions;false;Where<>;(System.Data.TypedTableBase,System.Func);;Argument[0].Element;ReturnValue.Element;value | +| System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.Data.DataColumn);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.Data.DataColumn,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.Data.DataColumn[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.Data.DataColumn[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.String[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.String[],System.Boolean);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Data;UniqueConstraint;false;get_Columns;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractClassAttribute;false;ContractClassAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractClassAttribute;false;get_TypeContainingContracts;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractClassForAttribute;false;ContractClassForAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractClassForAttribute;false;get_TypeContractsAreFor;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractFailedEventArgs;false;ContractFailedEventArgs;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractFailedEventArgs;false;ContractFailedEventArgs;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[2];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractFailedEventArgs;false;ContractFailedEventArgs;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[3];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractFailedEventArgs;false;get_Condition;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractFailedEventArgs;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractFailedEventArgs;false;get_OriginalException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;get_Category;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;get_Setting;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractPublicPropertyNameAttribute;false;ContractPublicPropertyNameAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractPublicPropertyNameAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;DiagnosticCounter;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;DiagnosticCounter;false;get_DisplayUnits;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;DiagnosticCounter;false;set_DisplayName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Tracing;DiagnosticCounter;false;set_DisplayUnits;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Tracing;EventListener;false;DisableEvents;(System.Diagnostics.Tracing.EventSource);;Argument[Qualifier];Argument[0];generated:taint | +| System.Diagnostics.Tracing;EventListener;false;EnableEvents;(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventLevel);;Argument[Qualifier];Argument[0];generated:taint | +| System.Diagnostics.Tracing;EventListener;false;EnableEvents;(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventLevel,System.Diagnostics.Tracing.EventKeywords);;Argument[Qualifier];Argument[0];generated:taint | +| System.Diagnostics.Tracing;EventListener;false;EnableEvents;(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventLevel,System.Diagnostics.Tracing.EventKeywords,System.Collections.Generic.IDictionary);;Argument[Qualifier];Argument[0];generated:taint | +| System.Diagnostics.Tracing;EventSource;false;EventSource;(System.Diagnostics.Tracing.EventSourceSettings,System.String[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Diagnostics.Tracing;EventSource;false;GenerateManifest;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;GenerateManifest;(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;GetName;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;GetTrait;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;get_ConstructionException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;get_Guid;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_ActivityId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_EventName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_PayloadNames;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_RelatedActivityId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;AddBaggage;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;AddEvent;(System.Diagnostics.ActivityEvent);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;AddTag;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;AddTag;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;SetEndTime;(System.DateTime);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;SetIdFormat;(System.Diagnostics.ActivityIdFormat);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;SetParentId;(System.Diagnostics.ActivityTraceId,System.Diagnostics.ActivitySpanId,System.Diagnostics.ActivityTraceFlags);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;Activity;false;SetParentId;(System.Diagnostics.ActivityTraceId,System.Diagnostics.ActivitySpanId,System.Diagnostics.ActivityTraceFlags);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics;Activity;false;SetParentId;(System.Diagnostics.ActivityTraceId,System.Diagnostics.ActivitySpanId,System.Diagnostics.ActivityTraceFlags);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;SetParentId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;Activity;false;SetParentId;(System.String);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;SetStartTime;(System.DateTime);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;SetTag;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;Start;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_Events;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_Links;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_ParentId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_ParentSpanId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_RootId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_SpanId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_TagObjects;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_TraceId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_TraceStateString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;set_DisplayName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;Activity;false;set_TraceStateString;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ActivityCreationOptions<>;false;get_SamplingTags;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ActivitySource;false;StartActivity;(System.String,System.Diagnostics.ActivityKind,System.String,System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEnumerable,System.DateTimeOffset);;Argument[2];ReturnValue;generated:taint | +| System.Diagnostics;ActivitySpanId;false;ToHexString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ActivitySpanId;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ActivityTagsCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Diagnostics;ActivityTagsCollection;false;ActivityTagsCollection;(System.Collections.Generic.IEnumerable>);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Diagnostics;ActivityTagsCollection;false;ActivityTagsCollection;(System.Collections.Generic.IEnumerable>);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Diagnostics;ActivityTagsCollection;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | @@ -1035,14 +2514,134 @@ | System.Diagnostics;ActivityTagsCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Diagnostics;ActivityTagsCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Diagnostics;ActivityTagsCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Diagnostics.ActivityTagsCollection+Enumerator.Current];value | +| System.Diagnostics;ActivityTagsCollection;false;TryGetValue;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | | System.Diagnostics;ActivityTagsCollection;false;get_Item;(System.String);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Diagnostics;ActivityTagsCollection;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | | System.Diagnostics;ActivityTagsCollection;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Diagnostics;ActivityTagsCollection;false;set_Item;(System.String,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Diagnostics;ActivityTagsCollection;false;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Diagnostics;ActivityTraceId;false;ToHexString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ActivityTraceId;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;CorrelationManager;false;get_LogicalOperationStack;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DataReceivedEventArgs;false;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DebuggerDisplayAttribute;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DebuggerDisplayAttribute;false;set_Target;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;DebuggerTypeProxyAttribute;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DebuggerTypeProxyAttribute;false;set_Target;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;DebuggerVisualizerAttribute;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DebuggerVisualizerAttribute;false;set_Target;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;DefaultTraceListener;false;get_LogFileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DefaultTraceListener;false;set_LogFileName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;DelimitedListTraceListener;false;get_Delimiter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DelimitedListTraceListener;false;set_Delimiter;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;DiagnosticListener;false;Subscribe;(System.IObserver>);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics;DiagnosticListener;false;Subscribe;(System.IObserver>);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DiagnosticSource;false;StartActivity;(System.Diagnostics.Activity,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;GetVersionInfo;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_Comments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_CompanyName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_FileDescription;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_FileVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_InternalName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_Language;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_LegalCopyright;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_LegalTrademarks;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_OriginalFilename;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_PrivateBuild;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_ProductName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_ProductVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_SpecialBuild;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;GetProcessById;(System.Int32,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;GetProcesses;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;Start;(System.Diagnostics.ProcessStartInfo);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_ExitTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_MachineName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_MainModule;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_MaxWorkingSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_MinWorkingSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_Modules;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_ProcessorAffinity;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_SafeHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_StandardError;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_StandardInput;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_StandardOutput;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_StartInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_StartTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_Threads;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;set_ProcessorAffinity;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;Process;false;set_StartInfo;(System.Diagnostics.ProcessStartInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessModule;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessModule;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessModule;false;get_ModuleName;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Diagnostics;ProcessModuleCollection;false;CopyTo;(System.Diagnostics.ProcessModule[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Diagnostics;ProcessModuleCollection;false;ProcessModuleCollection;(System.Diagnostics.ProcessModule[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessModuleCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;ProcessStartInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;ProcessStartInfo;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;ProcessStartInfo;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_Environment;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_EnvironmentVariables;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_UserName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_Verb;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_WorkingDirectory;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;set_Arguments;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;set_FileName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;set_UserName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;set_Verb;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;set_WorkingDirectory;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessThread;false;get_StartAddress;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Diagnostics;ProcessThreadCollection;false;Add;(System.Diagnostics.ProcessThread);;Argument[0];Argument[Qualifier].Element;value | | System.Diagnostics;ProcessThreadCollection;false;CopyTo;(System.Diagnostics.ProcessThread[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Diagnostics;ProcessThreadCollection;false;Insert;(System.Int32,System.Diagnostics.ProcessThread);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessThreadCollection;false;ProcessThreadCollection;(System.Diagnostics.ProcessThread[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessThreadCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;SourceFilter;false;SourceFilter;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;SourceFilter;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;SourceFilter;false;set_Source;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;StackFrame;false;GetFileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;StackFrame;false;GetMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;StackFrame;false;StackFrame;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;StackFrame;false;StackFrame;(System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;StackFrame;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;StackTrace;false;GetFrame;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;StackTrace;false;StackTrace;(System.Diagnostics.StackFrame);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;StackTrace;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Switch;false;Switch;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;Switch;false;Switch;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics;Switch;false;Switch;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Diagnostics;Switch;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Switch;false;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Switch;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Switch;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Switch;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;SwitchAttribute;false;SwitchAttribute;(System.String,System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;SwitchAttribute;false;SwitchAttribute;(System.String,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics;SwitchAttribute;false;get_SwitchName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;SwitchAttribute;false;get_SwitchType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;SwitchAttribute;false;set_SwitchName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;SwitchAttribute;false;set_SwitchType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;SwitchLevelAttribute;false;SwitchLevelAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;SwitchLevelAttribute;false;get_SwitchLevelType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;SwitchLevelAttribute;false;set_SwitchLevelType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TextWriterTraceListener;false;TextWriterTraceListener;(System.IO.TextWriter,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TextWriterTraceListener;false;TextWriterTraceListener;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TextWriterTraceListener;false;TextWriterTraceListener;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TextWriterTraceListener;false;get_Writer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TextWriterTraceListener;false;set_Writer;(System.IO.TextWriter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TraceEventCache;false;get_Callstack;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceEventCache;false;get_DateTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceListener;false;TraceListener;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TraceListener;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceListener;false;get_Filter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceListener;false;set_Filter;(System.Diagnostics.TraceFilter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TraceListener;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceListener;true;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Diagnostics;TraceListenerCollection;false;Add;(System.Diagnostics.TraceListener);;Argument[0];Argument[Qualifier].Element;value | | System.Diagnostics;TraceListenerCollection;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Diagnostics;TraceListenerCollection;false;AddRange;(System.Diagnostics.TraceListenerCollection);;Argument[0].Element;Argument[Qualifier].Element;value | @@ -1054,8 +2653,43 @@ | System.Diagnostics;TraceListenerCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Diagnostics;TraceListenerCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Diagnostics;TraceListenerCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | +| System.Diagnostics;TraceListenerCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Diagnostics;TraceListenerCollection;false;set_Item;(System.Int32,System.Diagnostics.TraceListener);;Argument[1];Argument[Qualifier].Element;value | | System.Diagnostics;TraceListenerCollection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Diagnostics;TraceSource;false;TraceSource;(System.String,System.Diagnostics.SourceLevels);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TraceSource;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceSource;false;get_Listeners;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceSource;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceSource;false;get_Switch;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceSource;false;set_Switch;(System.Diagnostics.SourceSwitch);;Argument[0];Argument[Qualifier];generated:taint | +| System.Drawing;Color;false;FromName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Drawing;Color;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Drawing;Color;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Drawing;ColorConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint | +| System.Drawing;ColorConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Drawing;ColorConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Drawing;ColorTranslator;false;FromHtml;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Drawing;ColorTranslator;false;ToHtml;(System.Drawing.Color);;Argument[0];ReturnValue;generated:taint | +| System.Drawing;PointConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Drawing;PointConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Drawing;Rectangle;false;Inflate;(System.Drawing.Rectangle,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Drawing;RectangleConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Drawing;RectangleConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Drawing;RectangleF;false;Inflate;(System.Drawing.RectangleF,System.Single,System.Single);;Argument[0];ReturnValue;generated:taint | +| System.Drawing;SizeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Drawing;SizeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Drawing;SizeFConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Drawing;SizeFConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Dynamic;BindingRestrictions;false;GetExpressionRestriction;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Dynamic;BindingRestrictions;false;GetInstanceRestriction;(System.Linq.Expressions.Expression,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Dynamic;BindingRestrictions;false;GetInstanceRestriction;(System.Linq.Expressions.Expression,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.Dynamic;BindingRestrictions;false;GetTypeRestriction;(System.Linq.Expressions.Expression,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Dynamic;BindingRestrictions;false;GetTypeRestriction;(System.Linq.Expressions.Expression,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Dynamic;BindingRestrictions;false;Merge;(System.Dynamic.BindingRestrictions);;Argument[Qualifier];ReturnValue;generated:value | +| System.Dynamic;BindingRestrictions;false;ToExpression;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Dynamic;DynamicMetaObject;false;Create;(System.Object,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Dynamic;DynamicMetaObject;false;DynamicMetaObject;(System.Linq.Expressions.Expression,System.Dynamic.BindingRestrictions,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.Dynamic;DynamicMetaObject;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Dynamic;ExpandoObject;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Dynamic;ExpandoObject;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Dynamic;ExpandoObject;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0];Argument[Qualifier].Element;value | @@ -1064,17 +2698,183 @@ | System.Dynamic;ExpandoObject;false;CopyTo;(System.Collections.Generic.KeyValuePair[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Dynamic;ExpandoObject;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Dynamic;ExpandoObject;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Dynamic;ExpandoObject;false;TryGetValue;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | | System.Dynamic;ExpandoObject;false;get_Item;(System.String);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Dynamic;ExpandoObject;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | | System.Dynamic;ExpandoObject;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Dynamic;ExpandoObject;false;set_Item;(System.String,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Dynamic;ExpandoObject;false;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Formats.Asn1;AsnReader;false;AsnReader;(System.ReadOnlyMemory,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.AsnReaderOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Formats.Asn1;AsnReader;false;AsnReader;(System.ReadOnlyMemory,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.AsnReaderOptions);;Argument[2];Argument[Qualifier];generated:taint | +| System.Formats.Asn1;AsnReader;false;PeekContentBytes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;PeekEncodedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;ReadEncodedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;ReadEnumeratedBytes;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;ReadIntegerBytes;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;ReadSequence;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;ReadSetOf;(System.Boolean,System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;ReadSetOf;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;TryReadPrimitiveBitString;(System.Int32,System.ReadOnlyMemory,System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;TryReadPrimitiveCharacterStringBytes;(System.Formats.Asn1.Asn1Tag,System.ReadOnlyMemory);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;TryReadPrimitiveOctetString;(System.ReadOnlyMemory,System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnWriter;false;PushOctetString;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnWriter;false;PushSequence;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnWriter;false;PushSetOf;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;Calendar;false;ReadOnly;(System.Globalization.Calendar);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;GetSortKey;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;GetSortKey;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;GetSortKey;(System.String,System.Globalization.CompareOptions);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;GetSortKey;(System.String,System.Globalization.CompareOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;CultureInfo;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;CultureInfo;false;GetConsoleFallbackUICulture;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;GetCultureInfo;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;GetCultureInfo;(System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;GetCultureInfo;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;GetCultureInfo;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;GetCultureInfoByIetfLanguageTag;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;GetFormat;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;ReadOnly;(System.Globalization.CultureInfo);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_Calendar;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_DateTimeFormat;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_EnglishName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_NativeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_NumberFormat;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_TextInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;set_DateTimeFormat;(System.Globalization.DateTimeFormatInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;CultureInfo;false;set_NumberFormat;(System.Globalization.NumberFormatInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;CultureNotFoundException;false;CultureNotFoundException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;CultureNotFoundException;false;CultureNotFoundException;(System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System.Globalization;CultureNotFoundException;false;CultureNotFoundException;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Globalization;CultureNotFoundException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Globalization;CultureNotFoundException;false;get_InvalidCultureId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureNotFoundException;false;get_InvalidCultureName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureNotFoundException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetAbbreviatedDayName;(System.DayOfWeek);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetAbbreviatedEraName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetAbbreviatedMonthName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetAllDateTimePatterns;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetDayName;(System.DayOfWeek);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetEraName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetFormat;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetInstance;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetMonthName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetShortestDayName;(System.DayOfWeek);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;ReadOnly;(System.Globalization.DateTimeFormatInfo);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;SetAllDateTimePatterns;(System.String[],System.Char);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;get_AMDesignator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;get_Calendar;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;get_DateSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;get_MonthDayPattern;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;get_PMDesignator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;get_TimeSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_AMDesignator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_AbbreviatedDayNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_AbbreviatedMonthGenitiveNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_AbbreviatedMonthNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_Calendar;(System.Globalization.Calendar);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_DateSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_DayNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_FullDateTimePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_LongDatePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_LongTimePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_MonthDayPattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_MonthGenitiveNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_MonthNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_PMDesignator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_ShortDatePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_ShortTimePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_ShortestDayNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_TimeSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_YearMonthPattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DaylightTime;false;DaylightTime;(System.DateTime,System.DateTime,System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DaylightTime;false;DaylightTime;(System.DateTime,System.DateTime,System.TimeSpan);;Argument[1];Argument[Qualifier];generated:taint | +| System.Globalization;DaylightTime;false;DaylightTime;(System.DateTime,System.DateTime,System.TimeSpan);;Argument[2];Argument[Qualifier];generated:taint | +| System.Globalization;DaylightTime;false;get_Delta;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DaylightTime;false;get_End;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DaylightTime;false;get_Start;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;GlobalizationExtensions;false;GetStringComparer;(System.Globalization.CompareInfo,System.Globalization.CompareOptions);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;IdnMapping;false;GetAscii;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;IdnMapping;false;GetAscii;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;IdnMapping;false;GetAscii;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;IdnMapping;false;GetUnicode;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;IdnMapping;false;GetUnicode;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;IdnMapping;false;GetUnicode;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;GetFormat;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;GetInstance;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;ReadOnly;(System.Globalization.NumberFormatInfo);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_CurrencyDecimalSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_CurrencyGroupSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_CurrencySymbol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_NaNSymbol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_NegativeInfinitySymbol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_NegativeSign;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_NumberDecimalSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_NumberGroupSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_PerMilleSymbol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_PercentDecimalSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_PercentGroupSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_PercentSymbol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_PositiveInfinitySymbol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_PositiveSign;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;set_CurrencyDecimalSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_CurrencyGroupSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_CurrencySymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_NaNSymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_NativeDigits;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_NegativeInfinitySymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_NegativeSign;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_NumberDecimalSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_NumberGroupSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_PerMilleSymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_PercentDecimalSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_PercentGroupSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_PercentSymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_PositiveInfinitySymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_PositiveSign;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;RegionInfo;false;RegionInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;RegionInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;RegionInfo;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;RegionInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;SortKey;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;SortKey;false;get_OriginalString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;SortVersion;false;SortVersion;(System.Int32,System.Guid);;Argument[1];Argument[Qualifier];generated:taint | +| System.Globalization;SortVersion;false;get_SortId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;GetNextTextElement;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;GetNextTextElement;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;GetTextElementEnumerator;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;GetTextElementEnumerator;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;StringInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;StringInfo;false;SubstringByTextElements;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;SubstringByTextElements;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;get_String;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;set_String;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;TextElementEnumerator;false;GetTextElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;TextElementEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;ReadOnly;(System.Globalization.TextInfo);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;ToLower;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;ToTitleCase;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;ToUpper;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;get_CultureName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;set_ListSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.IO.Compression;BrotliStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.IO.Compression;BrotliStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO.Compression;BrotliStream;false;BrotliStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO.Compression;BrotliStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;BrotliStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.Compression;BrotliStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.IO.Compression;BrotliStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO.Compression;BrotliStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.Compression;BrotliStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO.Compression;BrotliStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO.Compression;BrotliStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;BrotliStream;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.Compression;DeflateStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.IO.Compression;DeflateStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | | System.IO.Compression;DeflateStream;false;CopyTo;(System.IO.Stream,System.Int32);;Argument[Qualifier];Argument[0];taint | @@ -1083,51 +2883,216 @@ | System.IO.Compression;DeflateStream;false;DeflateStream;(System.IO.Stream,System.IO.Compression.CompressionLevel,System.Boolean);;Argument[0];ReturnValue;taint | | System.IO.Compression;DeflateStream;false;DeflateStream;(System.IO.Stream,System.IO.Compression.CompressionMode);;Argument[0];ReturnValue;taint | | System.IO.Compression;DeflateStream;false;DeflateStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);;Argument[0];ReturnValue;taint | +| System.IO.Compression;DeflateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;DeflateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.Compression;DeflateStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.IO.Compression;DeflateStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO.Compression;DeflateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.Compression;DeflateStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO.Compression;DeflateStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO.Compression;DeflateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;DeflateStream;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.Compression;GZipStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.IO.Compression;GZipStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | | System.IO.Compression;GZipStream;false;CopyTo;(System.IO.Stream,System.Int32);;Argument[Qualifier];Argument[0];taint | | System.IO.Compression;GZipStream;false;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];taint | +| System.IO.Compression;GZipStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;GZipStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;GZipStream;false;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionLevel,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO.Compression;GZipStream;false;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | | System.IO.Compression;GZipStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.IO.Compression;GZipStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO.Compression;GZipStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.Compression;GZipStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO.Compression;GZipStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO.Compression;GZipStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;GZipStream;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchive;false;CreateEntry;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchive;false;CreateEntry;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchive;false;CreateEntry;(System.String,System.IO.Compression.CompressionLevel);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchive;false;CreateEntry;(System.String,System.IO.Compression.CompressionLevel);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchive;false;ZipArchive;(System.IO.Stream,System.IO.Compression.ZipArchiveMode,System.Boolean,System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO.Compression;ZipArchive;false;ZipArchive;(System.IO.Stream,System.IO.Compression.ZipArchiveMode,System.Boolean,System.Text.Encoding);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO.Compression;ZipArchive;false;get_Entries;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;Open;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;get_Archive;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;get_LastWriteTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;set_LastWriteTime;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO.Compression;ZipFile;false;Open;(System.String,System.IO.Compression.ZipArchiveMode,System.Text.Encoding);;Argument[2];ReturnValue;generated:taint | +| System.IO.Compression;ZipFileExtensions;false;CreateEntryFromFile;(System.IO.Compression.ZipArchive,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;ZipFileExtensions;false;CreateEntryFromFile;(System.IO.Compression.ZipArchive,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.IO.Compression;ZipFileExtensions;false;CreateEntryFromFile;(System.IO.Compression.ZipArchive,System.String,System.String,System.IO.Compression.CompressionLevel);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;ZipFileExtensions;false;CreateEntryFromFile;(System.IO.Compression.ZipArchive,System.String,System.String,System.IO.Compression.CompressionLevel);;Argument[2];ReturnValue;generated:taint | +| System.IO.Enumeration;FileSystemEntry;false;ToFileSystemInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Enumeration;FileSystemEntry;false;ToSpecifiedFullPath;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Enumeration;FileSystemEntry;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.Enumeration;FileSystemEnumerable<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.IO.Enumeration;FileSystemEnumerable<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.IO.Enumeration;FileSystemEnumerator<>;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Enumeration;FileSystemName;false;TranslateWin32Expression;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorage;false;get_ApplicationIdentity;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorage;false;get_AssemblyIdentity;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorage;false;get_DomainIdentity;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.MemoryMappedFiles;MemoryMappedFile;false;CreateFromFile;(System.IO.FileStream,System.String,System.Int64,System.IO.MemoryMappedFiles.MemoryMappedFileAccess,System.IO.HandleInheritability,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.IO.MemoryMappedFiles;MemoryMappedFile;false;get_SafeMemoryMappedFileHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.MemoryMappedFiles;MemoryMappedViewAccessor;false;get_SafeMemoryMappedViewHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.MemoryMappedFiles;MemoryMappedViewStream;false;get_SafeMemoryMappedViewHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Pipes;AnonymousPipeClientStream;false;AnonymousPipeClientStream;(System.IO.Pipes.PipeDirection,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO.Pipes;AnonymousPipeServerStream;false;AnonymousPipeServerStream;(System.IO.Pipes.PipeDirection,Microsoft.Win32.SafeHandles.SafePipeHandle,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO.Pipes;AnonymousPipeServerStream;false;AnonymousPipeServerStream;(System.IO.Pipes.PipeDirection,Microsoft.Win32.SafeHandles.SafePipeHandle,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO.Pipes;AnonymousPipeServerStream;false;get_ClientSafePipeHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Pipes;NamedPipeClientStream;false;ConnectAsync;(System.Int32,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO.Pipes;NamedPipeClientStream;false;ConnectAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.Pipes;NamedPipeClientStream;false;NamedPipeClientStream;(System.IO.Pipes.PipeDirection,System.Boolean,System.Boolean,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO.Pipes;NamedPipeClientStream;false;NamedPipeClientStream;(System.String,System.String,System.IO.Pipes.PipeDirection,System.IO.Pipes.PipeOptions,System.Security.Principal.TokenImpersonationLevel,System.IO.HandleInheritability);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO.Pipes;NamedPipeServerStream;false;NamedPipeServerStream;(System.IO.Pipes.PipeDirection,System.Boolean,System.Boolean,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO.Pipes;NamedPipeServerStream;false;WaitForConnectionAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | | System.IO.Pipes;PipeStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.IO.Pipes;PipeStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO.Pipes;PipeStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Pipes;PipeStream;false;InitializeHandle;(Microsoft.Win32.SafeHandles.SafePipeHandle,System.Boolean,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | | System.IO.Pipes;PipeStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.IO.Pipes;PipeStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO.Pipes;PipeStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.Pipes;PipeStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO.Pipes;PipeStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO.Pipes;PipeStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Pipes;PipeStream;false;get_SafePipeHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;BinaryReader;false;BinaryReader;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;BinaryReader;false;BinaryReader;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;BinaryReader;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.IO;BinaryReader;false;ReadBytes;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;BinaryReader;false;ReadString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;BinaryReader;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;BinaryWriter;false;BinaryWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;BinaryWriter;false;BinaryWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;BinaryWriter;false;DisposeAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;BinaryWriter;false;Write;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;BinaryWriter;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;BinaryWriter;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;BufferedStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.IO;BufferedStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | | System.IO;BufferedStream;false;CopyTo;(System.IO.Stream,System.Int32);;Argument[Qualifier];Argument[0];taint | | System.IO;BufferedStream;false;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];taint | +| System.IO;BufferedStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;BufferedStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.IO;BufferedStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO;BufferedStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;BufferedStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO;BufferedStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO;BufferedStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;BufferedStream;false;get_UnderlyingStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;Directory;false;CreateDirectory;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;Directory;false;GetParent;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;CreateSubdirectory;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;CreateSubdirectory;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;DirectoryInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;DirectoryInfo;false;EnumerateDirectories;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateDirectories;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateDirectories;(System.String,System.IO.EnumerationOptions);;Argument[1];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateDirectories;(System.String,System.IO.EnumerationOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateDirectories;(System.String,System.IO.SearchOption);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;(System.String,System.IO.EnumerationOptions);;Argument[1];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;(System.String,System.IO.EnumerationOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;(System.String,System.IO.SearchOption);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFiles;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFiles;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFiles;(System.String,System.IO.EnumerationOptions);;Argument[1];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFiles;(System.String,System.IO.EnumerationOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFiles;(System.String,System.IO.SearchOption);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;MoveTo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;DirectoryInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DriveInfo;false;DriveInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;DriveInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DriveInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DriveInfo;false;get_RootDirectory;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DriveInfo;false;get_VolumeLabel;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;ErrorEventArgs;false;ErrorEventArgs;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;ErrorEventArgs;false;GetException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;File;false;AppendAllLinesAsync;(System.String,System.Collections.Generic.IEnumerable,System.Text.Encoding,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint | +| System.IO;File;false;AppendAllLinesAsync;(System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.IO;File;false;AppendAllTextAsync;(System.String,System.String,System.Text.Encoding,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint | +| System.IO;File;false;AppendAllTextAsync;(System.String,System.String,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.IO;File;false;ReadLines;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;File;false;ReadLines;(System.String,System.Text.Encoding);;Argument[0];ReturnValue;generated:taint | +| System.IO;File;false;ReadLines;(System.String,System.Text.Encoding);;Argument[1];ReturnValue;generated:taint | +| System.IO;File;false;WriteAllBytesAsync;(System.String,System.Byte[],System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.IO;File;false;WriteAllLinesAsync;(System.String,System.Collections.Generic.IEnumerable,System.Text.Encoding,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint | +| System.IO;File;false;WriteAllLinesAsync;(System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.IO;File;false;WriteAllTextAsync;(System.String,System.String,System.Text.Encoding,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint | +| System.IO;File;false;WriteAllTextAsync;(System.String,System.String,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.IO;FileInfo;false;CopyTo;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;FileInfo;false;CopyTo;(System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.IO;FileInfo;false;MoveTo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;FileInfo;false;MoveTo;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;FileInfo;false;get_Directory;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileInfo;false;get_DirectoryName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileLoadException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.IO;FileLoadException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileNotFoundException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.IO;FileNotFoundException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileNotFoundException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;FileStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.IO;FileStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | | System.IO;FileStream;false;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];taint | +| System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;FileStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.IO;FileStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;FileStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO;FileStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileStream;false;get_SafeFileHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemEventArgs;false;FileSystemEventArgs;(System.IO.WatcherChangeTypes,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;FileSystemEventArgs;false;FileSystemEventArgs;(System.IO.WatcherChangeTypes,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;FileSystemEventArgs;false;get_FullPath;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemEventArgs;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemInfo;false;get_Extension;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemInfo;true;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemInfo;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemWatcher;false;FileSystemWatcher;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;FileSystemWatcher;false;FileSystemWatcher;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;FileSystemWatcher;false;FileSystemWatcher;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;FileSystemWatcher;false;get_Filter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemWatcher;false;get_Filters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemWatcher;false;get_Path;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemWatcher;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemWatcher;false;set_Filter;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;FileSystemWatcher;false;set_Path;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;FileSystemWatcher;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint | | System.IO;MemoryStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.IO;MemoryStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | | System.IO;MemoryStream;false;CopyTo;(System.IO.Stream,System.Int32);;Argument[Qualifier];Argument[0];taint | | System.IO;MemoryStream;false;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];taint | +| System.IO;MemoryStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;MemoryStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;MemoryStream;false;GetBuffer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;MemoryStream;false;MemoryStream;(System.Byte[]);;Argument[0];ReturnValue;taint | | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Boolean);;Argument[0].Element;ReturnValue;taint | | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | @@ -1135,9 +3100,14 @@ | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Boolean);;Argument[0].Element;ReturnValue;taint | | System.IO;MemoryStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.IO;MemoryStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO;MemoryStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;MemoryStream;false;ToArray;();;Argument[Qualifier];ReturnValue;taint | +| System.IO;MemoryStream;false;TryGetBuffer;(System.ArraySegment);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;MemoryStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO;MemoryStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO;MemoryStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;MemoryStream;false;WriteTo;(System.IO.Stream);;Argument[Qualifier];Argument[0];generated:taint | +| System.IO;Path;false;ChangeExtension;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | | System.IO;Path;false;Combine;(System.String,System.String);;Argument[0];ReturnValue;taint | | System.IO;Path;false;Combine;(System.String,System.String);;Argument[1];ReturnValue;taint | | System.IO;Path;false;Combine;(System.String,System.String,System.String);;Argument[0];ReturnValue;taint | @@ -1161,20 +3131,40 @@ | System.IO;Path;false;GetPathRoot;(System.ReadOnlySpan);;Argument[0].Element;ReturnValue;taint | | System.IO;Path;false;GetPathRoot;(System.String);;Argument[0];ReturnValue;taint | | System.IO;Path;false;GetRelativePath;(System.String,System.String);;Argument[1];ReturnValue;taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[1];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[1];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[2];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[1];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[2];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[3];ReturnValue;generated:taint | +| System.IO;Path;false;TrimEndingDirectorySeparator;(System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System.IO;Path;false;TrimEndingDirectorySeparator;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;RenamedEventArgs;false;RenamedEventArgs;(System.IO.WatcherChangeTypes,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;RenamedEventArgs;false;RenamedEventArgs;(System.IO.WatcherChangeTypes,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO;RenamedEventArgs;false;get_OldFullPath;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;RenamedEventArgs;false;get_OldName;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;Stream;false;CopyTo;(System.IO.Stream);;Argument[Qualifier];Argument[0];taint | | System.IO;Stream;false;CopyToAsync;(System.IO.Stream);;Argument[Qualifier];Argument[0];taint | | System.IO;Stream;false;CopyToAsync;(System.IO.Stream,System.Int32);;Argument[Qualifier];Argument[0];taint | | System.IO;Stream;false;CopyToAsync;(System.IO.Stream,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];taint | +| System.IO;Stream;false;FlushAsync;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;Stream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO;Stream;false;Synchronized;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | | System.IO;Stream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO;Stream;true;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.IO;Stream;true;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | | System.IO;Stream;true;CopyTo;(System.IO.Stream,System.Int32);;Argument[Qualifier];Argument[0];taint | | System.IO;Stream;true;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];taint | +| System.IO;Stream;true;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;Stream;true;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.IO;Stream;true;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;Stream;true;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO;Stream;true;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO;Stream;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;StreamReader;false;Read;();;Argument[Qualifier];ReturnValue;taint | | System.IO;StreamReader;false;Read;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;taint | | System.IO;StreamReader;false;Read;(System.Span);;Argument[Qualifier];ReturnValue;taint | @@ -1188,6 +3178,56 @@ | System.IO;StreamReader;false;ReadLineAsync;();;Argument[Qualifier];ReturnValue;taint | | System.IO;StreamReader;false;ReadToEnd;();;Argument[Qualifier];ReturnValue;taint | | System.IO;StreamReader;false;ReadToEndAsync;();;Argument[Qualifier];ReturnValue;taint | +| System.IO;StreamReader;false;StreamReader;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamReader;false;StreamReader;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Int32,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;StreamReader;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamReader;false;get_CurrentEncoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;FlushAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;StreamWriter;(System.IO.Stream,System.Text.Encoding,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;StreamWriter;(System.IO.Stream,System.Text.Encoding,System.Int32,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;Write;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;Write;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;Write;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;Write;(System.String,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;Write;(System.String,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;Write;(System.String,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;Write;(System.String,System.Object,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;Write;(System.String,System.Object,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;Write;(System.String,System.Object,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;Write;(System.String,System.Object,System.Object,System.Object);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;Write;(System.String,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;Write;(System.String,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteAsync;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteAsync;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteLine;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteLine;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteLine;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteLine;(System.String,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteLine;(System.String,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;WriteLineAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteLineAsync;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteLineAsync;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;WriteLineAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;StringReader;false;Read;();;Argument[Qualifier];ReturnValue;taint | | System.IO;StringReader;false;Read;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;taint | | System.IO;StringReader;false;Read;(System.Span);;Argument[Qualifier];ReturnValue;taint | @@ -1201,6 +3241,40 @@ | System.IO;StringReader;false;ReadToEnd;();;Argument[Qualifier];ReturnValue;taint | | System.IO;StringReader;false;ReadToEndAsync;();;Argument[Qualifier];ReturnValue;taint | | System.IO;StringReader;false;StringReader;(System.String);;Argument[0];ReturnValue;taint | +| System.IO;StringWriter;false;FlushAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;GetStringBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;StringWriter;(System.Text.StringBuilder,System.IFormatProvider);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;Write;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;Write;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;Write;(System.Text.StringBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteLine;(System.Text.StringBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextReader;false;Synchronized;(System.IO.TextReader);;Argument[0];ReturnValue;generated:taint | | System.IO;TextReader;true;Read;();;Argument[Qualifier];ReturnValue;taint | | System.IO;TextReader;true;Read;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;taint | | System.IO;TextReader;true;Read;(System.Span);;Argument[Qualifier];ReturnValue;taint | @@ -1214,10 +3288,593 @@ | System.IO;TextReader;true;ReadLineAsync;();;Argument[Qualifier];ReturnValue;taint | | System.IO;TextReader;true;ReadToEnd;();;Argument[Qualifier];ReturnValue;taint | | System.IO;TextReader;true;ReadToEndAsync;();;Argument[Qualifier];ReturnValue;taint | +| System.IO;TextWriter;false;Synchronized;(System.IO.TextWriter);;Argument[0];ReturnValue;generated:taint | +| System.IO;TextWriter;false;TextWriter;(System.IFormatProvider);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;false;WriteAsync;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;false;WriteAsync;(System.Char[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.IO;TextWriter;false;WriteAsync;(System.Char[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;false;WriteLineAsync;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;false;WriteLineAsync;(System.Char[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.IO;TextWriter;false;WriteLineAsync;(System.Char[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;FlushAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;Write;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object,System.Object);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.Text.StringBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;get_FormatProvider;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;get_NewLine;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;set_NewLine;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryAccessor;false;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryAccessor;false;UnmanagedMemoryAccessor;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryAccessor;false;UnmanagedMemoryAccessor;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;UnmanagedMemoryStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;UnmanagedMemoryStream;false;Initialize;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryStream;false;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint | | System.IO;UnmanagedMemoryStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.IO;UnmanagedMemoryStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO;UnmanagedMemoryStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Byte*,System.Int64);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint | | System.IO;UnmanagedMemoryStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO;UnmanagedMemoryStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO;UnmanagedMemoryStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;UnmanagedMemoryStream;false;get_PositionPointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;BinaryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;BinaryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;BinaryExpression;false;Reduce;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;BinaryExpression;false;Update;(System.Linq.Expressions.Expression,System.Linq.Expressions.LambdaExpression,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;BinaryExpression;false;get_Conversion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;BinaryExpression;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;BlockExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;BlockExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;BlockExpression;false;Update;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;BlockExpression;false;get_Expressions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;BlockExpression;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;BlockExpression;false;get_Variables;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;CatchBlock;false;Update;(System.Linq.Expressions.ParameterExpression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;ConditionalExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;ConditionalExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;ConditionalExpression;false;Update;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;ConditionalExpression;false;get_IfFalse;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;ConstantExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;ConstantExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;DebugInfoExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;DebugInfoExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;DefaultExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;DefaultExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Rewrite;(System.Linq.Expressions.Expression[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;DynamicExpression;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpressionVisitor;false;VisitDynamic;(System.Linq.Expressions.DynamicExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ElementInit;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ArrayAccess;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ArrayIndex;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Bind;(System.Reflection.MemberInfo,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Bind;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Type,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Type,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Coalesce;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Condition;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Condition;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Field;(System.Linq.Expressions.Expression,System.Reflection.FieldInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Field;(System.Linq.Expressions.Expression,System.Type,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GetActionType;(System.Type[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GetFuncType;(System.Type[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;IfThenElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Invoke;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Lambda<>;(System.Linq.Expressions.Expression,System.Boolean,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Lambda<>;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Lambda<>;(System.Linq.Expressions.Expression,System.String,System.Boolean,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Lambda<>;(System.Linq.Expressions.Expression,System.String,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[5];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeIndex;(System.Linq.Expressions.Expression,System.Reflection.PropertyInfo,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeMemberAccess;(System.Linq.Expressions.Expression,System.Reflection.MemberInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;New;(System.Reflection.ConstructorInfo,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;New;(System.Reflection.ConstructorInfo,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;New;(System.Reflection.ConstructorInfo,System.Collections.Generic.IEnumerable,System.Reflection.MemberInfo[]);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;PowerAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;PowerAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;PowerAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Property;(System.Linq.Expressions.Expression,System.Reflection.PropertyInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Property;(System.Linq.Expressions.Expression,System.Reflection.PropertyInfo,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Property;(System.Linq.Expressions.Expression,System.Type,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ReduceAndCheck;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ReduceExtensions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;TryGetActionType;(System.Type[],System.Type);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;TryGetFuncType;(System.Type[],System.Type);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;true;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;Expression;true;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;true;Reduce;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;Expression;true;VisitChildren;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;Expression;true;VisitChildren;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression<>;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;Expression<>;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression<>;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;false;Visit;(System.Collections.ObjectModel.ReadOnlyCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;false;Visit;(System.Collections.ObjectModel.ReadOnlyCollection);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;false;VisitAndConvert<>;(System.Collections.ObjectModel.ReadOnlyCollection,System.String);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;false;VisitAndConvert<>;(System.Collections.ObjectModel.ReadOnlyCollection,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;false;VisitAndConvert<>;(T,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;false;VisitAndConvert<>;(T,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;Visit;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;Visit;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitBinary;(System.Linq.Expressions.BinaryExpression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitBinary;(System.Linq.Expressions.BinaryExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitBlock;(System.Linq.Expressions.BlockExpression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitBlock;(System.Linq.Expressions.BlockExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitCatchBlock;(System.Linq.Expressions.CatchBlock);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitConditional;(System.Linq.Expressions.ConditionalExpression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitConditional;(System.Linq.Expressions.ConditionalExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitConstant;(System.Linq.Expressions.ConstantExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitDebugInfo;(System.Linq.Expressions.DebugInfoExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitDefault;(System.Linq.Expressions.DefaultExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitDynamic;(System.Linq.Expressions.DynamicExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitElementInit;(System.Linq.Expressions.ElementInit);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitExtension;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitExtension;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitGoto;(System.Linq.Expressions.GotoExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitIndex;(System.Linq.Expressions.IndexExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitInvocation;(System.Linq.Expressions.InvocationExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitLabel;(System.Linq.Expressions.LabelExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitLabelTarget;(System.Linq.Expressions.LabelTarget);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitLambda<>;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitLambda<>;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitListInit;(System.Linq.Expressions.ListInitExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitLoop;(System.Linq.Expressions.LoopExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMember;(System.Linq.Expressions.MemberExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberAssignment;(System.Linq.Expressions.MemberAssignment);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberAssignment;(System.Linq.Expressions.MemberAssignment);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberBinding;(System.Linq.Expressions.MemberBinding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberBinding;(System.Linq.Expressions.MemberBinding);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberInit;(System.Linq.Expressions.MemberInitExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberListBinding;(System.Linq.Expressions.MemberListBinding);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberMemberBinding;(System.Linq.Expressions.MemberMemberBinding);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMethodCall;(System.Linq.Expressions.MethodCallExpression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMethodCall;(System.Linq.Expressions.MethodCallExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitNew;(System.Linq.Expressions.NewExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitNewArray;(System.Linq.Expressions.NewArrayExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitParameter;(System.Linq.Expressions.ParameterExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitRuntimeVariables;(System.Linq.Expressions.RuntimeVariablesExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitSwitch;(System.Linq.Expressions.SwitchExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitSwitchCase;(System.Linq.Expressions.SwitchCase);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitTry;(System.Linq.Expressions.TryExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitTypeBinary;(System.Linq.Expressions.TypeBinaryExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitUnary;(System.Linq.Expressions.UnaryExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;GotoExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;GotoExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;GotoExpression;false;Update;(System.Linq.Expressions.LabelTarget,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;IndexExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;IndexExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;IndexExpression;false;GetArgument;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;IndexExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;IndexExpression;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;InvocationExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;InvocationExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;InvocationExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;LabelExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;LabelExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;LabelExpression;false;Update;(System.Linq.Expressions.LabelTarget,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;LambdaExpression;false;get_Body;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;LambdaExpression;false;get_Parameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;ListInitExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;ListInitExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;ListInitExpression;false;Reduce;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;ListInitExpression;false;Update;(System.Linq.Expressions.NewExpression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;LoopExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;LoopExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;LoopExpression;false;Update;(System.Linq.Expressions.LabelTarget,System.Linq.Expressions.LabelTarget,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MemberAssignment;false;Update;(System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MemberAssignment;false;get_Expression;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;MemberExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;MemberExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;MemberExpression;false;Update;(System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MemberExpression;false;get_Member;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;MemberInitExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;MemberInitExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;MemberInitExpression;false;Reduce;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MemberInitExpression;false;Update;(System.Linq.Expressions.NewExpression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MemberListBinding;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MemberMemberBinding;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MethodCallExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;MethodCallExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;MethodCallExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MethodCallExpression;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;MethodCallExpression;false;get_Object;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;NewArrayExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;NewArrayExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;NewArrayExpression;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;NewExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;NewExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;NewExpression;false;GetArgument;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;NewExpression;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;NewExpression;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;ParameterExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;ParameterExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;RuntimeVariablesExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;RuntimeVariablesExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;RuntimeVariablesExpression;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;SwitchCase;false;Update;(System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;SwitchExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;SwitchExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;SwitchExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;TryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;TryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;TryExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;TypeBinaryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;TypeBinaryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;TypeBinaryExpression;false;Update;(System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;UnaryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;UnaryExpression;false;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;UnaryExpression;false;Reduce;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;UnaryExpression;false;Update;(System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | | System.Linq;Enumerable;false;Aggregate<,,>;(System.Collections.Generic.IEnumerable,TAccumulate,System.Func,System.Func);;Argument[0].Element;Argument[2].Parameter[1];value | | System.Linq;Enumerable;false;Aggregate<,,>;(System.Collections.Generic.IEnumerable,TAccumulate,System.Func,System.Func);;Argument[1];Argument[2].Parameter[0];value | | System.Linq;Enumerable;false;Aggregate<,,>;(System.Collections.Generic.IEnumerable,TAccumulate,System.Func,System.Func);;Argument[2].ReturnValue;Argument[3].Parameter[0];value | @@ -1229,6 +3886,7 @@ | System.Linq;Enumerable;false;Aggregate<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[1].ReturnValue;ReturnValue;value | | System.Linq;Enumerable;false;All<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;Any<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | +| System.Linq;Enumerable;false;Append<>;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue;generated:taint | | System.Linq;Enumerable;false;AsEnumerable<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;Enumerable;false;Average<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;Average<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | @@ -1346,6 +4004,8 @@ | System.Linq;Enumerable;false;OrderByDescending<,>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;Enumerable;false;OrderByDescending<,>;(System.Collections.Generic.IEnumerable,System.Func,System.Collections.Generic.IComparer);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;OrderByDescending<,>;(System.Collections.Generic.IEnumerable,System.Func,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue.Element;value | +| System.Linq;Enumerable;false;Prepend<>;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue;generated:taint | +| System.Linq;Enumerable;false;Repeat<>;(TResult,System.Int32);;Argument[0];ReturnValue;generated:taint | | System.Linq;Enumerable;false;Reverse<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;Enumerable;false;Select<,>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;Select<,>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[1].ReturnValue;ReturnValue.Element;value | @@ -1370,6 +4030,7 @@ | System.Linq;Enumerable;false;SingleOrDefault<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;SingleOrDefault<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;ReturnValue;value | | System.Linq;Enumerable;false;Skip<>;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System.Linq;Enumerable;false;SkipLast<>;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;Enumerable;false;SkipWhile<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;SkipWhile<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;Enumerable;false;SkipWhile<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | @@ -1385,6 +4046,7 @@ | System.Linq;Enumerable;false;Sum<>;(System.Collections.Generic.IEnumerable,System.Func>);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;Sum<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;Take<>;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System.Linq;Enumerable;false;TakeLast<>;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;Enumerable;false;TakeWhile<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;TakeWhile<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;Enumerable;false;TakeWhile<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | @@ -1430,14 +4092,28 @@ | System.Linq;Enumerable;false;Zip<,,>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[2].Parameter[0];value | | System.Linq;Enumerable;false;Zip<,,>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func);;Argument[1].Element;Argument[2].Parameter[1];value | | System.Linq;Enumerable;false;Zip<,,>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func);;Argument[2].ReturnValue;ReturnValue.Element;value | +| System.Linq;EnumerableExecutor<>;false;EnumerableExecutor;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq;EnumerableQuery<>;false;CreateQuery<>;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq;EnumerableQuery<>;false;EnumerableQuery;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Linq;EnumerableQuery<>;false;EnumerableQuery;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint | | System.Linq;EnumerableQuery<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Linq;EnumerableQuery<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Linq;EnumerableQuery<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq;EnumerableQuery<>;false;get_Expression;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq;EnumerableQuery<>;false;get_Provider;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq;ImmutableArrayExtensions;false;ElementAt<>;(System.Collections.Immutable.ImmutableArray,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ImmutableArrayExtensions;false;ElementAtOrDefault<>;(System.Collections.Immutable.ImmutableArray,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ImmutableArrayExtensions;false;First<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;ImmutableArrayExtensions;false;First<>;(System.Collections.Immutable.ImmutableArray+Builder);;Argument[0].Element;ReturnValue;value | +| System.Linq;ImmutableArrayExtensions;false;FirstOrDefault<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;ImmutableArrayExtensions;false;FirstOrDefault<>;(System.Collections.Immutable.ImmutableArray+Builder);;Argument[0].Element;ReturnValue;value | +| System.Linq;ImmutableArrayExtensions;false;Last<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;ImmutableArrayExtensions;false;Last<>;(System.Collections.Immutable.ImmutableArray+Builder);;Argument[0].Element;ReturnValue;value | | System.Linq;ImmutableArrayExtensions;false;LastOrDefault<>;(System.Collections.Immutable.ImmutableArray+Builder);;Argument[0].Element;ReturnValue;value | +| System.Linq;ImmutableArrayExtensions;false;Single<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;Lookup<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Linq;Lookup<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Linq;Lookup<,>;false;get_Item;(TKey);;Argument[Qualifier];ReturnValue;generated:taint | | System.Linq;OrderedParallelQuery<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Linq;ParallelEnumerable;false;Aggregate<,,>;(System.Linq.ParallelQuery,TAccumulate,System.Func,System.Func);;Argument[0].Element;Argument[2].Parameter[1];value | | System.Linq;ParallelEnumerable;false;Aggregate<,,>;(System.Linq.ParallelQuery,TAccumulate,System.Func,System.Func);;Argument[1];Argument[2].Parameter[0];value | @@ -1451,6 +4127,13 @@ | System.Linq;ParallelEnumerable;false;All<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Any<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;AsEnumerable<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue.Element;value | +| System.Linq;ParallelEnumerable;false;AsOrdered;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;AsOrdered<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;AsParallel;(System.Collections.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;AsParallel<>;(System.Collections.Concurrent.Partitioner);;Argument[0];ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;AsParallel<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;AsSequential<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;AsUnordered<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;ParallelEnumerable;false;Average<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Average<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Average<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | @@ -1595,6 +4278,7 @@ | System.Linq;ParallelEnumerable;false;OrderByDescending<,>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;ParallelEnumerable;false;OrderByDescending<,>;(System.Linq.ParallelQuery,System.Func,System.Collections.Generic.IComparer);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;OrderByDescending<,>;(System.Linq.ParallelQuery,System.Func,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue.Element;value | +| System.Linq;ParallelEnumerable;false;Repeat<>;(TResult,System.Int32);;Argument[0];ReturnValue;generated:taint | | System.Linq;ParallelEnumerable;false;Reverse<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;ParallelEnumerable;false;Select<,>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Select<,>;(System.Linq.ParallelQuery,System.Func);;Argument[1].ReturnValue;ReturnValue.Element;value | @@ -1680,6 +4364,10 @@ | System.Linq;ParallelEnumerable;false;Where<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;ParallelEnumerable;false;Where<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Where<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;ReturnValue.Element;value | +| System.Linq;ParallelEnumerable;false;WithCancellation<>;(System.Linq.ParallelQuery,System.Threading.CancellationToken);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;WithDegreeOfParallelism<>;(System.Linq.ParallelQuery,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;WithExecutionMode<>;(System.Linq.ParallelQuery,System.Linq.ParallelExecutionMode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;WithMergeOptions<>;(System.Linq.ParallelQuery,System.Linq.ParallelMergeOptions);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;ParallelEnumerable;false;Zip<,,>;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[2].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Zip<,,>;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable,System.Func);;Argument[1].Element;Argument[2].Parameter[1];value | | System.Linq;ParallelEnumerable;false;Zip<,,>;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable,System.Func);;Argument[2].ReturnValue;ReturnValue.Element;value | @@ -1856,12 +4544,218 @@ | System.Linq;Queryable;false;Zip<,,>;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[0].Element;Argument[2].Parameter[0];value | | System.Linq;Queryable;false;Zip<,,>;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[1].Element;Argument[2].Parameter[1];value | | System.Linq;Queryable;false;Zip<,,>;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[2].ReturnValue;ReturnValue.Element;value | +| System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.DateTime);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan,System.TimeSpan);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan,System.TimeSpan);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan,System.TimeSpan,System.DateTime);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;get_CacheSyncDate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;get_MaxAge;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;get_MaxStale;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;get_MinFresh;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;AuthenticationHeaderValue;false;AuthenticationHeaderValue;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;AuthenticationHeaderValue;false;AuthenticationHeaderValue;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;AuthenticationHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;AuthenticationHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;AuthenticationHeaderValue;false;get_Parameter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;AuthenticationHeaderValue;false;get_Scheme;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;get_MaxAge;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;get_MaxStaleLimit;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;get_MinFresh;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;get_SharedMaxAge;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;set_MaxAge;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;set_MaxStaleLimit;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;set_MinFresh;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;set_SharedMaxAge;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;ContentDispositionHeaderValue;(System.Net.Http.Headers.ContentDispositionHeaderValue);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;ContentDispositionHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;get_DispositionType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;get_FileNameStar;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;set_DispositionType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;get_From;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;get_Length;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;get_To;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;get_Unit;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;set_Unit;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;EntityTagHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;EntityTagHeaderValue;false;EntityTagHeaderValue;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;EntityTagHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;EntityTagHeaderValue;false;get_Tag;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Net.Http.Headers;HttpHeaderValueCollection<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Net.Http.Headers;HttpHeaderValueCollection<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Net.Http.Headers;HttpHeaderValueCollection<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Net.Http.Headers;HttpHeaderValueCollection<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Net.Http.Headers;HttpHeaders;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Net.Http.Headers;HttpHeaders;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Net.Http.Headers;HttpResponseHeaders;false;get_AcceptRanges;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;HttpResponseHeaders;false;get_ProxyAuthenticate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;HttpResponseHeaders;false;get_Server;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;HttpResponseHeaders;false;get_Vary;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;HttpResponseHeaders;false;get_WwwAuthenticate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;MediaTypeHeaderValue;(System.Net.Http.Headers.MediaTypeHeaderValue);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;MediaTypeHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.MediaTypeHeaderValue);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;get_CharSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;get_MediaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;set_MediaType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;MediaTypeWithQualityHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.MediaTypeWithQualityHeaderValue);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;NameValueHeaderValue;(System.Net.Http.Headers.NameValueHeaderValue);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;NameValueHeaderValue;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;NameValueHeaderValue;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;NameValueWithParametersHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductHeaderValue;false;ProductHeaderValue;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ProductHeaderValue;false;ProductHeaderValue;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ProductHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductHeaderValue;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductHeaderValue;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;Parse;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;ProductInfoHeaderValue;(System.Net.Http.Headers.ProductHeaderValue);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;ProductInfoHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.ProductInfoHeaderValue);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;get_Comment;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;get_Product;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeConditionHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeConditionHeaderValue;false;RangeConditionHeaderValue;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RangeConditionHeaderValue;false;RangeConditionHeaderValue;(System.Net.Http.Headers.EntityTagHeaderValue);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RangeConditionHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeConditionHeaderValue;false;get_Date;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeConditionHeaderValue;false;get_EntityTag;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeHeaderValue;false;get_Unit;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeHeaderValue;false;set_Unit;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RangeItemHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeItemHeaderValue;false;RangeItemHeaderValue;(System.Nullable,System.Nullable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RangeItemHeaderValue;false;RangeItemHeaderValue;(System.Nullable,System.Nullable);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RangeItemHeaderValue;false;get_From;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeItemHeaderValue;false;get_To;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RetryConditionHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RetryConditionHeaderValue;false;RetryConditionHeaderValue;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RetryConditionHeaderValue;false;RetryConditionHeaderValue;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RetryConditionHeaderValue;false;get_Date;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RetryConditionHeaderValue;false;get_Delta;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;StringWithQualityHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;StringWithQualityHeaderValue;false;StringWithQualityHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;StringWithQualityHeaderValue;false;StringWithQualityHeaderValue;(System.String,System.Double);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;StringWithQualityHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;StringWithQualityHeaderValue;false;get_Quality;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;StringWithQualityHeaderValue;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;TransferCodingHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;TransferCodingHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;TransferCodingHeaderValue;false;TransferCodingHeaderValue;(System.Net.Http.Headers.TransferCodingHeaderValue);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;TransferCodingHeaderValue;false;TransferCodingHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;TransferCodingHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.TransferCodingHeaderValue);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Headers;TransferCodingHeaderValue;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;TransferCodingWithQualityHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.TransferCodingWithQualityHeaderValue);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;ViaHeaderValue;(System.String,System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;ViaHeaderValue;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;ViaHeaderValue;(System.String,System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;ViaHeaderValue;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;get_Comment;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;get_ProtocolName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;get_ProtocolVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;get_ReceivedBy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String,System.DateTimeOffset);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String,System.DateTimeOffset);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String,System.DateTimeOffset);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;get_Agent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;get_Date;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Json;JsonContent;false;Create;(System.Object,System.Type,System.Net.Http.Headers.MediaTypeHeaderValue,System.Text.Json.JsonSerializerOptions);;Argument[3];ReturnValue;generated:taint | +| System.Net.Http.Json;JsonContent;false;Create<>;(T,System.Net.Http.Headers.MediaTypeHeaderValue,System.Text.Json.JsonSerializerOptions);;Argument[2];ReturnValue;generated:taint | +| System.Net.Http.Json;JsonContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Json;JsonContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http.Json;JsonContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;ByteArrayContent;false;ByteArrayContent;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Http;ByteArrayContent;false;ByteArrayContent;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Http;ByteArrayContent;false;CreateContentReadStream;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;ByteArrayContent;false;CreateContentReadStreamAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStream;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;DelegatingHandler;false;DelegatingHandler;(System.Net.Http.HttpMessageHandler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;DelegatingHandler;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Http;DelegatingHandler;false;get_InnerHandler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;DelegatingHandler;false;set_InnerHandler;(System.Net.Http.HttpMessageHandler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;FormUrlEncodedContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;FormUrlEncodedContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.Net.Http;FormUrlEncodedContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;FormUrlEncodedContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpClient;false;Send;(System.Net.Http.HttpRequestMessage);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;Send;(System.Net.Http.HttpRequestMessage,System.Net.Http.HttpCompletionOption);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;Send;(System.Net.Http.HttpRequestMessage,System.Net.Http.HttpCompletionOption,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;Send;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;SendAsync;(System.Net.Http.HttpRequestMessage);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Net.Http.HttpCompletionOption);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Net.Http.HttpCompletionOption,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;get_BaseAddress;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpClient;false;get_DefaultRequestVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpClient;false;get_Timeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpClient;false;set_BaseAddress;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpClient;false;set_DefaultRequestVersion;(System.Version);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpClient;false;set_Timeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpClientHandler;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;false;CopyTo;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpContent;false;CopyToAsync;(System.IO.Stream);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpContent;false;CopyToAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpContent;false;CopyToAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpContent;false;CopyToAsync;(System.IO.Stream,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpContent;false;ReadAsStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;false;ReadAsStream;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;false;ReadAsStreamAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;false;ReadAsStreamAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;true;CreateContentReadStream;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;true;CreateContentReadStreamAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;true;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;true;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpContent;true;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpMessageInvoker;false;HttpMessageInvoker;(System.Net.Http.HttpMessageHandler,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpMessageInvoker;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Http;HttpMethod;false;HttpMethod;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpMethod;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpMethod;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpRequestMessage;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpRequestMessage;false;get_Content;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpRequestMessage;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpRequestMessage;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpRequestMessage;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpRequestMessage;false;set_Content;(System.Net.Http.HttpContent);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpRequestMessage;false;set_Method;(System.Net.Http.HttpMethod);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpRequestMessage;false;set_RequestUri;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpRequestMessage;false;set_Version;(System.Version);;Argument[0];Argument[Qualifier];generated:taint | | System.Net.Http;HttpRequestOptions;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Net.Http;HttpRequestOptions;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Net.Http;HttpRequestOptions;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0];Argument[Qualifier].Element;value | @@ -1875,15 +4769,212 @@ | System.Net.Http;HttpRequestOptions;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Net.Http;HttpRequestOptions;false;set_Item;(System.String,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Net.Http;HttpRequestOptions;false;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Net.Http;HttpResponseMessage;false;EnsureSuccessStatusCode;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Net.Http;HttpResponseMessage;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpResponseMessage;false;get_ReasonPhrase;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpResponseMessage;false;get_RequestMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpResponseMessage;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpResponseMessage;false;set_Content;(System.Net.Http.HttpContent);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpResponseMessage;false;set_ReasonPhrase;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpResponseMessage;false;set_RequestMessage;(System.Net.Http.HttpRequestMessage);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpResponseMessage;false;set_Version;(System.Version);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;MessageProcessingHandler;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | | System.Net.Http;MultipartContent;false;Add;(System.Net.Http.HttpContent);;Argument[0];Argument[Qualifier].Element;value | +| System.Net.Http;MultipartContent;false;CreateContentReadStream;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;MultipartContent;false;CreateContentReadStreamAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.Net.Http;MultipartContent;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Net.Http;MultipartContent;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Net.Http;MultipartContent;false;MultipartContent;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http;MultipartContent;false;SerializeToStream;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;MultipartContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;MultipartContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;MultipartContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;MultipartContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.Net.Http;MultipartFormDataContent;false;Add;(System.Net.Http.HttpContent);;Argument[0];Argument[Qualifier].Element;value | +| System.Net.Http;MultipartFormDataContent;false;Add;(System.Net.Http.HttpContent,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;MultipartFormDataContent;false;Add;(System.Net.Http.HttpContent,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;MultipartFormDataContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;MultipartFormDataContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;MultipartFormDataContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;ReadOnlyMemoryContent;false;CreateContentReadStream;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;ReadOnlyMemoryContent;false;CreateContentReadStreamAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;ReadOnlyMemoryContent;false;ReadOnlyMemoryContent;(System.ReadOnlyMemory);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;ReadOnlyMemoryContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;ReadOnlyMemoryContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;ReadOnlyMemoryContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpConnectionContext;false;get_DnsEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpConnectionContext;false;get_InitialRequestMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_ConnectCallback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_ConnectTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_CookieContainer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_DefaultProxyCredentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_Expect100ContinueTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_KeepAlivePingDelay;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_KeepAlivePingTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_PlaintextStreamFilter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_PooledConnectionIdleTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_PooledConnectionLifetime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_Proxy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_RequestHeaderEncodingSelector;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_ResponseDrainTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_ResponseHeaderEncodingSelector;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_SslOptions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_ConnectTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_CookieContainer;(System.Net.CookieContainer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_DefaultProxyCredentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_Expect100ContinueTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_KeepAlivePingDelay;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_KeepAlivePingTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_PooledConnectionIdleTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_PooledConnectionLifetime;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_ResponseDrainTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_SslOptions;(System.Net.Security.SslClientAuthenticationOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpPlaintextStreamFilterContext;false;get_InitialRequestMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpPlaintextStreamFilterContext;false;get_NegotiatedHttpVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpPlaintextStreamFilterContext;false;get_PlaintextStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;StreamContent;false;CreateContentReadStream;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStream;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;StreamContent;false;StreamContent;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;StreamContent;false;StreamContent;(System.IO.Stream,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;StringContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;StringContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.Net.Http;StringContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;StringContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;AlternateView;false;CreateAlternateViewFromString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;AlternateView;false;CreateAlternateViewFromString;(System.String,System.Net.Mime.ContentType);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;AlternateView;false;CreateAlternateViewFromString;(System.String,System.Net.Mime.ContentType);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;AlternateView;false;CreateAlternateViewFromString;(System.String,System.Text.Encoding,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;AlternateView;false;get_BaseUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;AlternateViewCollection;false;InsertItem;(System.Int32,System.Net.Mail.AlternateView);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;AlternateViewCollection;false;SetItem;(System.Int32,System.Net.Mail.AlternateView);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.IO.Stream,System.Net.Mime.ContentType);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.IO.Stream,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.IO.Stream,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.String,System.Net.Mime.ContentType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.String,System.Net.Mime.ContentType);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.Net.Mime.ContentType);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.Net.Mime.ContentType);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.String,System.Text.Encoding,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.String,System.Text.Encoding,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;get_ContentDisposition;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;get_NameEncoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;set_NameEncoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.IO.Stream,System.Net.Mime.ContentType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.IO.Stream,System.Net.Mime.ContentType);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.IO.Stream,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.String,System.Net.Mime.ContentType);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentBase;false;get_ContentId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;AttachmentBase;false;get_ContentStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;AttachmentBase;false;set_ContentType;(System.Net.Mime.ContentType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentCollection;false;InsertItem;(System.Int32,System.Net.Mail.Attachment);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentCollection;false;SetItem;(System.Int32,System.Net.Mail.Attachment);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;LinkedResource;false;CreateLinkedResourceFromString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;LinkedResource;false;CreateLinkedResourceFromString;(System.String,System.Net.Mime.ContentType);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;LinkedResource;false;CreateLinkedResourceFromString;(System.String,System.Net.Mime.ContentType);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;LinkedResource;false;CreateLinkedResourceFromString;(System.String,System.Text.Encoding,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;LinkedResource;false;get_ContentLink;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;LinkedResourceCollection;false;InsertItem;(System.Int32,System.Net.Mail.LinkedResource);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;LinkedResourceCollection;false;SetItem;(System.Int32,System.Net.Mail.LinkedResource);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailAddress;false;MailAddress;(System.String,System.String,System.Text.Encoding);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailAddress;false;MailAddress;(System.String,System.String,System.Text.Encoding);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailAddress;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);;Argument[2];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;get_Address;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;get_User;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Net.Mail;MailAddressCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier].Element;value | +| System.Net.Mail;MailAddressCollection;false;InsertItem;(System.Int32,System.Net.Mail.MailAddress);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailAddressCollection;false;SetItem;(System.Int32,System.Net.Mail.MailAddress);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailAddressCollection;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;MailMessage;(System.Net.Mail.MailAddress,System.Net.Mail.MailAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;MailMessage;(System.String,System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;MailMessage;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;get_Body;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_BodyEncoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_From;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_HeadersEncoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_ReplyTo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_Sender;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_Subject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_SubjectEncoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;set_Body;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_BodyEncoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_From;(System.Net.Mail.MailAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_HeadersEncoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_ReplyTo;(System.Net.Mail.MailAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_Sender;(System.Net.Mail.MailAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_Subject;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_SubjectEncoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;Send;(System.Net.Mail.MailMessage);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;Send;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendAsync;(System.Net.Mail.MailMessage,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendAsync;(System.String,System.String,System.String,System.String,System.Object);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendMailAsync;(System.Net.Mail.MailMessage);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendMailAsync;(System.Net.Mail.MailMessage,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendMailAsync;(System.Net.Mail.MailMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;SmtpClient;false;SendMailAsync;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendMailAsync;(System.String,System.String,System.String,System.String,System.Threading.CancellationToken);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendMailAsync;(System.String,System.String,System.String,System.String,System.Threading.CancellationToken);;Argument[4];ReturnValue;generated:taint | +| System.Net.Mail;SmtpClient;false;SmtpClient;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SmtpClient;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;SmtpClient;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;SmtpClient;false;get_PickupDirectoryLocation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;SmtpClient;false;get_TargetName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;SmtpClient;false;set_Credentials;(System.Net.ICredentialsByHost);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;set_Host;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;set_PickupDirectoryLocation;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;set_TargetName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Mail;SmtpFailedRecipientException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Mail;SmtpFailedRecipientException;false;SmtpFailedRecipientException;(System.Net.Mail.SmtpStatusCode,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpFailedRecipientException;false;SmtpFailedRecipientException;(System.Net.Mail.SmtpStatusCode,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpFailedRecipientException;false;SmtpFailedRecipientException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpFailedRecipientException;false;SmtpFailedRecipientException;(System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpFailedRecipientException;false;get_FailedRecipient;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;SmtpFailedRecipientsException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Mail;SmtpFailedRecipientsException;false;SmtpFailedRecipientsException;(System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpFailedRecipientsException;false;SmtpFailedRecipientsException;(System.String,System.Net.Mail.SmtpFailedRecipientException[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpFailedRecipientsException;false;get_InnerExceptions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentDisposition;false;ContentDisposition;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mime;ContentDisposition;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentDisposition;false;get_DispositionType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentDisposition;false;set_DispositionType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mime;ContentType;false;ContentType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mime;ContentType;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentType;false;get_Boundary;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentType;false;get_CharSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentType;false;get_MediaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentType;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentType;false;get_Parameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentType;false;set_MediaType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Net.NetworkInformation;GatewayIPAddressInformationCollection;false;Add;(System.Net.NetworkInformation.GatewayIPAddressInformation);;Argument[0];Argument[Qualifier].Element;value | | System.Net.NetworkInformation;GatewayIPAddressInformationCollection;false;CopyTo;(System.Net.NetworkInformation.GatewayIPAddressInformation[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Net.NetworkInformation;GatewayIPAddressInformationCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Net.NetworkInformation;GatewayIPAddressInformationCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Net.NetworkInformation;GatewayIPAddressInformationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | | System.Net.NetworkInformation;IPAddressCollection;false;Add;(System.Net.IPAddress);;Argument[0];Argument[Qualifier].Element;value | | System.Net.NetworkInformation;IPAddressCollection;false;CopyTo;(System.Net.IPAddress[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Net.NetworkInformation;IPAddressCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | @@ -1892,114 +4983,1405 @@ | System.Net.NetworkInformation;IPAddressInformationCollection;false;CopyTo;(System.Net.NetworkInformation.IPAddressInformation[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Net.NetworkInformation;IPAddressInformationCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Net.NetworkInformation;IPAddressInformationCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Net.NetworkInformation;IPAddressInformationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | | System.Net.NetworkInformation;MulticastIPAddressInformationCollection;false;Add;(System.Net.NetworkInformation.MulticastIPAddressInformation);;Argument[0];Argument[Qualifier].Element;value | | System.Net.NetworkInformation;MulticastIPAddressInformationCollection;false;CopyTo;(System.Net.NetworkInformation.MulticastIPAddressInformation[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Net.NetworkInformation;MulticastIPAddressInformationCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Net.NetworkInformation;MulticastIPAddressInformationCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Net.NetworkInformation;MulticastIPAddressInformationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.NetworkInformation;PhysicalAddress;false;PhysicalAddress;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Net.NetworkInformation;UnicastIPAddressInformationCollection;false;Add;(System.Net.NetworkInformation.UnicastIPAddressInformation);;Argument[0];Argument[Qualifier].Element;value | | System.Net.NetworkInformation;UnicastIPAddressInformationCollection;false;CopyTo;(System.Net.NetworkInformation.UnicastIPAddressInformation[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Net.NetworkInformation;UnicastIPAddressInformationCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Net.NetworkInformation;UnicastIPAddressInformationCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Net.NetworkInformation;UnicastIPAddressInformationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;AuthenticatedStream;false;AuthenticatedStream;(System.IO.Stream,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Security;AuthenticatedStream;false;DisposeAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;AuthenticatedStream;false;get_InnerStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsServer;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsServer;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsServerAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsServerAsync;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy);;Argument[0];Argument[Qualifier];generated:taint | | System.Net.Security;NegotiateStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.Net.Security;NegotiateStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | +| System.Net.Security;NegotiateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.Net.Security;NegotiateStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.Net.Security;NegotiateStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.Net.Security;NegotiateStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.Net.Security;NegotiateStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;get_RemoteIdentity;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslApplicationProtocol;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslApplicationProtocol;false;get_Protocol;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Net.Security;SslStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.Net.Security;SslStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | +| System.Net.Security;SslStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Security;SslStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.Net.Security;SslStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.Net.Security;SslStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.Net.Security;SslStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslStream;false;Write;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Net.Security;SslStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.Net.Security;SslStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.Net.Security;SslStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslStream;false;get_LocalCertificate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslStream;false;get_NegotiatedApplicationProtocol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslStream;false;get_RemoteCertificate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslStream;false;get_TransportContext;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslStreamCertificateContext;false;Create;(System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;IPPacketInformation;false;get_Address;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;IPv6MulticastOption;false;IPv6MulticastOption;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;IPv6MulticastOption;false;IPv6MulticastOption;(System.Net.IPAddress,System.Int64);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;IPv6MulticastOption;false;get_Group;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;IPv6MulticastOption;false;set_Group;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;MulticastOption;false;MulticastOption;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;MulticastOption;false;MulticastOption;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;MulticastOption;false;MulticastOption;(System.Net.IPAddress,System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;MulticastOption;false;MulticastOption;(System.Net.IPAddress,System.Net.IPAddress);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Sockets;MulticastOption;false;get_Group;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;MulticastOption;false;get_LocalAddress;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;MulticastOption;false;set_Group;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;MulticastOption;false;set_LocalAddress;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | | System.Net.Sockets;NetworkStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.Net.Sockets;NetworkStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | +| System.Net.Sockets;NetworkStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;NetworkStream;false;NetworkStream;(System.Net.Sockets.Socket,System.IO.FileAccess,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | | System.Net.Sockets;NetworkStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.Net.Sockets;NetworkStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.Net.Sockets;NetworkStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.Net.Sockets;NetworkStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Sockets;NetworkStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;NetworkStream;false;get_Socket;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SafeSocketHandle;false;SafeSocketHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;Accept;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;AcceptAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;Bind;(System.Net.EndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;Connect;(System.Net.EndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;Connect;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;Connect;(System.Net.IPAddress[],System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;DisconnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;EndAccept;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;ReceiveAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[4];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[4];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Net.EndPoint);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Net.EndPoint);;Argument[1];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);;Argument[4];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);;Argument[4];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;SendAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;SendPacketsAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;SendTo;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[4];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;SendTo;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;SendTo;(System.Byte[],System.Net.EndPoint);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;SendTo;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;SendToAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;SendToAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;get_LocalEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;get_RemoteEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;get_SafeHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;SetBuffer;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;SetBuffer;(System.Memory);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_AcceptSocket;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_BufferList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_ConnectByNameError;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_ConnectSocket;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_MemoryBuffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_ReceiveMessageFromPacketInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_RemoteEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_SendPacketsElements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_UserToken;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;set_AcceptSocket;(System.Net.Sockets.Socket);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;set_BufferList;(System.Collections.Generic.IList>);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;set_RemoteEndPoint;(System.Net.EndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;set_SendPacketsElements;(System.Net.Sockets.SendPacketsElement[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;set_UserToken;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;AcceptAsync;(System.Net.Sockets.Socket,System.Net.Sockets.Socket);;Argument[1];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.EndPoint);;Argument[1];Argument[0];generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[1];Argument[0];generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.IPAddress,System.Int32);;Argument[1];Argument[0];generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.IPAddress,System.Int32,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.IPAddress,System.Int32,System.Threading.CancellationToken);;Argument[1];Argument[0];generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.String,System.Int32,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ReceiveAsync;(System.Net.Sockets.Socket,System.Memory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ReceiveAsync;(System.Net.Sockets.Socket,System.Memory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ReceiveAsync;(System.Net.Sockets.Socket,System.Memory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ReceiveFromAsync;(System.Net.Sockets.Socket,System.ArraySegment,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ReceiveMessageFromAsync;(System.Net.Sockets.Socket,System.ArraySegment,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;SendAsync;(System.Net.Sockets.Socket,System.ReadOnlyMemory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;SendAsync;(System.Net.Sockets.Socket,System.ReadOnlyMemory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;SendToAsync;(System.Net.Sockets.Socket,System.ArraySegment,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];Argument[0];generated:taint | +| System.Net.Sockets;TcpClient;false;Connect;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;TcpClient;false;GetStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;TcpClient;false;TcpClient;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;TcpClient;false;get_Client;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;TcpClient;false;set_Client;(System.Net.Sockets.Socket);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;TcpListener;false;AcceptSocket;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;TcpListener;false;AcceptTcpClient;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;TcpListener;false;EndAcceptSocket;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;TcpListener;false;EndAcceptTcpClient;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;TcpListener;false;TcpListener;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;TcpListener;false;TcpListener;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;TcpListener;false;get_LocalEndpoint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;TcpListener;false;get_Server;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;UdpClient;false;Connect;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpClient;false;EndReceive;(System.IAsyncResult,System.Net.IPEndPoint);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;UdpClient;false;Receive;(System.Net.IPEndPoint);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;UdpClient;false;Send;(System.Byte[],System.Int32,System.Net.IPEndPoint);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpClient;false;SendAsync;(System.Byte[],System.Int32,System.Net.IPEndPoint);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpClient;false;UdpClient;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpClient;false;get_Client;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;UdpClient;false;set_Client;(System.Net.Sockets.Socket);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpReceiveResult;false;UdpReceiveResult;(System.Byte[],System.Net.IPEndPoint);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpReceiveResult;false;UdpReceiveResult;(System.Byte[],System.Net.IPEndPoint);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpReceiveResult;false;get_Buffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;UdpReceiveResult;false;get_RemoteEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;SetBuffer;(System.Int32,System.Int32,System.ArraySegment);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;get_Cookies;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;get_KeepAliveInterval;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;get_Proxy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;get_RemoteCertificateValidationCallback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;set_ClientCertificates;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;set_Cookies;(System.Net.CookieContainer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;set_KeepAliveInterval;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_CookieCollection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_Origin;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_SecWebSocketKey;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_SecWebSocketProtocols;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_SecWebSocketVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_User;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_WebSocket;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;WebSocket;false;CreateClientWebSocket;(System.IO.Stream,System.String,System.Int32,System.Int32,System.TimeSpan,System.Boolean,System.ArraySegment);;Argument[0];ReturnValue;generated:taint | +| System.Net.WebSockets;WebSocket;false;CreateClientWebSocket;(System.IO.Stream,System.String,System.Int32,System.Int32,System.TimeSpan,System.Boolean,System.ArraySegment);;Argument[1];ReturnValue;generated:taint | +| System.Net.WebSockets;WebSocket;false;CreateFromStream;(System.IO.Stream,System.Boolean,System.String,System.TimeSpan);;Argument[0];ReturnValue;generated:taint | +| System.Net.WebSockets;WebSocket;false;CreateFromStream;(System.IO.Stream,System.Boolean,System.String,System.TimeSpan);;Argument[2];ReturnValue;generated:taint | +| System.Net.WebSockets;WebSocketException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net;Authorization;false;get_ProtectionRealm;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Authorization;false;set_ProtectionRealm;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;Cookie;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;Cookie;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;Cookie;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;Cookie;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_Comment;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_CommentUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_Domain;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_Expires;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_Path;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_Port;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_TimeStamp;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Net;Cookie;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System.Net;Cookie;false;set_Comment;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_CommentUri;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_Domain;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_Expires;(System.DateTime);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_Path;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_Port;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Net;CookieCollection;false;Add;(System.Net.Cookie);;Argument[0];Argument[Qualifier].Element;value | | System.Net;CookieCollection;false;Add;(System.Net.CookieCollection);;Argument[0];Argument[Qualifier].Element;value | | System.Net;CookieCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Net;CookieCollection;false;CopyTo;(System.Net.Cookie[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Net;CookieCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Net;CookieCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Net;CookieCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;CookieCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;CookieCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Net;CookieException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net;CredentialCache;false;GetCredential;(System.Uri,System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Net;CredentialCache;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Net;Dns;false;EndGetHostAddresses;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;Dns;false;EndGetHostByName;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;Dns;false;EndGetHostEntry;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;Dns;false;EndResolve;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;DnsEndPoint;false;DnsEndPoint;(System.String,System.Int32,System.Net.Sockets.AddressFamily);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;DnsEndPoint;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;DnsEndPoint;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;DownloadDataCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;DownloadStringCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;EndGetRequestStream;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;EndGetResponse;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;GetRequestStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;GetResponse;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;set_Method;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;FileWebResponse;false;GetResponseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebResponse;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebResponse;false;get_ResponseUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;EndGetRequestStream;(System.IAsyncResult);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;EndGetResponse;(System.IAsyncResult);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;GetRequestStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;GetResponse;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_ClientCertificates;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_ConnectionGroupName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_RenameTo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;set_ClientCertificates;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;FtpWebRequest;false;set_ConnectionGroupName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;FtpWebRequest;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;FtpWebRequest;false;set_Headers;(System.Net.WebHeaderCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;FtpWebRequest;false;set_RenameTo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;FtpWebResponse;false;GetResponseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_BannerMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_ExitMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_LastModified;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_ResponseUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_StatusDescription;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_WelcomeMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_AuthenticationSchemeSelectorDelegate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_DefaultServiceNames;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_ExtendedProtectionPolicy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_ExtendedProtectionSelectorDelegate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_Prefixes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_Realm;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_TimeoutManager;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;set_ExtendedProtectionPolicy;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpListener;false;set_Realm;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpListenerContext;false;get_Response;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerContext;false;get_User;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Net;HttpListenerPrefixCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier].Element;value | | System.Net;HttpListenerPrefixCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Net;HttpListenerPrefixCollection;false;CopyTo;(System.String[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Net;HttpListenerPrefixCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Net;HttpListenerPrefixCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Net;HttpListenerRequest;false;EndGetClientCertificate;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_Cookies;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_HttpMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_InputStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_ProtocolVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_RawUrl;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_Url;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_UrlReferrer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_UserAgent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_UserHostName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;AppendCookie;(System.Net.Cookie);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpListenerResponse;false;Close;(System.Byte[],System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;HttpListenerResponse;false;CopyFrom;(System.Net.HttpListenerResponse);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpListenerResponse;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;get_Cookies;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;get_OutputStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;get_ProtocolVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;get_RedirectLocation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;get_StatusDescription;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;set_Cookies;(System.Net.CookieCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;HttpListenerResponse;false;set_StatusDescription;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpListenerTimeoutManager;false;get_DrainEntityBody;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerTimeoutManager;false;get_IdleConnection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerTimeoutManager;false;set_DrainEntityBody;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpListenerTimeoutManager;false;set_IdleConnection;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpWebRequest;false;EndGetRequestStream;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;EndGetRequestStream;(System.IAsyncResult,System.Net.TransportContext);;Argument[0];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;EndGetResponse;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;GetRequestStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;GetRequestStream;(System.Net.TransportContext);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;GetResponse;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Accept;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Address;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Connection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_ContinueDelegate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_CookieContainer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Expect;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Proxy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Referer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_TransferEncoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_UserAgent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;set_ClientCertificates;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;HttpWebRequest;false;set_CookieContainer;(System.Net.CookieContainer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpWebRequest;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpWebRequest;false;set_Host;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpWebRequest;false;set_Method;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpWebRequest;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpWebResponse;false;GetResponseHeader;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebResponse;false;get_CharacterSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebResponse;false;get_Cookies;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebResponse;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebResponse;false;get_Server;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebResponse;false;get_StatusDescription;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebResponse;false;set_Cookies;(System.Net.CookieCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;IPAddress;false;MapToIPv4;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Net;IPAddress;false;MapToIPv6;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Net;IPAddress;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;IPEndPoint;false;IPEndPoint;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;IPEndPoint;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;IPEndPoint;false;get_Address;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;IPEndPoint;false;set_Address;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | | System.Net;IPHostEntry;false;get_Aliases;();;Argument[Qualifier];ReturnValue;taint | | System.Net;IPHostEntry;false;get_HostName;();;Argument[Qualifier];ReturnValue;taint | +| System.Net;NetworkCredential;false;GetCredential;(System.String,System.Int32,System.String);;Argument[Qualifier];ReturnValue;generated:value | +| System.Net;NetworkCredential;false;GetCredential;(System.Uri,System.String);;Argument[Qualifier];ReturnValue;generated:value | +| System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.Security.SecureString,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.Security.SecureString,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;get_Domain;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;NetworkCredential;false;get_Password;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;NetworkCredential;false;get_UserName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;NetworkCredential;false;set_Domain;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;set_Password;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;set_UserName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;OpenReadCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;OpenWriteCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;ProtocolViolationException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net;UploadDataCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;UploadFileCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;UploadStringCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;UploadValuesCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;DownloadData;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadData;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadDataAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadDataAsync;(System.Uri,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadDataTaskAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadDataTaskAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadFile;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadFile;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadFileAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadFileAsync;(System.Uri,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadFileTaskAsync;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadFileTaskAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadString;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadString;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadStringAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadStringAsync;(System.Uri,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadStringTaskAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadStringTaskAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;GetWebRequest;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;GetWebRequest;(System.Uri);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest,System.IAsyncResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest,System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest,System.IAsyncResult);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest,System.IAsyncResult);;Argument[1];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenRead;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenRead;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenRead;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenRead;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenRead;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenRead;(System.Uri);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenReadAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenReadAsync;(System.Uri,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenReadTaskAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenReadTaskAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWriteAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteAsync;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteAsync;(System.Uri,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteAsync;(System.Uri,System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteTaskAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteTaskAsync;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteTaskAsync;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteTaskAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteTaskAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteTaskAsync;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadData;(System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadData;(System.String,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadData;(System.String,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadData;(System.Uri,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadData;(System.Uri,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadData;(System.Uri,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.String,System.Byte[],System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.String,System.Byte[],System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataTaskAsync;(System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataTaskAsync;(System.String,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataTaskAsync;(System.String,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataTaskAsync;(System.Uri,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataTaskAsync;(System.Uri,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataTaskAsync;(System.Uri,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFile;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFile;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFile;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFile;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFile;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFile;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String,System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileTaskAsync;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileTaskAsync;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileTaskAsync;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileTaskAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileTaskAsync;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileTaskAsync;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadString;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadString;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadString;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadString;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadString;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadString;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String,System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringTaskAsync;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringTaskAsync;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringTaskAsync;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringTaskAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringTaskAsync;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringTaskAsync;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValues;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValues;(System.String,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValues;(System.String,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValues;(System.Uri,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValues;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValues;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesTaskAsync;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesTaskAsync;(System.String,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesTaskAsync;(System.String,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesTaskAsync;(System.Uri,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesTaskAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesTaskAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;get_BaseAddress;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;get_Proxy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;get_ResponseHeaders;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;set_BaseAddress;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;set_Encoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;set_Headers;(System.Net.WebHeaderCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;set_QueryString;(System.Collections.Specialized.NameValueCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;WebException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net;WebException;false;WebException;(System.String,System.Exception,System.Net.WebExceptionStatus,System.Net.WebResponse);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net;WebException;false;get_Response;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Net;WebHeaderCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier].Element;value | | System.Net;WebHeaderCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Net;WebHeaderCollection;false;ToByteArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebHeaderCollection;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebHeaderCollection;false;get_AllKeys;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebHeaderCollection;false;get_Item;(System.Net.HttpRequestHeader);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebHeaderCollection;false;get_Item;(System.Net.HttpResponseHeader);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebHeaderCollection;false;get_Keys;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebProxy;false;GetProxy;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebProxy;false;get_BypassArrayList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebProxy;false;get_BypassList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebRequest;false;Create;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebRequest;false;Create;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebRequest;false;CreateDefault;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebRequest;false;CreateHttp;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebRequest;false;CreateHttp;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebUtility;false;HtmlDecode;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebUtility;false;HtmlDecode;(System.String,System.IO.TextWriter);;Argument[0];Argument[1];generated:taint | | System.Net;WebUtility;false;HtmlEncode;(System.String);;Argument[0];ReturnValue;taint | | System.Net;WebUtility;false;HtmlEncode;(System.String,System.IO.TextWriter);;Argument[0];ReturnValue;taint | +| System.Net;WebUtility;false;UrlDecode;(System.String);;Argument[0];ReturnValue;generated:taint | | System.Net;WebUtility;false;UrlEncode;(System.String);;Argument[0];ReturnValue;taint | +| System.Numerics;BigInteger;false;Abs;(System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;DivRem;(System.Numerics.BigInteger,System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Max;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Max;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[1];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Min;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Min;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[1];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Negate;(System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Pow;(System.Numerics.BigInteger,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Remainder;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Complex;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Complex;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Add;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Lerp;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4,System.Single);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Multiply;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Multiply;(System.Numerics.Matrix4x4,System.Single);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Negate;(System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Subtract;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Transpose;(System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Plane;false;Normalize;(System.Numerics.Plane);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Plane;false;Plane;(System.Numerics.Vector3,System.Single);;Argument[0];Argument[Qualifier];generated:taint | +| System.Numerics;Plane;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Numerics;Vector2;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System.Numerics;Vector3;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System.Numerics;Vector4;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System.Numerics;Vector;false;Abs<>;(System.Numerics.Vector);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;DefineDynamicAssembly;(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;DefineDynamicAssembly;(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess,System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;DefineDynamicAssembly;(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;DefineDynamicModule;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;GetDynamicModule;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;GetModule;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;get_ManifestModule;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;GetILGenerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;GetILGenerator;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;GetParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[]);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[4].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[5].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;DynamicILInfo;false;get_DynamicMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;CreateDelegate;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;GetBaseDefinition;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Emit;DynamicMethod;false;GetDynamicILInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;GetILGenerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;GetILGenerator;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;GetParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;get_MethodHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;get_ReturnParameter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;get_ReturnType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;CreateTypeInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;DefineLiteral;(System.String,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;DefineLiteral;(System.String,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;DefineLiteral;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetConstructorImpl;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetConstructors;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetEnumUnderlyingType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetEvent;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetEvents;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetField;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetFields;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetInterfaceMap;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetInterfaceMap;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetMember;(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetMembers;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetMethodImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetProperties;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_UnderlyingField;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_UnderlyingSystemType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EventBuilder;false;AddOtherMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;EventBuilder;false;SetAddOnMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;EventBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;EventBuilder;false;SetRaiseMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;EventBuilder;false;SetRemoveOnMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;FieldBuilder;false;SetConstant;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;FieldBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;FieldBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;FieldBuilder;false;get_FieldType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;FieldBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;FieldBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;SetBaseTypeConstraint;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;SetInterfaceConstraints;(System.Type[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_DeclaringMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_UnderlyingSystemType;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Emit;ILGenerator;false;DeclareLocal;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ILGenerator;false;DeclareLocal;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ILGenerator;false;DeclareLocal;(System.Type,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ILGenerator;false;DeclareLocal;(System.Type,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;LocalBuilder;false;get_LocalType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;DefineGenericParameters;(System.String[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;DefineGenericParameters;(System.String[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;GetBaseDefinition;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Emit;MethodBuilder;false;GetGenericArguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;GetGenericMethodDefinition;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Emit;MethodBuilder;false;GetILGenerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;GetILGenerator;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;GetParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;MakeGenericMethod;(System.Type[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;MakeGenericMethod;(System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetReturnType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[5].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;get_ReturnParameter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;get_ReturnType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineEnum;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineEnum;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineEnum;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[5].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[7].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[8].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineInitializedData;(System.String,System.Byte[],System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineInitializedData;(System.String,System.Byte[],System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineUninitializedData;(System.String,System.Int32,System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineUninitializedData;(System.String,System.Int32,System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetArrayMethod;(System.Type,System.String,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetArrayMethod;(System.Type,System.String,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetArrayMethod;(System.Type,System.String,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetField;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetFields;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetMethods;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetType;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetType;(System.String,System.Boolean,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;get_Assembly;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;get_FullyQualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;get_ScopeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ParameterBuilder;false;SetConstant;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;ParameterBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;ParameterBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;GetGetMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;GetSetMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;SetConstant;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;SetGetMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;SetSetMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;get_PropertyType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetFieldSigHelper;(System.Reflection.Module);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetLocalVarSigHelper;(System.Reflection.Module);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.CallingConventions,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Reflection.CallingConventions,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Reflection.CallingConventions,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Type,System.Type[]);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Type,System.Type[]);;Argument[2].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;AddInterfaceImplementation;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;TypeBuilder;false;CreateType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;CreateTypeInfo;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Emit;TypeBuilder;false;DefineConstructor;(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineConstructor;(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][]);;Argument[3].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineConstructor;(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineConstructor;(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineDefaultConstructor;(System.Reflection.MethodAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineEvent;(System.String,System.Reflection.EventAttributes,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineEvent;(System.String,System.Reflection.EventAttributes,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineEvent;(System.String,System.Reflection.EventAttributes,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Reflection.FieldAttributes);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Reflection.FieldAttributes);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[2].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[3].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineGenericParameters;(System.String[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineGenericParameters;(System.String[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineInitializedData;(System.String,System.Byte[],System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineInitializedData;(System.String,System.Byte[],System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[5].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[7].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[8].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[5].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[7].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[8].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[3].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[6].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[7].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineTypeInitializer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineUninitializedData;(System.String,System.Int32,System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineUninitializedData;(System.String,System.Int32,System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetConstructor;(System.Type,System.Reflection.ConstructorInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetConstructor;(System.Type,System.Reflection.ConstructorInfo);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetConstructorImpl;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetConstructors;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetEvent;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetEvents;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetField;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetField;(System.Type,System.Reflection.FieldInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetField;(System.Type,System.Reflection.FieldInfo);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetFields;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetGenericArguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetGenericTypeDefinition;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Emit;TypeBuilder;false;GetInterface;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetInterfaceMap;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetInterfaceMap;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetMember;(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetMembers;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetMethod;(System.Type,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetMethod;(System.Type,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetMethodImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetNestedType;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetProperties;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;MakeGenericType;(System.Type[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;MakeGenericType;(System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;TypeBuilder;false;SetParent;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_Assembly;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_UnderlyingSystemType;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata.Ecma335;CustomModifiersEncoder;false;AddModifier;(System.Reflection.Metadata.EntityHandle,System.Boolean);;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;Add;(System.Reflection.Metadata.ExceptionRegionKind,System.Int32,System.Int32,System.Int32,System.Int32,System.Reflection.Metadata.EntityHandle,System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;AddCatch;(System.Int32,System.Int32,System.Int32,System.Int32,System.Reflection.Metadata.EntityHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;AddFault;(System.Int32,System.Int32,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;AddFilter;(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;AddFinally;(System.Int32,System.Int32,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddAssembly;(System.Reflection.Metadata.StringHandle,System.Version,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.BlobHandle,System.Reflection.AssemblyFlags,System.Reflection.AssemblyHashAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddAssembly;(System.Reflection.Metadata.StringHandle,System.Version,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.BlobHandle,System.Reflection.AssemblyFlags,System.Reflection.AssemblyHashAlgorithm);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddAssembly;(System.Reflection.Metadata.StringHandle,System.Version,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.BlobHandle,System.Reflection.AssemblyFlags,System.Reflection.AssemblyHashAlgorithm);;Argument[2];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddAssembly;(System.Reflection.Metadata.StringHandle,System.Version,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.BlobHandle,System.Reflection.AssemblyFlags,System.Reflection.AssemblyHashAlgorithm);;Argument[3];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddModule;(System.Int32,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddModule;(System.Int32,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle);;Argument[2];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddModule;(System.Int32,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle);;Argument[3];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddModule;(System.Int32,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle);;Argument[4];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataRootBuilder;false;MetadataRootBuilder;(System.Reflection.Metadata.Ecma335.MetadataBuilder,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataRootBuilder;false;get_Sizes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata.Ecma335;PermissionSetEncoder;false;AddPermission;(System.String,System.Collections.Immutable.ImmutableArray);;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata.Ecma335;PermissionSetEncoder;false;AddPermission;(System.String,System.Reflection.Metadata.BlobBuilder);;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata.Ecma335;PortablePdbBuilder;false;Serialize;(System.Reflection.Metadata.BlobBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;SignatureDecoder<,>;false;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;SignatureDecoder<,>;false;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;SignatureDecoder<,>;false;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);;Argument[2];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;false;Array;(System.Reflection.Metadata.Ecma335.SignatureTypeEncoder,System.Reflection.Metadata.Ecma335.ArrayShapeEncoder);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;false;Pointer;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;false;SZArray;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata;AssemblyDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;AssemblyDefinition;false;GetDeclarativeSecurityAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;AssemblyFile;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;AssemblyFileHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;AssemblyFileHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;AssemblyReference;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;AssemblyReferenceHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;AssemblyReferenceHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;AssemblyReferenceHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;Blob;false;GetBytes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;BlobBuilder+Blobs;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;BlobBuilder+Blobs;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;BlobBuilder+Blobs;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata;BlobBuilder;false;GetBlobs;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobBuilder;false;LinkPrefix;(System.Reflection.Metadata.BlobBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata;BlobBuilder;false;LinkPrefix;(System.Reflection.Metadata.BlobBuilder);;Argument[Qualifier];Argument[0];generated:taint | +| System.Reflection.Metadata;BlobBuilder;false;LinkSuffix;(System.Reflection.Metadata.BlobBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata;BlobBuilder;false;LinkSuffix;(System.Reflection.Metadata.BlobBuilder);;Argument[Qualifier];Argument[0];generated:taint | +| System.Reflection.Metadata;BlobBuilder;false;ReserveBytes;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobBuilder;false;TryWriteBytes;(System.IO.Stream,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata;BlobReader;false;ReadConstant;(System.Reflection.Metadata.ConstantTypeCode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobReader;false;ReadSerializedString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobReader;false;ReadUTF8;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobReader;false;ReadUTF16;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobReader;false;get_CurrentPointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobReader;false;get_StartPointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobWriter;false;BlobWriter;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Metadata;BlobWriter;false;WriteBytes;(System.IO.Stream,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata;BlobWriter;false;get_Blob;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;CustomAttributeHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;CustomAttributeHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;CustomAttributeHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;CustomDebugInformationHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;CustomDebugInformationHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;CustomDebugInformationHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;DeclarativeSecurityAttributeHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;DeclarativeSecurityAttributeHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;DeclarativeSecurityAttributeHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;DocumentHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;DocumentHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;DocumentHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;EventAccessors;false;get_Others;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;EventDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;EventDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;EventDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;EventDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;ExportedType;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;ExportedTypeHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;ExportedTypeHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;FieldDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;FieldDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;FieldDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;FieldDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;GenericParameter;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;GenericParameterConstraint;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;GenericParameterConstraintHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;GenericParameterConstraintHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Reflection.Metadata;GenericParameterHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;GenericParameterHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;ImportDefinitionCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;ImportDefinitionCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;ImportDefinitionCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;ImportDefinitionCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;ImportScopeCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;ImportScopeCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;ImportScopeCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;InterfaceImplementation;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;InterfaceImplementationHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;InterfaceImplementationHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;InterfaceImplementationHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;LocalConstantHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;LocalConstantHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;LocalConstantHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;LocalScope;false;GetChildren;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;LocalScope;false;GetLocalConstants;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;LocalScope;false;GetLocalVariables;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;LocalScopeHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;LocalScopeHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;LocalScopeHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;LocalVariableHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;LocalVariableHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;LocalVariableHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;ManifestResource;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;ManifestResourceHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;ManifestResourceHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;MemberReference;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;MemberReferenceHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;MemberReferenceHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;MetadataReader;false;GetAssemblyDefinition;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetAssemblyFile;(System.Reflection.Metadata.AssemblyFileHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetAssemblyReference;(System.Reflection.Metadata.AssemblyReferenceHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetConstant;(System.Reflection.Metadata.ConstantHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetCustomAttribute;(System.Reflection.Metadata.CustomAttributeHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetCustomAttributes;(System.Reflection.Metadata.EntityHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetCustomDebugInformation;(System.Reflection.Metadata.CustomDebugInformationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetCustomDebugInformation;(System.Reflection.Metadata.EntityHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetDeclarativeSecurityAttribute;(System.Reflection.Metadata.DeclarativeSecurityAttributeHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetDocument;(System.Reflection.Metadata.DocumentHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetEventDefinition;(System.Reflection.Metadata.EventDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetExportedType;(System.Reflection.Metadata.ExportedTypeHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetFieldDefinition;(System.Reflection.Metadata.FieldDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetGenericParameter;(System.Reflection.Metadata.GenericParameterHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetGenericParameterConstraint;(System.Reflection.Metadata.GenericParameterConstraintHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetImportScope;(System.Reflection.Metadata.ImportScopeHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetInterfaceImplementation;(System.Reflection.Metadata.InterfaceImplementationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetLocalConstant;(System.Reflection.Metadata.LocalConstantHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetLocalScope;(System.Reflection.Metadata.LocalScopeHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetLocalScopes;(System.Reflection.Metadata.MethodDebugInformationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetLocalScopes;(System.Reflection.Metadata.MethodDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetLocalVariable;(System.Reflection.Metadata.LocalVariableHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetManifestResource;(System.Reflection.Metadata.ManifestResourceHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetMemberReference;(System.Reflection.Metadata.MemberReferenceHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetMethodDebugInformation;(System.Reflection.Metadata.MethodDebugInformationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetMethodDebugInformation;(System.Reflection.Metadata.MethodDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetMethodDefinition;(System.Reflection.Metadata.MethodDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetMethodImplementation;(System.Reflection.Metadata.MethodImplementationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetMethodSpecification;(System.Reflection.Metadata.MethodSpecificationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetModuleDefinition;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetModuleReference;(System.Reflection.Metadata.ModuleReferenceHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetNamespaceDefinitionRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetParameter;(System.Reflection.Metadata.ParameterHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetPropertyDefinition;(System.Reflection.Metadata.PropertyDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetStandaloneSignature;(System.Reflection.Metadata.StandaloneSignatureHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetTypeDefinition;(System.Reflection.Metadata.TypeDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetTypeReference;(System.Reflection.Metadata.TypeReferenceHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetTypeSpecification;(System.Reflection.Metadata.TypeSpecificationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_AssemblyReferences;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_CustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_CustomDebugInformation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_DebugMetadataHeader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_DeclarativeSecurityAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_Documents;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_EventDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_FieldDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_ImportScopes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_LocalConstants;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_LocalScopes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_LocalVariables;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_MetadataPointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_MetadataVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_MethodDebugInformation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_MethodDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_PropertyDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_StringComparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;FromMetadataImage;(System.Byte*,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;FromMetadataImage;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;FromMetadataStream;(System.IO.Stream,System.Reflection.Metadata.MetadataStreamOptions,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;FromPortablePdbImage;(System.Byte*,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;FromPortablePdbImage;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;FromPortablePdbStream;(System.IO.Stream,System.Reflection.Metadata.MetadataStreamOptions,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;GetMetadataReader;(System.Reflection.Metadata.MetadataReaderOptions,System.Reflection.Metadata.MetadataStringDecoder);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataStringDecoder;false;GetString;(System.Byte*,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodBodyBlock;false;Create;(System.Reflection.Metadata.BlobReader);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodBodyBlock;false;GetILReader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodBodyBlock;false;get_ExceptionRegions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodBodyBlock;false;get_LocalSignature;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;MethodDebugInformationHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;MethodDebugInformationHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;MethodDebugInformationHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodDefinition;false;GetDeclarativeSecurityAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodDefinition;false;GetParameters;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;MethodDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;MethodDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;MethodDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodImplementation;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;MethodImplementationHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;MethodImplementationHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;MethodImport;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodImport;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodSpecification;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;ModuleDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;ModuleReference;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;NamespaceDefinition;false;get_ExportedTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;NamespaceDefinition;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;NamespaceDefinition;false;get_NamespaceDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;NamespaceDefinition;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;NamespaceDefinition;false;get_TypeDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;PEReaderExtensions;false;GetMetadataReader;(System.Reflection.PortableExecutable.PEReader);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;PEReaderExtensions;false;GetMetadataReader;(System.Reflection.PortableExecutable.PEReader,System.Reflection.Metadata.MetadataReaderOptions);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;PEReaderExtensions;false;GetMetadataReader;(System.Reflection.PortableExecutable.PEReader,System.Reflection.Metadata.MetadataReaderOptions,System.Reflection.Metadata.MetadataStringDecoder);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;Parameter;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;ParameterHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;ParameterHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;ParameterHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;PropertyAccessors;false;get_Others;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;PropertyDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;PropertyDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;PropertyDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;PropertyDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;SequencePointCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;SequencePointCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;SequencePointCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;SequencePointCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;StandaloneSignature;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetDeclarativeSecurityAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetFields;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetInterfaceImplementations;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetMethods;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetProperties;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Reflection.Metadata;TypeDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;TypeDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Reflection.Metadata;TypeReferenceHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Reflection.Metadata;TypeReferenceHandleCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Reflection.Metadata;TypeSpecification;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;ManagedPEBuilder;false;GetDirectories;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;ManagedPEBuilder;false;SerializeSection;(System.String,System.Reflection.PortableExecutable.SectionLocation);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEBuilder+Section;false;Section;(System.String,System.Reflection.PortableExecutable.SectionCharacteristics);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.PortableExecutable;PEBuilder;false;GetSections;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEBuilder;false;Serialize;(System.Reflection.Metadata.BlobBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.PortableExecutable;PEHeaders;false;get_CoffHeader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEHeaders;false;get_CorHeader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEHeaders;false;get_PEHeader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEHeaders;false;get_SectionHeaders;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEMemoryBlock;false;get_Pointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;GetEntireImage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;GetMetadata;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;GetSectionData;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;GetSectionData;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;PEReader;(System.Byte*,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;PEReader;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;PEReader;(System.IO.Stream,System.Reflection.PortableExecutable.PEStreamOptions,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;get_PEHeaders;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Assembly;false;CreateQualifiedName;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;Assembly;false;CreateQualifiedName;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Reflection;Assembly;false;GetAssembly;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;Assembly;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Assembly;true;GetName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Assembly;true;GetType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Assembly;true;GetType;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;GetPublicKey;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;SetPublicKey;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Reflection;AssemblyName;false;SetPublicKeyToken;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Reflection;AssemblyName;false;get_CodeBase;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;get_CultureInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;get_EscapedCodeBase;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;set_CodeBase;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;AssemblyName;false;set_CultureInfo;(System.Globalization.CultureInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;AssemblyName;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;AssemblyName;false;set_Version;(System.Version);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeData;false;get_AttributeType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;CustomAttributeNamedArgument;(System.Reflection.MemberInfo,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;CustomAttributeNamedArgument;(System.Reflection.MemberInfo,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;CustomAttributeNamedArgument;(System.Reflection.MemberInfo,System.Reflection.CustomAttributeTypedArgument);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;CustomAttributeNamedArgument;(System.Reflection.MemberInfo,System.Reflection.CustomAttributeTypedArgument);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;get_MemberInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;get_TypedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeTypedArgument;false;CustomAttributeTypedArgument;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeTypedArgument;false;CustomAttributeTypedArgument;(System.Type,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeTypedArgument;false;CustomAttributeTypedArgument;(System.Type,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeTypedArgument;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeTypedArgument;false;get_ArgumentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeTypedArgument;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfo;false;GetAddMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfo;false;GetRaiseMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfo;false;GetRemoveMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfo;true;get_AddMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfo;true;get_RaiseMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfo;true;get_RemoveMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfoExtensions;false;GetAddMethod;(System.Reflection.EventInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;EventInfoExtensions;false;GetAddMethod;(System.Reflection.EventInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;EventInfoExtensions;false;GetRaiseMethod;(System.Reflection.EventInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;EventInfoExtensions;false;GetRaiseMethod;(System.Reflection.EventInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;EventInfoExtensions;false;GetRemoveMethod;(System.Reflection.EventInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;EventInfoExtensions;false;GetRemoveMethod;(System.Reflection.EventInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;ExceptionHandlingClause;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;IntrospectionExtensions;false;GetTypeInfo;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;LocalVariableInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;MethodInfo;false;CreateDelegate<>;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;MethodInfoExtensions;false;GetBaseDefinition;(System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;Module;false;GetField;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;false;GetFields;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;false;GetMethod;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;false;GetMethod;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;false;GetMethod;(System.String,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;false;GetMethods;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;true;GetType;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;ParameterInfo;false;GetRealObject;(System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;ParameterInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;ParameterInfo;false;get_Member;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;ParameterInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;ParameterInfo;false;get_ParameterType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Pointer;false;Box;(System.Void*,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;Pointer;false;Unbox;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;PropertyInfo;false;GetAccessors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;PropertyInfo;false;GetGetMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;PropertyInfo;false;GetSetMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;PropertyInfo;true;get_GetMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;PropertyInfo;true;get_SetMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;PropertyInfoExtensions;false;GetAccessors;(System.Reflection.PropertyInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;PropertyInfoExtensions;false;GetAccessors;(System.Reflection.PropertyInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;PropertyInfoExtensions;false;GetGetMethod;(System.Reflection.PropertyInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;PropertyInfoExtensions;false;GetGetMethod;(System.Reflection.PropertyInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;PropertyInfoExtensions;false;GetSetMethod;(System.Reflection.PropertyInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;PropertyInfoExtensions;false;GetSetMethod;(System.Reflection.PropertyInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;ReflectionTypeLoadException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Reflection;ReflectionTypeLoadException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetMethodInfo;(System.Delegate);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeBaseDefinition;(System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeEvent;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeEvents;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeField;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeFields;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeInterfaceMap;(System.Reflection.TypeInfo,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeInterfaceMap;(System.Reflection.TypeInfo,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeMethod;(System.Type,System.String,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeMethods;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeProperties;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeProperty;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetConstructorImpl;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetConstructors;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetElementType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetEvent;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetEvents;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetField;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetFields;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetInterface;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetInterfaceMap;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetInterfaceMap;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetMember;(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetMembers;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetMethodImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetMethods;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetNestedType;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetNestedTypes;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetProperties;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetPropertyImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;TypeDelegator;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;TypeDelegator;false;get_Assembly;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_AssemblyQualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_UnderlyingSystemType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetConstructor;(System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetConstructors;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetConstructors;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetDefaultMembers;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetEvent;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetEvent;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetEvents;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetEvents;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetField;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetField;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetFields;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetFields;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetGenericArguments;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetInterfaces;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMember;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMember;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMembers;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMembers;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMethod;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMethod;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMethod;(System.Type,System.String,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMethods;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMethods;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetNestedType;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetNestedTypes;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetProperties;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetProperties;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetProperty;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetProperty;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetProperty;(System.Type,System.String,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetProperty;(System.Type,System.String,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;false;GetTypeInfo;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection;TypeInfo;true;AsType;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection;TypeInfo;true;GetDeclaredEvent;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;GetDeclaredField;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;GetDeclaredMethod;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;GetDeclaredNestedType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;GetDeclaredProperty;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_DeclaredConstructors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_DeclaredEvents;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_DeclaredFields;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_DeclaredMembers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_DeclaredMethods;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_DeclaredProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_GenericTypeParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_ImplementedInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;MissingSatelliteAssemblyException;false;MissingSatelliteAssemblyException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Resources;MissingSatelliteAssemblyException;false;get_CultureName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceManager;false;CreateFileBasedResourceManager;(System.String,System.String,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Resources;ResourceManager;false;CreateFileBasedResourceManager;(System.String,System.String,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Resources;ResourceManager;false;CreateFileBasedResourceManager;(System.String,System.String,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Resources;ResourceManager;false;GetResourceFileName;(System.Globalization.CultureInfo);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly);;Argument[0];Argument[Qualifier];generated:taint | +| System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly);;Argument[1];Argument[Qualifier];generated:taint | +| System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly,System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly,System.Type);;Argument[2];Argument[Qualifier];generated:taint | +| System.Resources;ResourceManager;false;ResourceManager;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Resources;ResourceManager;false;get_BaseName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceManager;false;get_ResourceSetType;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Resources;ResourceReader;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Resources;ResourceReader;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceReader;false;GetResourceData;(System.String,System.String,System.Byte[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceReader;false;ResourceReader;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | | System.Resources;ResourceSet;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Resources;ResourceSet;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceSet;false;ResourceSet;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Resources;ResourceSet;false;ResourceSet;(System.Resources.IResourceReader);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Resources;ResourceWriter;false;ResourceWriter;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder<>;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder<>;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder<>;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder<>;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder<>;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder<>;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;CallSite;false;get_Binder;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Runtime.CompilerServices;ConditionalWeakTable<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Runtime.CompilerServices;ConditionalWeakTable<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Runtime.CompilerServices;ConditionalWeakTable<,>;false;GetOrCreateValue;(TKey);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredCancelableAsyncEnumerable<>;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredCancelableAsyncEnumerable<>;false;GetAsyncEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredCancelableAsyncEnumerable<>;false;WithCancellation;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredCancelableAsyncEnumerable<>;false;WithCancellation;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredTaskAwaitable;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Runtime.CompilerServices;ConfiguredTaskAwaitable<>+ConfiguredTaskAwaiter;false;GetResult;();;Argument[Qualifier].SyntheticField[m_task_configured_task_awaitable].Property[System.Threading.Tasks.Task<>.Result];ReturnValue;value | | System.Runtime.CompilerServices;ConfiguredTaskAwaitable<>;false;GetAwaiter;();;Argument[Qualifier].SyntheticField[m_configuredTaskAwaiter];ReturnValue;value | +| System.Runtime.CompilerServices;ConfiguredValueTaskAwaitable;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredValueTaskAwaitable<>+ConfiguredValueTaskAwaiter;false;GetResult;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredValueTaskAwaitable<>;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ContractHelper;false;RaiseContractFailedEvent;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[1];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ContractHelper;false;RaiseContractFailedEvent;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[2];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;DateTimeConstantAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;DynamicAttribute;false;DynamicAttribute;(System.Boolean[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;DynamicAttribute;false;get_TransformFlags;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;FormattableStringFactory;false;Create;(System.String,System.Object[]);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;FormattableStringFactory;false;Create;(System.String,System.Object[]);;Argument[1].Element;ReturnValue;generated:taint | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | @@ -2008,59 +6390,574 @@ | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Insert;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;ReadOnlyCollectionBuilder;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System.Runtime.CompilerServices;RuntimeWrappedException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Runtime.CompilerServices;RuntimeWrappedException;false;RuntimeWrappedException;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;RuntimeWrappedException;false;get_WrappedException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;StrongBox<>;false;StrongBox;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;StrongBox<>;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;StrongBox<>;false;set_Value;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;SwitchExpressionException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Runtime.CompilerServices;SwitchExpressionException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Runtime.CompilerServices;TaskAwaiter<>;false;GetResult;();;Argument[Qualifier].SyntheticField[m_task_task_awaiter].Property[System.Threading.Tasks.Task<>.Result];ReturnValue;value | +| System.Runtime.CompilerServices;TupleElementNamesAttribute;false;TupleElementNamesAttribute;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;TupleElementNamesAttribute;false;get_TransformNames;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ValueTaskAwaiter<>;false;GetResult;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.ExceptionServices;ExceptionDispatchInfo;false;Capture;(System.Exception);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.ExceptionServices;ExceptionDispatchInfo;false;SetCurrentStackTrace;(System.Exception);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.ExceptionServices;ExceptionDispatchInfo;false;get_SourceException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ArrayWithOffset;false;ArrayWithOffset;(System.Object,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;ArrayWithOffset;false;GetArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;COMException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;GetAddMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;GetRaiseMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;GetRemoveMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;CriticalHandle;false;CriticalHandle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;CriticalHandle;false;SetHandle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;ExternalException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;GCHandle;false;FromIntPtr;(System.IntPtr);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;GCHandle;false;ToIntPtr;(System.Runtime.InteropServices.GCHandle);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;HandleRef;false;HandleRef;(System.Object,System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;HandleRef;false;HandleRef;(System.Object,System.IntPtr);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;HandleRef;false;ToIntPtr;(System.Runtime.InteropServices.HandleRef);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;HandleRef;false;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;HandleRef;false;get_Wrapper;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;Marshal;false;GenerateProgIdForType;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;MemoryMarshal;false;CreateFromPinnedArray<>;(T[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Runtime.InteropServices;MemoryMarshal;false;TryGetMemoryManager<,>;(System.ReadOnlyMemory,TManager);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;MemoryMarshal;false;TryGetMemoryManager<,>;(System.ReadOnlyMemory,TManager,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;MemoryMarshal;false;TryGetString;(System.ReadOnlyMemory,System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;SafeHandle;false;DangerousGetHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;SafeHandle;false;SafeHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;SafeHandle;false;SetHandle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;SequenceMarshal;false;TryGetArray<>;(System.Buffers.ReadOnlySequence,System.ArraySegment);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;SequenceMarshal;false;TryGetReadOnlyMemory<>;(System.Buffers.ReadOnlySequence,System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;SequenceMarshal;false;TryGetReadOnlySequenceSegment<>;(System.Buffers.ReadOnlySequence,System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector64;false;WithElement<>;(System.Runtime.Intrinsics.Vector64,System.Int32,T);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector128;false;WithElement<>;(System.Runtime.Intrinsics.Vector128,System.Int32,T);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector128;false;WithLower<>;(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector64);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector128;false;WithUpper<>;(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector64);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector256;false;WithElement<>;(System.Runtime.Intrinsics.Vector256,System.Int32,T);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector256;false;WithLower<>;(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector128);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector256;false;WithUpper<>;(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector128);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyDependencyResolver;false;ResolveAssemblyToPath;(System.Reflection.AssemblyName);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyDependencyResolver;false;ResolveAssemblyToPath;(System.Reflection.AssemblyName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyDependencyResolver;false;ResolveUnmanagedDllToPath;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyDependencyResolver;false;ResolveUnmanagedDllToPath;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyLoadContext;false;EnterContextualReflection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyLoadContext;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyLoadContext;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Remoting;ObjectHandle;false;ObjectHandle;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Remoting;ObjectHandle;false;Unwrap;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;BinaryFormatter;(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;BinaryFormatter;(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;get_Binder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;get_Context;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;get_SurrogateSelector;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;set_Binder;(System.Runtime.Serialization.SerializationBinder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;set_Context;(System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;set_SurrogateSelector;(System.Runtime.Serialization.ISurrogateSelector);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization.Json;DataContractJsonSerializer;false;DataContractJsonSerializer;(System.Type,System.Runtime.Serialization.Json.DataContractJsonSerializerSettings);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization.Json;DataContractJsonSerializer;false;ReadObject;(System.Xml.XmlDictionaryReader);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;DataContractJsonSerializer;false;ReadObject;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;DataContractJsonSerializer;false;ReadObject;(System.Xml.XmlReader,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;DataContractJsonSerializer;false;get_DateTimeFormat;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;DataContractJsonSerializer;false;get_KnownTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding);;Argument[1];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[1];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean);;Argument[1];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean,System.String);;Argument[4];ReturnValue;generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;get_ItemName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;get_KeyName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;get_ValueName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;set_ItemName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;set_KeyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;set_ValueName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Collections.Generic.IEnumerable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Runtime.Serialization.DataContractSerializerSettings);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.String,System.String,System.Collections.Generic.IEnumerable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.String,System.String,System.Collections.Generic.IEnumerable);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.String,System.String,System.Collections.Generic.IEnumerable);;Argument[2];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.String,System.String,System.Collections.Generic.IEnumerable);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IEnumerable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IEnumerable);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IEnumerable);;Argument[2];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IEnumerable);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;ReadObject;(System.Xml.XmlDictionaryReader,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;ReadObject;(System.Xml.XmlDictionaryReader,System.Boolean,System.Runtime.Serialization.DataContractResolver);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;ReadObject;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;ReadObject;(System.Xml.XmlReader,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;get_DataContractResolver;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;get_KnownTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractSerializerExtensions;false;GetSerializationSurrogateProvider;(System.Runtime.Serialization.DataContractSerializer);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractSerializerExtensions;false;SetSerializationSurrogateProvider;(System.Runtime.Serialization.DataContractSerializer,System.Runtime.Serialization.ISerializationSurrogateProvider);;Argument[1];Argument[0];generated:taint | +| System.Runtime.Serialization;DataMemberAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataMemberAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DateTimeFormat;false;DateTimeFormat;(System.String,System.IFormatProvider);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DateTimeFormat;false;DateTimeFormat;(System.String,System.IFormatProvider);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DateTimeFormat;false;get_FormatProvider;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;DateTimeFormat;false;get_FormatString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;EnumMemberAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;EnumMemberAttribute;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;ExportOptions;false;get_KnownTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterConverter;false;Convert;(System.Object,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterConverter;false;Convert;(System.Object,System.TypeCode);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterConverter;false;ToDateTime;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterConverter;false;ToString;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterServices;false;GetSerializableMembers;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterServices;false;GetSerializableMembers;(System.Type,System.Runtime.Serialization.StreamingContext);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterServices;false;GetSurrogateForCyclicalReference;(System.Runtime.Serialization.ISerializationSurrogate);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterServices;false;GetTypeFromAssembly;(System.Reflection.Assembly,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterServices;false;PopulateObjectMembers;(System.Object,System.Reflection.MemberInfo[],System.Object[]);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;ObjectIDGenerator;false;GetId;(System.Object,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;ObjectManager;false;GetObject;(System.Int64);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;ObjectManager;false;ObjectManager;(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;ObjectManager;false;ObjectManager;(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationEntry;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationEntry;false;get_ObjectType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationEntry;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Byte);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Char);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.DateTime);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.DateTime);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Decimal);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Double);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Int16);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Int64);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object,System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object,System.Type);;Argument[2];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.SByte);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Single);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.UInt16);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.UInt32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.UInt64);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;GetDateTime;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;GetString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;GetValue;(System.String,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;SerializationInfo;(System.Type,System.Runtime.Serialization.IFormatterConverter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;SerializationInfo;(System.Type,System.Runtime.Serialization.IFormatterConverter);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;SetType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;get_AssemblyName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;get_FullTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;get_ObjectType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;set_AssemblyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;set_FullTypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfoEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfoEnumerator;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfoEnumerator;false;get_ObjectType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfoEnumerator;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationObjectManager;false;SerializationObjectManager;(System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;StreamingContext;false;StreamingContext;(System.Runtime.Serialization.StreamingContextStates,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;StreamingContext;false;get_Context;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SurrogateSelector;false;ChainSelector;(System.Runtime.Serialization.ISurrogateSelector);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SurrogateSelector;false;ChainSelector;(System.Runtime.Serialization.ISurrogateSelector);;Argument[Qualifier];Argument[0];generated:taint | +| System.Runtime.Serialization;SurrogateSelector;false;GetNextSelector;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SurrogateSelector;false;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;XPathQueryGenerator;false;CreateFromDataContractSerializer;(System.Type,System.Reflection.MemberInfo[],System.Text.StringBuilder,System.Xml.XmlNamespaceManager);;Argument[2];ReturnValue;generated:taint | +| System.Runtime.Serialization;XmlObjectSerializer;true;ReadObject;(System.Xml.XmlDictionaryReader);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;XmlObjectSerializer;true;ReadObject;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;XmlObjectSerializer;true;ReadObject;(System.Xml.XmlReader,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;XmlSerializableServices;false;WriteNodes;(System.Xml.XmlWriter,System.Xml.XmlNode[]);;Argument[1].Element;Argument[0];generated:taint | +| System.Runtime.Serialization;XsdDataContractExporter;false;XsdDataContractExporter;(System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;XsdDataContractExporter;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;XsdDataContractExporter;false;set_Options;(System.Runtime.Serialization.ExportOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;FrameworkName;false;FrameworkName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;FrameworkName;false;FrameworkName;(System.String,System.Version,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;FrameworkName;false;FrameworkName;(System.String,System.Version,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;FrameworkName;false;FrameworkName;(System.String,System.Version,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;FrameworkName;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;FrameworkName;false;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;FrameworkName;false;get_Identifier;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;FrameworkName;false;get_Profile;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;FrameworkName;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;TargetFrameworkAttribute;false;TargetFrameworkAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;TargetFrameworkAttribute;false;get_FrameworkDisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;TargetFrameworkAttribute;false;get_FrameworkName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;TargetFrameworkAttribute;false;set_FrameworkDisplayName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;VersioningHelper;false;MakeVersionSafeName;(System.String,System.Runtime.Versioning.ResourceScope,System.Runtime.Versioning.ResourceScope);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Versioning;VersioningHelper;false;MakeVersionSafeName;(System.String,System.Runtime.Versioning.ResourceScope,System.Runtime.Versioning.ResourceScope,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Versioning;VersioningHelper;false;MakeVersionSafeName;(System.String,System.Runtime.Versioning.ResourceScope,System.Runtime.Versioning.ResourceScope,System.Type);;Argument[3];ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;ExtendedProtectionPolicy;(System.Security.Authentication.ExtendedProtection.PolicyEnforcement,System.Security.Authentication.ExtendedProtection.ChannelBinding);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;ExtendedProtectionPolicy;(System.Security.Authentication.ExtendedProtection.PolicyEnforcement,System.Security.Authentication.ExtendedProtection.ProtectionScenario,System.Security.Authentication.ExtendedProtection.ServiceNameCollection);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;get_CustomChannelBinding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;get_CustomServiceNames;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicyTypeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ServiceNameCollection;false;Merge;(System.Collections.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ServiceNameCollection;false;Merge;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ServiceNameCollection;false;ServiceNameCollection;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Claims;Claim;false;Claim;(System.IO.BinaryReader,System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;Claim;false;Claim;(System.IO.BinaryReader,System.Security.Claims.ClaimsIdentity);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Claims;Claim;false;Claim;(System.Security.Claims.Claim,System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;Claim;false;Claim;(System.Security.Claims.Claim,System.Security.Claims.ClaimsIdentity);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Claims;Claim;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;Clone;(System.Security.Claims.ClaimsIdentity);;Argument[0];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;Clone;(System.Security.Claims.ClaimsIdentity);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;WriteTo;(System.IO.BinaryWriter,System.Byte[]);;Argument[1].Element;Argument[0];generated:taint | +| System.Security.Claims;Claim;false;get_CustomSerializationData;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_Issuer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_OriginalIssuer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_Subject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_ValueType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;AddClaim;(System.Security.Claims.Claim);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;AddClaims;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.IO.BinaryReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[4];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;CreateClaim;(System.IO.BinaryReader);;Argument[0];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;CreateClaim;(System.IO.BinaryReader);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;FindAll;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;FindFirst;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;WriteTo;(System.IO.BinaryWriter,System.Byte[]);;Argument[1].Element;Argument[0];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_Actor;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_AuthenticationType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_BootstrapContext;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_Claims;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_CustomSerializationData;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_Label;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_NameClaimType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_RoleClaimType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;set_Actor;(System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;set_BootstrapContext;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;set_Label;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;AddIdentities;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;AddIdentity;(System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;ClaimsPrincipal;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;ClaimsPrincipal;(System.IO.BinaryReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;ClaimsPrincipal;(System.Security.Principal.IIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;ClaimsPrincipal;(System.Security.Principal.IPrincipal);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;CreateClaimsIdentity;(System.IO.BinaryReader);;Argument[0];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;FindAll;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;FindFirst;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;WriteTo;(System.IO.BinaryWriter,System.Byte[]);;Argument[1].Element;Argument[0];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;get_Claims;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;get_CustomSerializationData;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;get_Identities;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;get_Identity;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.Security.Cryptography.X509Certificates.X500DistinguishedName,System.Security.Cryptography.ECDsa,System.Security.Cryptography.HashAlgorithmName);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.Security.Cryptography.X509Certificates.X500DistinguishedName,System.Security.Cryptography.RSA,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.Security.Cryptography.X509Certificates.X500DistinguishedName,System.Security.Cryptography.RSA,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding);;Argument[3];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.String,System.Security.Cryptography.ECDsa,System.Security.Cryptography.HashAlgorithmName);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.String,System.Security.Cryptography.RSA,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.String,System.Security.Cryptography.RSA,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding);;Argument[3];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;PublicKey;false;PublicKey;(System.Security.Cryptography.Oid,System.Security.Cryptography.AsnEncodedData,System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;PublicKey;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;PublicKey;false;get_Oid;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X500DistinguishedName;false;X500DistinguishedName;(System.Security.Cryptography.X509Certificates.X500DistinguishedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X500DistinguishedName;false;X500DistinguishedName;(System.String,System.Security.Cryptography.X509Certificates.X500DistinguishedNameFlags);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X500DistinguishedName;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509BasicConstraintsExtension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;ToString;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_Extensions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_IssuerName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_NotAfter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_NotBefore;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_PrivateKey;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_PublicKey;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_SerialNumber;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_SignatureAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_SubjectName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_Thumbprint;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;Add;(System.Security.Cryptography.X509Certificates.X509Certificate2);;Argument[0];Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;AddRange;(System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;AddRange;(System.Security.Cryptography.X509Certificates.X509Certificate2[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;Find;(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean);;Argument[Qualifier].Element;ReturnValue;value | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Security.Cryptography.X509Certificates.X509Certificate2Enumerator.Current];value | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;Insert;(System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate2);;Argument[1];Argument[Qualifier].Element;value | +| System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;Remove;(System.Security.Cryptography.X509Certificates.X509Certificate2);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;RemoveRange;(System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;RemoveRange;(System.Security.Cryptography.X509Certificates.X509Certificate2[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;X509Certificate2Collection;(System.Security.Cryptography.X509Certificates.X509Certificate2);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;X509Certificate2Collection;(System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;X509Certificate2Collection;(System.Security.Cryptography.X509Certificates.X509Certificate2[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;set_Item;(System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate2);;Argument[1];Argument[Qualifier].Element;value | +| System.Security.Cryptography.X509Certificates;X509Certificate2Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;GetCertHashString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;GetKeyAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;GetSerialNumberString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;ToString;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;get_Issuer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;get_Subject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509CertificateCollection+X509CertificateEnumerator;false;X509CertificateEnumerator;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509CertificateCollection+X509CertificateEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;Add;(System.Security.Cryptography.X509Certificates.X509Certificate);;Argument[0];Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;AddRange;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;AddRange;(System.Security.Cryptography.X509Certificates.X509Certificate[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;CopyTo;(System.Security.Cryptography.X509Certificates.X509Certificate[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Security.Cryptography.X509Certificates.X509CertificateCollection+X509CertificateEnumerator.Current];value | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;Insert;(System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate);;Argument[1];Argument[Qualifier].Element;value | +| System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;Remove;(System.Security.Cryptography.X509Certificates.X509Certificate);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;X509CertificateCollection;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;X509CertificateCollection;(System.Security.Cryptography.X509Certificates.X509Certificate[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;set_Item;(System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate);;Argument[1];Argument[Qualifier].Element;value | +| System.Security.Cryptography.X509Certificates;X509Chain;false;get_ChainElements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Chain;false;get_ChainPolicy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Chain;false;get_ChainStatus;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Chain;false;set_ChainPolicy;(System.Security.Cryptography.X509Certificates.X509ChainPolicy);;Argument[0];Argument[Qualifier];generated:taint | | System.Security.Cryptography.X509Certificates;X509ChainElementCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography.X509Certificates;X509ChainElementCollection;false;CopyTo;(System.Security.Cryptography.X509Certificates.X509ChainElement[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography.X509Certificates;X509ChainElementCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Security.Cryptography.X509Certificates;X509ChainElementCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Security.Cryptography.X509Certificates.X509ChainElementEnumerator.Current];value | +| System.Security.Cryptography.X509Certificates;X509ChainElementCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509ChainElementCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Security.Cryptography.X509Certificates;X509ChainElementEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509ChainStatus;false;get_StatusInformation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509ChainStatus;false;set_StatusInformation;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509EnhancedKeyUsageExtension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509EnhancedKeyUsageExtension;false;get_EnhancedKeyUsages;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Extension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | | System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;Add;(System.Security.Cryptography.X509Certificates.X509Extension);;Argument[0];Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;CopyTo;(System.Security.Cryptography.X509Certificates.X509Extension[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Security.Cryptography.X509Certificates.X509ExtensionEnumerator.Current];value | +| System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Security.Cryptography.X509Certificates;X509ExtensionEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509KeyUsageExtension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509SignatureGenerator;false;CreateForECDsa;(System.Security.Cryptography.ECDsa);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509SignatureGenerator;false;CreateForRSA;(System.Security.Cryptography.RSA,System.Security.Cryptography.RSASignaturePadding);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509SignatureGenerator;false;CreateForRSA;(System.Security.Cryptography.RSA,System.Security.Cryptography.RSASignaturePadding);;Argument[1];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509SignatureGenerator;false;get_PublicKey;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509SubjectKeyIdentifierExtension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509SubjectKeyIdentifierExtension;false;get_SubjectKeyIdentifier;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.Security.Cryptography.Oid,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.Security.Cryptography.Oid,System.ReadOnlySpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.String,System.ReadOnlySpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;Format;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;get_Oid;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;get_RawData;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;set_Oid;(System.Security.Cryptography.Oid);;Argument[0];Argument[Qualifier];generated:taint | | System.Security.Cryptography;AsnEncodedDataCollection;false;Add;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier].Element;value | +| System.Security.Cryptography;AsnEncodedDataCollection;false;AsnEncodedDataCollection;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | | System.Security.Cryptography;AsnEncodedDataCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography;AsnEncodedDataCollection;false;CopyTo;(System.Security.Cryptography.AsnEncodedData[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography;AsnEncodedDataCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Security.Cryptography;AsnEncodedDataCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Security.Cryptography.AsnEncodedDataEnumerator.Current];value | +| System.Security.Cryptography;AsnEncodedDataCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;AsnEncodedDataCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Security.Cryptography;AsnEncodedDataEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Security.Cryptography;CryptoStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.Security.Cryptography;CryptoStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | +| System.Security.Cryptography;CryptoStream;false;CryptoStream;(System.IO.Stream,System.Security.Cryptography.ICryptoTransform,System.Security.Cryptography.CryptoStreamMode,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;CryptoStream;false;CryptoStream;(System.IO.Stream,System.Security.Cryptography.ICryptoTransform,System.Security.Cryptography.CryptoStreamMode,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;CryptoStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;CryptoStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.Security.Cryptography;CryptoStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.Security.Cryptography;CryptoStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | | System.Security.Cryptography;CryptoStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.Security.Cryptography;CryptoStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.Security.Cryptography;CspParameters;false;get_ParentWindowHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;CspParameters;false;set_ParentWindowHandle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;DSASignatureDeformatter;false;DSASignatureDeformatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;DSASignatureDeformatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;DSASignatureFormatter;false;DSASignatureFormatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;DSASignatureFormatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;ECCurve;false;get_Oid;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;HMAC;false;get_HashName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;HMAC;false;set_HashName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;HashAlgorithmName;false;HashAlgorithmName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;HashAlgorithmName;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;HashAlgorithmName;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;IncrementalHash;false;CreateHMAC;(System.Security.Cryptography.HashAlgorithmName,System.Byte[]);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;IncrementalHash;false;CreateHMAC;(System.Security.Cryptography.HashAlgorithmName,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;IncrementalHash;false;CreateHash;(System.Security.Cryptography.HashAlgorithmName);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;IncrementalHash;false;get_AlgorithmName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;Oid;false;FromFriendlyName;(System.String,System.Security.Cryptography.OidGroup);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;Oid;false;FromOidValue;(System.String,System.Security.Cryptography.OidGroup);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;Oid;false;Oid;(System.Security.Cryptography.Oid);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;Oid;false;Oid;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;Oid;false;Oid;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;Oid;false;Oid;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;Oid;false;get_FriendlyName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;Oid;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;Oid;false;set_FriendlyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;Oid;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Security.Cryptography;OidCollection;false;Add;(System.Security.Cryptography.Oid);;Argument[0];Argument[Qualifier].Element;value | | System.Security.Cryptography;OidCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography;OidCollection;false;CopyTo;(System.Security.Cryptography.Oid[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography;OidCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Security.Cryptography;OidCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Security.Cryptography.OidEnumerator.Current];value | +| System.Security.Cryptography;OidCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;OidCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;OidCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Security.Cryptography;OidEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;PKCS1MaskGenerationMethod;false;get_HashName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;PKCS1MaskGenerationMethod;false;set_HashName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;PasswordDeriveBytes;false;PasswordDeriveBytes;(System.Byte[],System.Byte[],System.String,System.Int32,System.Security.Cryptography.CspParameters);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Cryptography;PasswordDeriveBytes;false;PasswordDeriveBytes;(System.Byte[],System.Byte[],System.String,System.Int32,System.Security.Cryptography.CspParameters);;Argument[2];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;PasswordDeriveBytes;false;PasswordDeriveBytes;(System.Byte[],System.Byte[],System.String,System.Int32,System.Security.Cryptography.CspParameters);;Argument[4];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;PasswordDeriveBytes;false;get_HashName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;PasswordDeriveBytes;false;set_HashName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAEncryptionPadding;false;CreateOaep;(System.Security.Cryptography.HashAlgorithmName);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;RSAEncryptionPadding;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;RSAEncryptionPadding;false;get_OaepHashAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;RSAOAEPKeyExchangeDeformatter;false;RSAOAEPKeyExchangeDeformatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAOAEPKeyExchangeDeformatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAOAEPKeyExchangeFormatter;false;RSAOAEPKeyExchangeFormatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAOAEPKeyExchangeFormatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAOAEPKeyExchangeFormatter;false;get_Rng;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;RSAOAEPKeyExchangeFormatter;false;set_Rng;(System.Security.Cryptography.RandomNumberGenerator);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeDeformatter;false;RSAPKCS1KeyExchangeDeformatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeDeformatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeDeformatter;false;get_RNG;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeDeformatter;false;set_RNG;(System.Security.Cryptography.RandomNumberGenerator);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeFormatter;false;RSAPKCS1KeyExchangeFormatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeFormatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeFormatter;false;get_Rng;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeFormatter;false;set_Rng;(System.Security.Cryptography.RandomNumberGenerator);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1SignatureDeformatter;false;RSAPKCS1SignatureDeformatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1SignatureDeformatter;false;SetHashAlgorithm;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1SignatureDeformatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1SignatureFormatter;false;RSAPKCS1SignatureFormatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1SignatureFormatter;false;SetHashAlgorithm;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1SignatureFormatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Principal;GenericIdentity;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.Security.Principal.GenericIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Principal;GenericIdentity;false;get_AuthenticationType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Principal;GenericIdentity;false;get_Claims;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Principal;GenericIdentity;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Principal;GenericPrincipal;false;GenericPrincipal;(System.Security.Principal.IIdentity,System.String[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Principal;GenericPrincipal;false;get_Identity;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Security;PermissionSet;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security;PermissionSet;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Security;PermissionSet;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Security;SecurityElement;false;AddAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;AddAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;AddChild;(System.Security.SecurityElement);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;Attribute;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;Copy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;Escape;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;SearchForChildByTag;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;SearchForTextOfTag;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;SecurityElement;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;SecurityElement;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;SecurityElement;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;get_Children;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;get_Tag;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;set_Children;(System.Collections.ArrayList);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;set_Tag;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;set_Text;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security;SecurityException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Text.Encodings.Web;TextEncoder;false;Encode;(System.IO.TextWriter,System.String);;Argument[1];Argument[0];generated:taint | +| System.Text.Encodings.Web;TextEncoder;true;Encode;(System.IO.TextWriter,System.Char[],System.Int32,System.Int32);;Argument[1].Element;Argument[0];generated:taint | +| System.Text.Encodings.Web;TextEncoder;true;Encode;(System.IO.TextWriter,System.String,System.Int32,System.Int32);;Argument[1];Argument[0];generated:taint | +| System.Text.Encodings.Web;TextEncoder;true;Encode;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json.Serialization;JsonStringEnumConverter;false;JsonStringEnumConverter;(System.Text.Json.JsonNamingPolicy,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonDocument;false;Parse;(System.Buffers.ReadOnlySequence,System.Text.Json.JsonDocumentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonDocument;false;Parse;(System.IO.Stream,System.Text.Json.JsonDocumentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonDocument;false;Parse;(System.ReadOnlyMemory,System.Text.Json.JsonDocumentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonDocument;false;ParseValue;(System.Text.Json.Utf8JsonReader);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonDocument;false;TryParseValue;(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonDocument);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonDocument;false;get_RootElement;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text.Json;JsonElement+ArrayEnumerator;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Text.Json;JsonElement+ArrayEnumerator;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Text.Json;JsonElement+ArrayEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement+ArrayEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text.Json;JsonElement+ObjectEnumerator;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Text.Json;JsonElement+ObjectEnumerator;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Text.Json;JsonElement+ObjectEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;Clone;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Text.Json;JsonElement;false;EnumerateArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;EnumerateObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;GetProperty;(System.ReadOnlySpan);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;GetProperty;(System.ReadOnlySpan);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;GetProperty;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;TryGetProperty;(System.String,System.Text.Json.JsonElement);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonEncodedText;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Text.Json;JsonException;false;JsonException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonException;false;JsonException;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonException;false;JsonException;(System.String,System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonException;false;JsonException;(System.String,System.String,System.Nullable,System.Nullable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonException;false;JsonException;(System.String,System.String,System.Nullable,System.Nullable,System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonReaderState;false;JsonReaderState;(System.Text.Json.JsonReaderOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonReaderState;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializer;false;Deserialize;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializer;false;Deserialize<>;(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonSerializerOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializerOptions;false;JsonSerializerOptions;(System.Text.Json.JsonSerializerOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonSerializerOptions;false;get_DictionaryKeyPolicy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializerOptions;false;get_Encoder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializerOptions;false;get_PropertyNamingPolicy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializerOptions;false;get_ReferenceHandler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializerOptions;false;set_DictionaryKeyPolicy;(System.Text.Json.JsonNamingPolicy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonSerializerOptions;false;set_Encoder;(System.Text.Encodings.Web.JavaScriptEncoder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonSerializerOptions;false;set_PropertyNamingPolicy;(System.Text.Json.JsonNamingPolicy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonSerializerOptions;false;set_ReferenceHandler;(System.Text.Json.Serialization.ReferenceHandler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonReader;false;Utf8JsonReader;(System.Buffers.ReadOnlySequence,System.Boolean,System.Text.Json.JsonReaderState);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonReader;false;Utf8JsonReader;(System.Buffers.ReadOnlySequence,System.Boolean,System.Text.Json.JsonReaderState);;Argument[2];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonReader;false;Utf8JsonReader;(System.ReadOnlySpan,System.Boolean,System.Text.Json.JsonReaderState);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonReader;false;Utf8JsonReader;(System.ReadOnlySpan,System.Boolean,System.Text.Json.JsonReaderState);;Argument[2];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonReader;false;get_CurrentState;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;Utf8JsonReader;false;get_Position;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;Utf8JsonWriter;false;Reset;(System.Buffers.IBufferWriter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonWriter;false;Reset;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonWriter;false;Utf8JsonWriter;(System.Buffers.IBufferWriter,System.Text.Json.JsonWriterOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonWriter;false;Utf8JsonWriter;(System.Buffers.IBufferWriter,System.Text.Json.JsonWriterOptions);;Argument[1];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonWriter;false;Utf8JsonWriter;(System.IO.Stream,System.Text.Json.JsonWriterOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonWriter;false;Utf8JsonWriter;(System.IO.Stream,System.Text.Json.JsonWriterOptions);;Argument[1];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonWriter;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text.RegularExpressions;CaptureCollection;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;CaptureCollection;false;Add;(System.Text.RegularExpressions.Capture);;Argument[0];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;CaptureCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | @@ -2070,8 +6967,10 @@ | System.Text.RegularExpressions;CaptureCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;CaptureCollection;false;Insert;(System.Int32,System.Text.RegularExpressions.Capture);;Argument[1];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;CaptureCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Text.RegularExpressions;CaptureCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text.RegularExpressions;CaptureCollection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;CaptureCollection;false;set_Item;(System.Int32,System.Text.RegularExpressions.Capture);;Argument[1];Argument[Qualifier].Element;value | +| System.Text.RegularExpressions;Group;false;Synchronized;(System.Text.RegularExpressions.Group);;Argument[0];ReturnValue;generated:taint | | System.Text.RegularExpressions;GroupCollection;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;GroupCollection;false;Add;(System.Text.RegularExpressions.Group);;Argument[0];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;GroupCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | @@ -2080,10 +6979,15 @@ | System.Text.RegularExpressions;GroupCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Text.RegularExpressions;GroupCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;GroupCollection;false;Insert;(System.Int32,System.Text.RegularExpressions.Group);;Argument[1];Argument[Qualifier].Element;value | +| System.Text.RegularExpressions;GroupCollection;false;TryGetValue;(System.String,System.Text.RegularExpressions.Group);;Argument[Qualifier];ReturnValue;generated:taint | | System.Text.RegularExpressions;GroupCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Text.RegularExpressions;GroupCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | +| System.Text.RegularExpressions;GroupCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;GroupCollection;false;get_Values;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text.RegularExpressions;GroupCollection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;GroupCollection;false;set_Item;(System.Int32,System.Text.RegularExpressions.Group);;Argument[1];Argument[Qualifier].Element;value | +| System.Text.RegularExpressions;Match;false;NextMatch;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Match;false;Synchronized;(System.Text.RegularExpressions.Match);;Argument[0];ReturnValue;generated:taint | | System.Text.RegularExpressions;MatchCollection;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;MatchCollection;false;Add;(System.Text.RegularExpressions.Match);;Argument[0];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;MatchCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | @@ -2093,8 +6997,72 @@ | System.Text.RegularExpressions;MatchCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;MatchCollection;false;Insert;(System.Int32,System.Text.RegularExpressions.Match);;Argument[1];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;MatchCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Text.RegularExpressions;MatchCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Text.RegularExpressions;MatchCollection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Text.RegularExpressions;MatchCollection;false;set_Item;(System.Int32,System.Text.RegularExpressions.Match);;Argument[1];Argument[Qualifier].Element;value | +| System.Text.RegularExpressions;Regex;false;Escape;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;GroupNameFromNumber;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;IsMatch;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;IsMatch;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Match;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Match;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Match;(System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions);;Argument[1];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[1];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[3];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.String,System.Text.RegularExpressions.RegexOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.String,System.Text.RegularExpressions.RegexOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Unescape;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;get_CapNames;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;get_Caps;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;get_MatchTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;set_CapNames;(System.Collections.IDictionary);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;set_Caps;(System.Collections.IDictionary);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;RegexCompilationInfo;(System.String,System.Text.RegularExpressions.RegexOptions,System.String,System.String,System.Boolean,System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;RegexCompilationInfo;(System.String,System.Text.RegularExpressions.RegexOptions,System.String,System.String,System.Boolean,System.TimeSpan);;Argument[2];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;RegexCompilationInfo;(System.String,System.Text.RegularExpressions.RegexOptions,System.String,System.String,System.Boolean,System.TimeSpan);;Argument[3];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;RegexCompilationInfo;(System.String,System.Text.RegularExpressions.RegexOptions,System.String,System.String,System.Boolean,System.TimeSpan);;Argument[5];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;get_MatchTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;get_Pattern;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;set_MatchTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;set_Pattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexMatchTimeoutException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Text.RegularExpressions;RegexParseException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean,System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean,System.TimeSpan);;Argument[1];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean,System.TimeSpan);;Argument[Qualifier];ReturnValue;generated:taint | | System.Text;ASCIIEncoding;false;GetBytes;(System.Char*,System.Int32,System.Byte*,System.Int32);;Argument[0];ReturnValue;taint | | System.Text;ASCIIEncoding;false;GetBytes;(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;ASCIIEncoding;false;GetBytes;(System.ReadOnlySpan,System.Span);;Argument[0];ReturnValue;taint | @@ -2102,10 +7070,43 @@ | System.Text;ASCIIEncoding;false;GetChars;(System.Byte*,System.Int32,System.Char*,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;ASCIIEncoding;false;GetChars;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;ASCIIEncoding;false;GetChars;(System.ReadOnlySpan,System.Span);;Argument[0].Element;ReturnValue;taint | +| System.Text;ASCIIEncoding;false;GetDecoder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;ASCIIEncoding;false;GetEncoder;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text;ASCIIEncoding;false;GetString;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | +| System.Text;Decoder;false;get_Fallback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Decoder;false;get_FallbackBuffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Decoder;false;set_Fallback;(System.Text.DecoderFallback);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;DecoderFallbackException;false;DecoderFallbackException;(System.String,System.Byte[],System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Text;DecoderFallbackException;false;get_BytesUnknown;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;DecoderReplacementFallback;false;CreateFallbackBuffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;DecoderReplacementFallback;false;DecoderReplacementFallback;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;DecoderReplacementFallback;false;get_DefaultString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;DecoderReplacementFallbackBuffer;false;DecoderReplacementFallbackBuffer;(System.Text.DecoderReplacementFallback);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;Encoder;false;get_Fallback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Encoder;false;get_FallbackBuffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Encoder;false;set_Fallback;(System.Text.EncoderFallback);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;EncoderReplacementFallback;false;CreateFallbackBuffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;EncoderReplacementFallback;false;EncoderReplacementFallback;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;EncoderReplacementFallback;false;get_DefaultString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;EncoderReplacementFallbackBuffer;false;EncoderReplacementFallbackBuffer;(System.Text.EncoderReplacementFallback);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;Encoding;false;Convert;(System.Text.Encoding,System.Text.Encoding,System.Byte[]);;Argument[2].Element;ReturnValue;generated:taint | +| System.Text;Encoding;false;Convert;(System.Text.Encoding,System.Text.Encoding,System.Byte[],System.Int32,System.Int32);;Argument[2].Element;ReturnValue;generated:taint | +| System.Text;Encoding;false;CreateTranscodingStream;(System.IO.Stream,System.Text.Encoding,System.Text.Encoding,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Text;Encoding;false;CreateTranscodingStream;(System.IO.Stream,System.Text.Encoding,System.Text.Encoding,System.Boolean);;Argument[1];ReturnValue;generated:taint | +| System.Text;Encoding;false;CreateTranscodingStream;(System.IO.Stream,System.Text.Encoding,System.Text.Encoding,System.Boolean);;Argument[2];ReturnValue;generated:taint | +| System.Text;Encoding;false;Encoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];Argument[Qualifier];generated:taint | +| System.Text;Encoding;false;Encoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[2];Argument[Qualifier];generated:taint | | System.Text;Encoding;false;GetBytes;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;taint | +| System.Text;Encoding;false;GetEncoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];ReturnValue;generated:taint | +| System.Text;Encoding;false;GetEncoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[2];ReturnValue;generated:taint | +| System.Text;Encoding;false;GetEncoding;(System.String,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];ReturnValue;generated:taint | +| System.Text;Encoding;false;GetEncoding;(System.String,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[2];ReturnValue;generated:taint | | System.Text;Encoding;false;GetString;(System.Byte*,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;Encoding;false;GetString;(System.ReadOnlySpan);;Argument[0].Element;ReturnValue;taint | +| System.Text;Encoding;false;get_DecoderFallback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Encoding;false;get_EncoderFallback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Encoding;false;set_DecoderFallback;(System.Text.DecoderFallback);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;Encoding;false;set_EncoderFallback;(System.Text.EncoderFallback);;Argument[0];Argument[Qualifier];generated:taint | | System.Text;Encoding;true;GetBytes;(System.Char*,System.Int32,System.Byte*,System.Int32);;Argument[0];ReturnValue;taint | | System.Text;Encoding;true;GetBytes;(System.Char[]);;Argument[0].Element;ReturnValue;taint | | System.Text;Encoding;true;GetBytes;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | @@ -2118,8 +7119,16 @@ | System.Text;Encoding;true;GetChars;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;Encoding;true;GetChars;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;Encoding;true;GetChars;(System.ReadOnlySpan,System.Span);;Argument[0].Element;ReturnValue;taint | +| System.Text;Encoding;true;GetDecoder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Encoding;true;GetEncoder;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text;Encoding;true;GetString;(System.Byte[]);;Argument[0].Element;ReturnValue;taint | | System.Text;Encoding;true;GetString;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | +| System.Text;EncodingProvider;true;GetEncoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];ReturnValue;generated:taint | +| System.Text;EncodingProvider;true;GetEncoding;(System.String,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];ReturnValue;generated:taint | +| System.Text;SpanRuneEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;SpanRuneEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder+ChunkEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder+ChunkEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text;StringBuilder;false;Append;(System.Boolean);;Argument[Qualifier];ReturnValue;value | | System.Text;StringBuilder;false;Append;(System.Byte);;Argument[Qualifier];ReturnValue;value | | System.Text;StringBuilder;false;Append;(System.Char);;Argument[Qualifier];ReturnValue;value | @@ -2197,6 +7206,32 @@ | System.Text;StringBuilder;false;AppendLine;();;Argument[Qualifier];ReturnValue;value | | System.Text;StringBuilder;false;AppendLine;(System.String);;Argument[0];Argument[Qualifier].Element;value | | System.Text;StringBuilder;false;AppendLine;(System.String);;Argument[Qualifier];ReturnValue;value | +| System.Text;StringBuilder;false;GetChunks;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Byte);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Char);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Char[]);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Decimal);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Double);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Int16);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Int64);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.ReadOnlySpan);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.SByte);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Single);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.String);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.String,System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.UInt16);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.UInt32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.UInt64);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Remove;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Replace;(System.Char,System.Char);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Replace;(System.Char,System.Char,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Replace;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Replace;(System.String,System.String,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:value | | System.Text;StringBuilder;false;StringBuilder;(System.String);;Argument[0];ReturnValue.Element;value | | System.Text;StringBuilder;false;StringBuilder;(System.String,System.Int32);;Argument[0];ReturnValue.Element;value | | System.Text;StringBuilder;false;StringBuilder;(System.String,System.Int32,System.Int32,System.Int32);;Argument[0];ReturnValue.Element;value | @@ -2204,11 +7239,15 @@ | System.Text;StringBuilder;false;ToString;(System.Int32,System.Int32);;Argument[Qualifier].Element;ReturnValue;taint | | System.Text;StringRuneEnumerator;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Text;StringRuneEnumerator;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Text;StringRuneEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringRuneEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text;UTF7Encoding;false;GetBytes;(System.Char*,System.Int32,System.Byte*,System.Int32);;Argument[0];ReturnValue;taint | | System.Text;UTF7Encoding;false;GetBytes;(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;UTF7Encoding;false;GetBytes;(System.String,System.Int32,System.Int32,System.Byte[],System.Int32);;Argument[0];ReturnValue;taint | | System.Text;UTF7Encoding;false;GetChars;(System.Byte*,System.Int32,System.Char*,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;UTF7Encoding;false;GetChars;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);;Argument[0].Element;ReturnValue;taint | +| System.Text;UTF7Encoding;false;GetDecoder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;UTF7Encoding;false;GetEncoder;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text;UTF7Encoding;false;GetString;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;UTF8Encoding;false;GetBytes;(System.Char*,System.Int32,System.Byte*,System.Int32);;Argument[0];ReturnValue;taint | | System.Text;UTF8Encoding;false;GetBytes;(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32);;Argument[0].Element;ReturnValue;taint | @@ -2217,19 +7256,115 @@ | System.Text;UTF8Encoding;false;GetChars;(System.Byte*,System.Int32,System.Char*,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;UTF8Encoding;false;GetChars;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;UTF8Encoding;false;GetChars;(System.ReadOnlySpan,System.Span);;Argument[0].Element;ReturnValue;taint | +| System.Text;UTF8Encoding;false;GetDecoder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;UTF8Encoding;false;GetEncoder;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text;UTF8Encoding;false;GetString;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;UTF32Encoding;false;GetBytes;(System.Char*,System.Int32,System.Byte*,System.Int32);;Argument[0];ReturnValue;taint | | System.Text;UTF32Encoding;false;GetBytes;(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;UTF32Encoding;false;GetBytes;(System.String,System.Int32,System.Int32,System.Byte[],System.Int32);;Argument[0];ReturnValue;taint | | System.Text;UTF32Encoding;false;GetChars;(System.Byte*,System.Int32,System.Char*,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;UTF32Encoding;false;GetChars;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);;Argument[0].Element;ReturnValue;taint | +| System.Text;UTF32Encoding;false;GetDecoder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;UTF32Encoding;false;GetEncoder;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text;UTF32Encoding;false;GetString;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;UnicodeEncoding;false;GetBytes;(System.Char*,System.Int32,System.Byte*,System.Int32);;Argument[0];ReturnValue;taint | | System.Text;UnicodeEncoding;false;GetBytes;(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;UnicodeEncoding;false;GetBytes;(System.String,System.Int32,System.Int32,System.Byte[],System.Int32);;Argument[0];ReturnValue;taint | | System.Text;UnicodeEncoding;false;GetChars;(System.Byte*,System.Int32,System.Char*,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;UnicodeEncoding;false;GetChars;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);;Argument[0].Element;ReturnValue;taint | +| System.Text;UnicodeEncoding;false;GetDecoder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;UnicodeEncoding;false;GetEncoder;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text;UnicodeEncoding;false;GetString;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | +| System.Threading.Tasks.Dataflow;BatchBlock<>;false;BatchBlock;(System.Int32,System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BatchBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchBlock<>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;BatchedJoinBlock;(System.Int32,System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;get_Target1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;get_Target2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;get_Target3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;BatchedJoinBlock;(System.Int32,System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;get_Target1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;get_Target2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;TryReceiveAll;(System.Collections.Generic.IList);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BufferBlock<>;false;BufferBlock;(System.Threading.Tasks.Dataflow.DataflowBlockOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BufferBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BufferBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BufferBlock<>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;AsObservable<>;(System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;AsObserver<>;(System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Encapsulate<,>;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Encapsulate<,>;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[1];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;LinkTo<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[0];Argument[1];generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;LinkTo<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;LinkTo<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Post<>;(System.Threading.Tasks.Dataflow.ITargetBlock,TInput);;Argument[1];Argument[0];generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Receive<>;(System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Receive<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Receive<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Receive<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;ReceiveAsync<>;(System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;ReceiveAsync<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;ReceiveAsync<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;ReceiveAsync<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;SendAsync<>;(System.Threading.Tasks.Dataflow.ITargetBlock,TInput,System.Threading.CancellationToken);;Argument[1];Argument[0];generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;TryReceive<>;(System.Threading.Tasks.Dataflow.IReceivableSourceBlock,TOutput);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;get_NameFormat;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;get_TaskScheduler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;set_CancellationToken;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;set_NameFormat;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;set_TaskScheduler;(System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;JoinBlock;(System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock>);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;get_Target1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;get_Target2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;get_Target3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,>;false;JoinBlock;(System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock>);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,>;false;get_Target1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,>;false;get_Target2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;TransformBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;TransformBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;TransformBlock<,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;TransformManyBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;TransformManyBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;TransformManyBlock<,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];Argument[0];generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;OfferMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,T,System.Threading.Tasks.Dataflow.ISourceBlock,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[Qualifier];Argument[1];generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;TryReceiveAll;(System.Collections.Generic.IList);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;get_Completion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Sources;ManualResetValueTaskSourceCore<>;false;GetResult;(System.Int16);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Sources;ManualResetValueTaskSourceCore<>;false;SetException;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Sources;ManualResetValueTaskSourceCore<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ConcurrentExclusiveSchedulerPair;false;ConcurrentExclusiveSchedulerPair;(System.Threading.Tasks.TaskScheduler,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ConcurrentExclusiveSchedulerPair;false;get_ConcurrentScheduler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ConcurrentExclusiveSchedulerPair;false;get_ExclusiveScheduler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ParallelLoopResult;false;get_LowestBreakIteration;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ParallelOptions;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ParallelOptions;false;get_TaskScheduler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ParallelOptions;false;set_CancellationToken;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ParallelOptions;false;set_TaskScheduler;(System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;Task;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | | System.Threading.Tasks;Task;false;ContinueWith;(System.Action,System.Object);;Argument[1];Argument[0].Parameter[1];value | | System.Threading.Tasks;Task;false;ContinueWith;(System.Action,System.Object,System.Threading.CancellationToken);;Argument[1];Argument[0].Parameter[1];value | | System.Threading.Tasks;Task;false;ContinueWith;(System.Action,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[1];Argument[0].Parameter[1];value | @@ -2250,7 +7385,11 @@ | System.Threading.Tasks;Task;false;ContinueWith<>;(System.Func,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;Task;false;ContinueWith<>;(System.Func,System.Threading.Tasks.TaskContinuationOptions);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;Task;false;ContinueWith<>;(System.Func,System.Threading.Tasks.TaskScheduler);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | +| System.Threading.Tasks;Task;false;Delay;(System.Int32,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Threading.Tasks;Task;false;Delay;(System.TimeSpan,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Threading.Tasks;Task;false;FromCanceled;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | | System.Threading.Tasks;Task;false;FromResult<>;(TResult);;Argument[0];ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | +| System.Threading.Tasks;Task;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Threading.Tasks;Task;false;Run<>;(System.Func>);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;Task;false;Run<>;(System.Func>,System.Threading.CancellationToken);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;Task;false;Run<>;(System.Func);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | @@ -2259,12 +7398,19 @@ | System.Threading.Tasks;Task;false;Task;(System.Action,System.Object,System.Threading.CancellationToken);;Argument[1];Argument[0].Parameter[0];value | | System.Threading.Tasks;Task;false;Task;(System.Action,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions);;Argument[1];Argument[0].Parameter[0];value | | System.Threading.Tasks;Task;false;Task;(System.Action,System.Object,System.Threading.Tasks.TaskCreationOptions);;Argument[1];Argument[0].Parameter[0];value | +| System.Threading.Tasks;Task;false;WhenAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Threading.Tasks;Task;false;WhenAll;(System.Threading.Tasks.Task[]);;Argument[0].Element;ReturnValue;generated:taint | | System.Threading.Tasks;Task;false;WhenAll<>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element.Property[System.Threading.Tasks.Task<>.Result];ReturnValue.Property[System.Threading.Tasks.Task<>.Result].Element;value | | System.Threading.Tasks;Task;false;WhenAll<>;(System.Threading.Tasks.Task[]);;Argument[0].Element.Property[System.Threading.Tasks.Task<>.Result];ReturnValue.Property[System.Threading.Tasks.Task<>.Result].Element;value | +| System.Threading.Tasks;Task;false;WhenAny;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Threading.Tasks;Task;false;WhenAny;(System.Threading.Tasks.Task,System.Threading.Tasks.Task);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks;Task;false;WhenAny;(System.Threading.Tasks.Task,System.Threading.Tasks.Task);;Argument[1];ReturnValue;generated:taint | +| System.Threading.Tasks;Task;false;WhenAny;(System.Threading.Tasks.Task[]);;Argument[0].Element;ReturnValue;generated:taint | | System.Threading.Tasks;Task;false;WhenAny<>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element.Property[System.Threading.Tasks.Task<>.Result];ReturnValue.Property[System.Threading.Tasks.Task<>.Result].Element;value | | System.Threading.Tasks;Task;false;WhenAny<>;(System.Threading.Tasks.Task,System.Threading.Tasks.Task);;Argument[0].Element.Property[System.Threading.Tasks.Task<>.Result];ReturnValue.Property[System.Threading.Tasks.Task<>.Result].Element;value | | System.Threading.Tasks;Task;false;WhenAny<>;(System.Threading.Tasks.Task,System.Threading.Tasks.Task);;Argument[1].Element.Property[System.Threading.Tasks.Task<>.Result];ReturnValue.Property[System.Threading.Tasks.Task<>.Result].Element;value | | System.Threading.Tasks;Task;false;WhenAny<>;(System.Threading.Tasks.Task[]);;Argument[0].Element.Property[System.Threading.Tasks.Task<>.Result];ReturnValue.Property[System.Threading.Tasks.Task<>.Result].Element;value | +| System.Threading.Tasks;Task;false;get_AsyncState;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Threading.Tasks;Task<>;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue.SyntheticField[m_configuredTaskAwaiter].SyntheticField[m_task_configured_task_awaitable];value | | System.Threading.Tasks;Task<>;false;ContinueWith;(System.Action,System.Object>,System.Object);;Argument[1];Argument[0].Parameter[1];value | | System.Threading.Tasks;Task<>;false;ContinueWith;(System.Action,System.Object>,System.Object);;Argument[Qualifier];Argument[0].Parameter[0];value | @@ -2320,6 +7466,19 @@ | System.Threading.Tasks;Task<>;false;Task;(System.Func,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;Task<>;false;Task;(System.Func,System.Threading.Tasks.TaskCreationOptions);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;Task<>;false;get_Result;();;Argument[Qualifier];ReturnValue;taint | +| System.Threading.Tasks;TaskAsyncEnumerableExtensions;false;ConfigureAwait;(System.IAsyncDisposable,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskAsyncEnumerableExtensions;false;ConfigureAwait<>;(System.Collections.Generic.IAsyncEnumerable,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskAsyncEnumerableExtensions;false;WithCancellation<>;(System.Collections.Generic.IAsyncEnumerable,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskAsyncEnumerableExtensions;false;WithCancellation<>;(System.Collections.Generic.IAsyncEnumerable,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskCanceledException;false;TaskCanceledException;(System.Threading.Tasks.Task);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskCanceledException;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskCompletionSource;false;TaskCompletionSource;(System.Object,System.Threading.Tasks.TaskCreationOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskCompletionSource;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskCompletionSource<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskCompletionSource<>;false;TrySetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskCompletionSource<>;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskExtensions;false;Unwrap;(System.Threading.Tasks.Task);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskExtensions;false;Unwrap<>;(System.Threading.Tasks.Task>);;Argument[0];ReturnValue;generated:taint | | System.Threading.Tasks;TaskFactory;false;ContinueWhenAll<,>;(System.Threading.Tasks.Task[],System.Func[],TResult>);;Argument[0];Argument[1].Parameter[0];value | | System.Threading.Tasks;TaskFactory;false;ContinueWhenAll<,>;(System.Threading.Tasks.Task[],System.Func[],TResult>);;Argument[1].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory;false;ContinueWhenAll<,>;(System.Threading.Tasks.Task[],System.Func[],TResult>,System.Threading.CancellationToken);;Argument[0];Argument[1].Parameter[0];value | @@ -2368,6 +7527,12 @@ | System.Threading.Tasks;TaskFactory;false;StartNew<>;(System.Func,System.Threading.CancellationToken);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory;false;StartNew<>;(System.Func,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory;false;StartNew<>;(System.Func,System.Threading.Tasks.TaskCreationOptions);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | +| System.Threading.Tasks;TaskFactory;false;TaskFactory;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory;false;TaskFactory;(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory;false;TaskFactory;(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[3];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory;false;TaskFactory;(System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskFactory;false;get_Scheduler;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Threading.Tasks;TaskFactory<>;false;ContinueWhenAll;(System.Threading.Tasks.Task[],System.Func);;Argument[1].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory<>;false;ContinueWhenAll;(System.Threading.Tasks.Task[],System.Func,System.Threading.CancellationToken);;Argument[1].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory<>;false;ContinueWhenAll;(System.Threading.Tasks.Task[],System.Func,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[1].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | @@ -2404,6 +7569,86 @@ | System.Threading.Tasks;TaskFactory<>;false;StartNew;(System.Func,System.Threading.CancellationToken);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory<>;false;StartNew;(System.Func,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory<>;false;StartNew;(System.Func,System.Threading.Tasks.TaskCreationOptions);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | +| System.Threading.Tasks;TaskFactory<>;false;TaskFactory;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory<>;false;TaskFactory;(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory<>;false;TaskFactory;(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[3];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory<>;false;TaskFactory;(System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory<>;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskFactory<>;false;get_Scheduler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;UnobservedTaskExceptionEventArgs;false;UnobservedTaskExceptionEventArgs;(System.AggregateException);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;UnobservedTaskExceptionEventArgs;false;get_Exception;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask;false;AsTask;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask;false;FromResult<>;(TResult);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask;false;Preserve;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask;false;ValueTask;(System.Threading.Tasks.Sources.IValueTaskSource,System.Int16);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ValueTask;false;ValueTask;(System.Threading.Tasks.Task);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ValueTask<>;false;AsTask;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask<>;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask<>;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask<>;false;Preserve;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask<>;false;ValueTask;(System.Threading.Tasks.Sources.IValueTaskSource,System.Int16);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ValueTask<>;false;ValueTask;(System.Threading.Tasks.Task);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ValueTask<>;false;ValueTask;(TResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ValueTask<>;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;AbandonedMutexException;false;AbandonedMutexException;(System.Int32,System.Threading.WaitHandle);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading;AbandonedMutexException;false;AbandonedMutexException;(System.String,System.Exception,System.Int32,System.Threading.WaitHandle);;Argument[3];Argument[Qualifier];generated:taint | +| System.Threading;AbandonedMutexException;false;AbandonedMutexException;(System.String,System.Int32,System.Threading.WaitHandle);;Argument[2];Argument[Qualifier];generated:taint | +| System.Threading;AbandonedMutexException;false;get_Mutex;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;CancellationToken;false;get_WaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;CancellationTokenSource;false;get_Token;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;CompressedStack;false;CreateCopy;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Threading;CountdownEvent;false;get_WaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;ExecutionContext;false;CreateCopy;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Threading;HostExecutionContextManager;false;SetHostExecutionContext;(System.Threading.HostExecutionContext);;Argument[0];ReturnValue;generated:taint | +| System.Threading;LazyInitializer;false;EnsureInitialized<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Threading;LazyInitializer;false;EnsureInitialized<>;(T,System.Boolean,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Threading;LazyInitializer;false;EnsureInitialized<>;(T,System.Boolean,System.Object);;Argument[2];ReturnValue;generated:taint | +| System.Threading;ManualResetEventSlim;false;get_WaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;WaitAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;WaitAsync;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;WaitAsync;(System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;WaitAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;WaitAsync;(System.TimeSpan);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;WaitAsync;(System.TimeSpan,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;get_AvailableWaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;Thread;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;Thread;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading;ThreadExceptionEventArgs;false;ThreadExceptionEventArgs;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading;ThreadExceptionEventArgs;false;get_Exception;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;WaitHandle;false;set_SafeWaitHandle;(Microsoft.Win32.SafeHandles.SafeWaitHandle);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading;WaitHandle;true;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;WaitHandle;true;set_Handle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading;WaitHandleExtensions;false;SetSafeWaitHandle;(System.Threading.WaitHandle,Microsoft.Win32.SafeHandles.SafeWaitHandle);;Argument[1];Argument[0];generated:taint | +| System.Timers;Timer;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Timers;Timer;false;get_SynchronizingObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Timers;Timer;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint | +| System.Timers;Timer;false;set_SynchronizingObject;(System.ComponentModel.ISynchronizeInvoke);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;CommittableTransaction;false;get_AsyncState;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;CommittableTransaction;false;get_AsyncWaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;EnlistDurable;(System.Guid,System.Transactions.ISinglePhaseNotification,System.Transactions.EnlistmentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;EnlistPromotableSinglePhase;(System.Transactions.IPromotableSinglePhaseNotification);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;Transaction;false;EnlistPromotableSinglePhase;(System.Transactions.IPromotableSinglePhaseNotification,System.Guid);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;Transaction;false;EnlistPromotableSinglePhase;(System.Transactions.IPromotableSinglePhaseNotification,System.Guid);;Argument[1];Argument[Qualifier];generated:taint | +| System.Transactions;Transaction;false;EnlistVolatile;(System.Transactions.IEnlistmentNotification,System.Transactions.EnlistmentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;EnlistVolatile;(System.Transactions.IEnlistmentNotification,System.Transactions.EnlistmentOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;EnlistVolatile;(System.Transactions.ISinglePhaseNotification,System.Transactions.EnlistmentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;EnlistVolatile;(System.Transactions.ISinglePhaseNotification,System.Transactions.EnlistmentOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;PromoteAndEnlistDurable;(System.Guid,System.Transactions.IPromotableSinglePhaseNotification,System.Transactions.ISinglePhaseNotification,System.Transactions.EnlistmentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;Rollback;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;Transaction;false;SetDistributedTransactionIdentifier;(System.Transactions.IPromotableSinglePhaseNotification,System.Guid);;Argument[1];Argument[Qualifier];generated:taint | +| System.Transactions;Transaction;false;get_PromoterType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;get_TransactionInformation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;TransactionEventArgs;false;get_Transaction;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;TransactionInformation;false;get_DistributedIdentifier;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;TransactionOptions;false;get_Timeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;TransactionOptions;false;set_Timeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;TransactionScope;false;TransactionScope;(System.Transactions.Transaction,System.TimeSpan,System.Transactions.EnterpriseServicesInteropOption);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;TransactionScope;false;TransactionScope;(System.Transactions.Transaction,System.TimeSpan,System.Transactions.TransactionScopeAsyncFlowOption);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;TransactionScope;false;TransactionScope;(System.Transactions.Transaction,System.Transactions.TransactionScopeAsyncFlowOption);;Argument[0];Argument[Qualifier];generated:taint | | System.Web.UI.WebControls;TextBox;false;get_Text;();;Argument[Qualifier];ReturnValue;taint | | System.Web;HttpCookie;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | | System.Web;HttpCookie;false;get_Values;();;Argument[Qualifier];ReturnValue;taint | @@ -2411,6 +7656,8 @@ | System.Web;HttpServerUtility;false;UrlEncode;(System.String);;Argument[0];ReturnValue;taint | | System.Web;HttpUtility;false;HtmlAttributeEncode;(System.String);;Argument[0];ReturnValue;taint | | System.Web;HttpUtility;false;HtmlAttributeEncode;(System.String,System.IO.TextWriter);;Argument[0];ReturnValue;taint | +| System.Web;HttpUtility;false;HtmlDecode;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Web;HttpUtility;false;HtmlDecode;(System.String,System.IO.TextWriter);;Argument[0];Argument[1];generated:taint | | System.Web;HttpUtility;false;HtmlEncode;(System.Object);;Argument[0];ReturnValue;taint | | System.Web;HttpUtility;false;HtmlEncode;(System.String);;Argument[0];ReturnValue;taint | | System.Web;HttpUtility;false;HtmlEncode;(System.String,System.IO.TextWriter);;Argument[0];ReturnValue;taint | @@ -2420,93 +7667,1326 @@ | System.Web;HttpUtility;false;UrlEncode;(System.Byte[],System.Int32,System.Int32);;Argument[0];ReturnValue;taint | | System.Web;HttpUtility;false;UrlEncode;(System.String);;Argument[0];ReturnValue;taint | | System.Web;HttpUtility;false;UrlEncode;(System.String,System.Text.Encoding);;Argument[0];ReturnValue;taint | +| System.Web;HttpUtility;false;UrlEncodeToBytes;(System.Byte[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Web;HttpUtility;false;UrlEncodeToBytes;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Web;HttpUtility;false;UrlEncodeToBytes;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Web;HttpUtility;false;UrlEncodeToBytes;(System.String,System.Text.Encoding);;Argument[0];ReturnValue;generated:taint | +| System.Web;HttpUtility;false;UrlPathEncode;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Windows.Markup;ValueSerializerAttribute;false;ValueSerializerAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Windows.Markup;ValueSerializerAttribute;false;ValueSerializerAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Windows.Markup;ValueSerializerAttribute;false;get_ValueSerializerType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Windows.Markup;ValueSerializerAttribute;false;get_ValueSerializerTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Ancestors<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Ancestors<>;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;AncestorsAndSelf;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;AncestorsAndSelf;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Attributes;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Attributes;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;DescendantNodes<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;DescendantNodesAndSelf;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Descendants<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Descendants<>;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;DescendantsAndSelf;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;DescendantsAndSelf;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Elements<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Elements<>;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;InDocumentOrder<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Nodes<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;XAttribute;false;SetValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XAttribute;false;XAttribute;(System.Xml.Linq.XAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XAttribute;false;XAttribute;(System.Xml.Linq.XName,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XAttribute;false;XAttribute;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XAttribute;false;get_NextAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XAttribute;false;get_PreviousAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XAttribute;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XCData;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XCData;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XComment;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XComment;false;XComment;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XComment;false;XComment;(System.Xml.Linq.XComment);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XComment;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XComment;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XContainer;false;Add;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XContainer;false;Add;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XContainer;false;Add;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Linq;XContainer;false;Add;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XContainer;false;AddFirst;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XContainer;false;AddFirst;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XContainer;false;CreateWriter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;DescendantNodes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;Descendants;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;Descendants;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;Element;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;Elements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;Elements;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;Nodes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;ReplaceNodes;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XContainer;false;ReplaceNodes;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XContainer;false;ReplaceNodes;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Linq;XContainer;false;ReplaceNodes;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XContainer;false;get_FirstNode;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;get_LastNode;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDeclaration;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDeclaration;false;XDeclaration;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDeclaration;false;XDeclaration;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDeclaration;false;XDeclaration;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDeclaration;false;XDeclaration;(System.Xml.Linq.XDeclaration);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDeclaration;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDeclaration;false;get_Standalone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDeclaration;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDeclaration;false;set_Encoding;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDeclaration;false;set_Standalone;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDeclaration;false;set_Version;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.IO.Stream,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.IO.TextReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.IO.TextReader,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.String,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.Xml.XmlReader,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Parse;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Parse;(System.String,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Save;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XDocument;false;SaveAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XDocument;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;XDocument;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocument;false;XDocument;(System.Xml.Linq.XDeclaration,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocument;false;XDocument;(System.Xml.Linq.XDocument);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocument;false;get_Declaration;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;get_DocumentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;get_Root;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;set_Declaration;(System.Xml.Linq.XDeclaration);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XDocumentType;false;XDocumentType;(System.String,System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;XDocumentType;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;XDocumentType;(System.String,System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;XDocumentType;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;XDocumentType;(System.Xml.Linq.XDocumentType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;get_InternalSubset;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocumentType;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocumentType;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocumentType;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocumentType;false;set_InternalSubset;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;set_PublicId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;set_SystemId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;AncestorsAndSelf;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;AncestorsAndSelf;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Attribute;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Attributes;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;DescendantNodesAndSelf;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;DescendantsAndSelf;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;DescendantsAndSelf;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.IO.Stream,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.IO.TextReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.IO.TextReader,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.String,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.Xml.XmlReader,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Parse;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Parse;(System.String,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;ReadXml;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAll;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAll;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAll;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAll;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAttributes;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAttributes;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAttributes;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAttributes;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XElement;false;SaveAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;SetAttributeValue;(System.Xml.Linq.XName,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;SetAttributeValue;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;SetElementValue;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;SetValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XElement);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XName,System.Object);;Argument[Qualifier];Argument[1];generated:taint | +| System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XStreamingElement);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XStreamingElement);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XElement;false;get_FirstAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;get_LastAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;set_Name;(System.Xml.Linq.XName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XName;false;Get;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XName;false;Get;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XName;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XName;false;get_LocalName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XName;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XName;false;get_NamespaceName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNamespace;false;GetName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XNamespace;false;GetName;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNamespace;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNamespace;false;get_NamespaceName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;AddAfterSelf;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XNode;false;AddAfterSelf;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XNode;false;AddBeforeSelf;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XNode;false;AddBeforeSelf;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XNode;false;Ancestors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;Ancestors;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;CreateReader;(System.Xml.Linq.ReaderOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;ElementsAfterSelf;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;ElementsAfterSelf;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;NodesAfterSelf;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;ReadFrom;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;ReplaceWith;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XNode;false;ReplaceWith;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XNode;false;get_NextNode;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;AddAnnotation;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XObject;false;Annotation;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;Annotation<>;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;Annotations;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;Annotations<>;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;get_BaseUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;get_Document;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;XProcessingInstruction;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;XProcessingInstruction;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;XProcessingInstruction;(System.Xml.Linq.XProcessingInstruction);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;set_Data;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;set_Target;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XStreamingElement;false;XStreamingElement;(System.Xml.Linq.XName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XStreamingElement;false;XStreamingElement;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XStreamingElement;false;XStreamingElement;(System.Xml.Linq.XName,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml.Linq;XStreamingElement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XStreamingElement;false;set_Name;(System.Xml.Linq.XName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XText;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XText;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XText;false;XText;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XText;false;XText;(System.Xml.Linq.XText);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XText;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XText;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Resolvers;XmlPreloadedResolver;false;ResolveUri;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Resolvers;XmlPreloadedResolver;false;ResolveUri;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Resolvers;XmlPreloadedResolver;false;XmlPreloadedResolver;(System.Xml.XmlResolver,System.Xml.Resolvers.XmlKnownDtds,System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Resolvers;XmlPreloadedResolver;false;XmlPreloadedResolver;(System.Xml.XmlResolver,System.Xml.Resolvers.XmlKnownDtds,System.Collections.Generic.IEqualityComparer);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Resolvers;XmlPreloadedResolver;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;Extensions;false;GetSchemaInfo;(System.Xml.Linq.XAttribute);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;Extensions;false;GetSchemaInfo;(System.Xml.Linq.XElement);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;ValidationEventArgs;false;get_Exception;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;ValidationEventArgs;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlAtomicValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Xml.Schema;XmlAtomicValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlAtomicValue;false;ValueAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:value | +| System.Xml.Schema;XmlAtomicValue;false;get_TypedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlAtomicValue;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlAtomicValue;false;get_ValueAsDateTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlAtomicValue;false;get_XmlType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_AttributeGroups;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Elements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Groups;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Includes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Notations;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_SchemaTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_TargetNamespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_UnhandledAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchema;false;set_TargetNamespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchema;false;set_UnhandledAttributes;(System.Xml.XmlAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchema;false;set_Version;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAll;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotated;false;get_Annotation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotated;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotated;false;get_UnhandledAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotated;false;set_Annotation;(System.Xml.Schema.XmlSchemaAnnotation);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAnnotated;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAnnotated;false;set_UnhandledAttributes;(System.Xml.XmlAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAnnotation;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotation;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotation;false;get_UnhandledAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotation;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAnnotation;false;set_UnhandledAttributes;(System.Xml.XmlAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAny;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAny;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAnyAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnyAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAppInfo;false;get_Markup;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAppInfo;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAppInfo;false;set_Markup;(System.Xml.XmlNode[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAppInfo;false;set_Source;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_AttributeSchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_AttributeType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_DefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_FixedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_RefName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_SchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_SchemaTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;set_DefaultValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;set_FixedValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;set_RefName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;set_SchemaType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;set_SchemaTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;get_RedefinedAttributeGroup;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroupRef;false;get_RefName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroupRef;false;set_RefName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaChoice;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml.Schema;XmlSchemaCollection;false;Add;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier].Element;value | +| System.Xml.Schema;XmlSchemaCollection;false;Add;(System.Xml.Schema.XmlSchema,System.Xml.XmlResolver);;Argument[0];ReturnValue;generated:taint | | System.Xml.Schema;XmlSchemaCollection;false;Add;(System.Xml.Schema.XmlSchemaCollection);;Argument[0];Argument[Qualifier].Element;value | | System.Xml.Schema;XmlSchemaCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Schema;XmlSchemaCollection;false;CopyTo;(System.Xml.Schema.XmlSchema[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Schema;XmlSchemaCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Xml.Schema;XmlSchemaCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Xml.Schema.XmlSchemaCollectionEnumerator.Current];value | +| System.Xml.Schema;XmlSchemaCollection;false;XmlSchemaCollection;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaCollection;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Xml.Schema;XmlSchemaComplexContent;false;get_Content;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContent;false;set_Content;(System.Xml.Schema.XmlSchemaContent);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;set_Particle;(System.Xml.Schema.XmlSchemaParticle);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;set_Particle;(System.Xml.Schema.XmlSchemaParticle);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_AttributeUses;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_AttributeWildcard;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_ContentModel;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_ContentTypeParticle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;set_ContentModel;(System.Xml.Schema.XmlSchemaContentModel);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;set_Particle;(System.Xml.Schema.XmlSchemaParticle);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type,System.Xml.IXmlNamespaceResolver);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type,System.Xml.IXmlNamespaceResolver);;Argument[2];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDocumentation;false;get_Language;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDocumentation;false;get_Markup;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDocumentation;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDocumentation;false;set_Language;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaDocumentation;false;set_Markup;(System.Xml.XmlNode[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaDocumentation;false;set_Source;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_Constraints;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_DefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_ElementSchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_ElementType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_FixedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_RefName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_SchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_SchemaTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_SubstitutionGroup;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_DefaultValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_FixedValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_RefName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_SchemaType;(System.Xml.Schema.XmlSchemaType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_SchemaTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_SubstitutionGroup;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaException;false;XmlSchemaException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaException;false;get_SourceSchemaObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaException;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;get_Schema;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;get_SchemaLocation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;get_UnhandledAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;set_Schema;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;set_SchemaLocation;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;set_UnhandledAttributes;(System.Xml.XmlAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaFacet;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaFacet;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaGroup;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaGroup;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaGroup;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaGroup;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaGroup;false;set_Particle;(System.Xml.Schema.XmlSchemaGroupBase);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaGroupRef;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaGroupRef;false;get_RefName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaGroupRef;false;set_RefName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaIdentityConstraint;false;get_Fields;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaIdentityConstraint;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaIdentityConstraint;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaIdentityConstraint;false;get_Selector;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaIdentityConstraint;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaIdentityConstraint;false;set_Selector;(System.Xml.Schema.XmlSchemaXPath);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaImport;false;get_Annotation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaImport;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaImport;false;set_Annotation;(System.Xml.Schema.XmlSchemaAnnotation);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaImport;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInclude;false;get_Annotation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInclude;false;set_Annotation;(System.Xml.Schema.XmlSchemaAnnotation);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[Qualifier];Argument[1];generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInferenceException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;get_MemberType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;get_SchemaAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;get_SchemaElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;get_SchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;set_MemberType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;set_SchemaAttribute;(System.Xml.Schema.XmlSchemaAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;set_SchemaElement;(System.Xml.Schema.XmlSchemaElement);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;set_SchemaType;(System.Xml.Schema.XmlSchemaType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaKeyref;false;get_Refer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaKeyref;false;set_Refer;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaNotation;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaNotation;false;get_Public;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaNotation;false;get_System;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaNotation;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaNotation;false;set_Public;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaNotation;false;set_System;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaObject;false;get_Namespaces;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaObject;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaObject;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaObject;false;set_Namespaces;(System.Xml.Serialization.XmlSerializerNamespaces);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaObject;false;set_Parent;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaObject;false;set_SourceUri;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Schema;XmlSchemaObjectCollection;false;Add;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier].Element;value | | System.Xml.Schema;XmlSchemaObjectCollection;false;CopyTo;(System.Xml.Schema.XmlSchemaObject[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Schema;XmlSchemaObjectCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Xml.Schema.XmlSchemaObjectEnumerator.Current];value | | System.Xml.Schema;XmlSchemaObjectCollection;false;Insert;(System.Int32,System.Xml.Schema.XmlSchemaObject);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Schema;XmlSchemaObjectCollection;false;Remove;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaObjectCollection;false;XmlSchemaObjectCollection;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Schema;XmlSchemaObjectCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Schema;XmlSchemaObjectCollection;false;set_Item;(System.Int32,System.Xml.Schema.XmlSchemaObject);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Schema;XmlSchemaObjectEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaObjectTable;false;get_Names;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaObjectTable;false;get_Values;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaRedefine;false;get_AttributeGroups;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaRedefine;false;get_Groups;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaRedefine;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaRedefine;false;get_SchemaTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSequence;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.Xml.XmlReader);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.Xml.Schema.XmlSchema);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;CopyTo;(System.Xml.Schema.XmlSchema[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Remove;(System.Xml.Schema.XmlSchema);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Reprocess;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Reprocess;(System.Xml.Schema.XmlSchema);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Schemas;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;XmlSchemaSet;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;get_CompilationSettings;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;get_GlobalAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;get_GlobalElements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;get_GlobalTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;set_CompilationSettings;(System.Xml.Schema.XmlSchemaCompilationSettings);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContent;false;get_Content;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContent;false;set_Content;(System.Xml.Schema.XmlSchemaContent);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentExtension;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentExtension;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentExtension;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentExtension;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentExtension;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_Facets;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;set_BaseType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleType;false;get_Content;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleType;false;set_Content;(System.Xml.Schema.XmlSchemaSimpleTypeContent);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeList;false;get_BaseItemType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeList;false;get_ItemType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeList;false;get_ItemTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeList;false;set_BaseItemType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeList;false;set_ItemType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeList;false;set_ItemTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;get_Facets;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;set_BaseType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeUnion;false;get_BaseMemberTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeUnion;false;get_BaseTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeUnion;false;get_MemberTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeUnion;false;set_MemberTypes;(System.Xml.XmlQualifiedName[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaType;false;get_BaseSchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaType;false;get_BaseXmlSchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaType;false;get_Datatype;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaType;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaType;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaType;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidationException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaValidationException;false;SetSourceObject;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidationException;false;get_SourceObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;AddSchema;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;GetExpectedAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;GetExpectedParticles;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;Initialize;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;SkipToEndElement;(System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateAttribute;(System.String,System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[2];Argument[3];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateAttribute;(System.String,System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateAttribute;(System.String,System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[2];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateAttribute;(System.String,System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo,System.String,System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo,System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo,System.String,System.String,System.String,System.String);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[1];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateText;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateWhitespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;XmlSchemaValidator;(System.Xml.XmlNameTable,System.Xml.Schema.XmlSchemaSet,System.Xml.IXmlNamespaceResolver,System.Xml.Schema.XmlSchemaValidationFlags);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;XmlSchemaValidator;(System.Xml.XmlNameTable,System.Xml.Schema.XmlSchemaSet,System.Xml.IXmlNamespaceResolver,System.Xml.Schema.XmlSchemaValidationFlags);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;XmlSchemaValidator;(System.Xml.XmlNameTable,System.Xml.Schema.XmlSchemaSet,System.Xml.IXmlNamespaceResolver,System.Xml.Schema.XmlSchemaValidationFlags);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;get_LineInfoProvider;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;get_ValidationEventSender;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;set_LineInfoProvider;(System.Xml.IXmlLineInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;set_SourceUri;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;set_ValidationEventSender;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaXPath;false;get_XPath;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaXPath;false;set_XPath;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;Add;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;Add;(System.String,System.Object);;Argument[Qualifier];Argument[1];generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;AddUnique;(System.String,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;AddUnique;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;AddUnique;(System.String,System.Object);;Argument[Qualifier];Argument[1];generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;MakeUnique;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;ToArray;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;ImportContext;false;ImportContext;(System.Xml.Serialization.CodeIdentifiers,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;ImportContext;false;get_TypeIdentifiers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;ImportContext;false;get_Warnings;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;SoapAttributeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;get_AttributeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;set_AttributeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributeOverrides;false;get_Item;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributeOverrides;false;get_Item;(System.Type,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributes;false;get_SoapAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributes;false;get_SoapDefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributes;false;get_SoapElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributes;false;get_SoapEnum;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributes;false;get_SoapType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributes;false;set_SoapAttribute;(System.Xml.Serialization.SoapAttributeAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributes;false;set_SoapDefaultValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributes;false;set_SoapElement;(System.Xml.Serialization.SoapElementAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributes;false;set_SoapEnum;(System.Xml.Serialization.SoapEnumAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributes;false;set_SoapType;(System.Xml.Serialization.SoapTypeAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapElementAttribute;false;SoapElementAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapElementAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapElementAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapElementAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapElementAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapEnumAttribute;false;SoapEnumAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapEnumAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapEnumAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapIncludeAttribute;false;SoapIncludeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapIncludeAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapIncludeAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[]);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean,System.Xml.Serialization.XmlMappingAccess);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportTypeMapping;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportTypeMapping;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportTypeMapping;(System.Type,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;SoapReflectionImporter;(System.Xml.Serialization.SoapAttributeOverrides,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;SoapReflectionImporter;(System.Xml.Serialization.SoapAttributeOverrides,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapSchemaMember;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapSchemaMember;false;get_MemberType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapSchemaMember;false;set_MemberName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapSchemaMember;false;set_MemberType;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;SoapTypeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;SoapTypeAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;SoapTypeAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;set_TypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;UnreferencedObjectEventArgs;false;UnreferencedObjectEventArgs;(System.Object,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;UnreferencedObjectEventArgs;false;UnreferencedObjectEventArgs;(System.Object,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;UnreferencedObjectEventArgs;false;get_UnreferencedId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;UnreferencedObjectEventArgs;false;get_UnreferencedObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;XmlAnyElementAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;XmlAnyElementAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;XmlAnyElementAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlAnyElementAttributes;false;Add;(System.Xml.Serialization.XmlAnyElementAttribute);;Argument[0];Argument[Qualifier].Element;value | | System.Xml.Serialization;XmlAnyElementAttributes;false;CopyTo;(System.Xml.Serialization.XmlAnyElementAttribute[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Serialization;XmlAnyElementAttributes;false;Insert;(System.Int32,System.Xml.Serialization.XmlAnyElementAttribute);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlAnyElementAttributes;false;Remove;(System.Xml.Serialization.XmlAnyElementAttribute);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlAnyElementAttributes;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Serialization;XmlAnyElementAttributes;false;set_Item;(System.Int32,System.Xml.Serialization.XmlAnyElementAttribute);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlArrayAttribute;false;XmlArrayAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlArrayAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlArrayAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;XmlArrayItemAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;XmlArrayItemAttribute;(System.String,System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;XmlArrayItemAttribute;(System.String,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;XmlArrayItemAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlArrayItemAttributes;false;Add;(System.Xml.Serialization.XmlArrayItemAttribute);;Argument[0];Argument[Qualifier].Element;value | | System.Xml.Serialization;XmlArrayItemAttributes;false;CopyTo;(System.Xml.Serialization.XmlArrayItemAttribute[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Serialization;XmlArrayItemAttributes;false;Insert;(System.Int32,System.Xml.Serialization.XmlArrayItemAttribute);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlArrayItemAttributes;false;Remove;(System.Xml.Serialization.XmlArrayItemAttribute);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlArrayItemAttributes;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Serialization;XmlArrayItemAttributes;false;set_Item;(System.Int32,System.Xml.Serialization.XmlArrayItemAttribute);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlAttributeAttribute;false;XmlAttributeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;XmlAttributeAttribute;(System.String,System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;XmlAttributeAttribute;(System.String,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;XmlAttributeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;get_AttributeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;set_AttributeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeEventArgs;false;get_Attr;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeEventArgs;false;get_ExpectedAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeEventArgs;false;get_ObjectBeingDeserialized;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeOverrides;false;get_Item;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlAnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlAnyElements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlArrayItems;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlChoiceIdentifier;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlDefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlElements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlEnum;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlText;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlAnyAttribute;(System.Xml.Serialization.XmlAnyAttributeAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlArray;(System.Xml.Serialization.XmlArrayAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlAttribute;(System.Xml.Serialization.XmlAttributeAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlDefaultValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlEnum;(System.Xml.Serialization.XmlEnumAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlRoot;(System.Xml.Serialization.XmlRootAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlText;(System.Xml.Serialization.XmlTextAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlType;(System.Xml.Serialization.XmlTypeAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlChoiceIdentifierAttribute;false;XmlChoiceIdentifierAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlChoiceIdentifierAttribute;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlChoiceIdentifierAttribute;false;set_MemberName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlDeserializationEvents;false;get_OnUnknownAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlDeserializationEvents;false;get_OnUnknownElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlDeserializationEvents;false;get_OnUnknownNode;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlDeserializationEvents;false;get_OnUnreferencedObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;XmlElementAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;XmlElementAttribute;(System.String,System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;XmlElementAttribute;(System.String,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;XmlElementAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlElementAttributes;false;Add;(System.Xml.Serialization.XmlElementAttribute);;Argument[0];Argument[Qualifier].Element;value | | System.Xml.Serialization;XmlElementAttributes;false;CopyTo;(System.Xml.Serialization.XmlElementAttribute[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Serialization;XmlElementAttributes;false;Insert;(System.Int32,System.Xml.Serialization.XmlElementAttribute);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlElementAttributes;false;Remove;(System.Xml.Serialization.XmlElementAttribute);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlElementAttributes;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Serialization;XmlElementAttributes;false;set_Item;(System.Int32,System.Xml.Serialization.XmlElementAttribute);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlElementEventArgs;false;get_Element;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementEventArgs;false;get_ExpectedElements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementEventArgs;false;get_ObjectBeingDeserialized;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlEnumAttribute;false;XmlEnumAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlEnumAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlEnumAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlIncludeAttribute;false;XmlIncludeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlIncludeAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlIncludeAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlMapping;false;SetKey;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlMapping;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlMapping;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlMapping;false;get_XsdElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlMemberMapping;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlMembersMapping;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlNodeEventArgs;false;get_LocalName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlNodeEventArgs;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlNodeEventArgs;false;get_NamespaceURI;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlNodeEventArgs;false;get_ObjectBeingDeserialized;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlNodeEventArgs;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean,System.Xml.Serialization.XmlMappingAccess);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean,System.Xml.Serialization.XmlMappingAccess);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;XmlReflectionImporter;(System.Xml.Serialization.XmlAttributeOverrides,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;XmlReflectionImporter;(System.Xml.Serialization.XmlAttributeOverrides,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;get_MemberType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;get_SoapAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;get_XmlAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;set_MemberName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;set_MemberType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;set_SoapAttributes;(System.Xml.Serialization.SoapAttributes);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;set_XmlAttributes;(System.Xml.Serialization.XmlAttributes);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;XmlRootAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaEnumerator;false;XmlSchemaEnumerator;(System.Xml.Serialization.XmlSchemas);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSchemaExporter;false;ExportMembersMapping;(System.Xml.Serialization.XmlMembersMapping);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaExporter;false;ExportMembersMapping;(System.Xml.Serialization.XmlMembersMapping,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaExporter;false;ExportTypeMapping;(System.Xml.Serialization.XmlMembersMapping);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaExporter;false;ExportTypeMapping;(System.Xml.Serialization.XmlTypeMapping);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaExporter;false;XmlSchemaExporter;(System.Xml.Serialization.XmlSchemas);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaProviderAttribute;false;XmlSchemaProviderAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaProviderAttribute;false;get_MethodName;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Schema.XmlSchema,System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Schema.XmlSchema,System.Uri);;Argument[1];Argument[0];generated:taint | +| System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Schema.XmlSchema,System.Uri);;Argument[1];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Serialization.XmlSchemas);;Argument[0];Argument[Qualifier].Element;value | | System.Xml.Serialization;XmlSchemas;false;CopyTo;(System.Xml.Schema.XmlSchema[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Serialization;XmlSchemas;false;Find;(System.Xml.XmlQualifiedName,System.Type);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Serialization;XmlSchemas;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System.Xml.Serialization;XmlSchemas;false;Insert;(System.Int32,System.Xml.Schema.XmlSchema);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlSchemas;false;OnInsert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemas;false;OnSet;(System.Int32,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemas;false;Remove;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlSchemas;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Serialization;XmlSchemas;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Serialization;XmlSchemas;false;set_Item;(System.Int32,System.Xml.Schema.XmlSchema);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlSerializationReader+CollectionFixup;false;get_Callback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader+CollectionFixup;false;get_Collection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader+CollectionFixup;false;get_CollectionItems;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader+Fixup;false;get_Callback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader+Fixup;false;get_Ids;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader+Fixup;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader+Fixup;false;set_Source;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;AddFixup;(System.Xml.Serialization.XmlSerializationReader+CollectionFixup);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;AddFixup;(System.Xml.Serialization.XmlSerializationReader+Fixup);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;AddTarget;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;CollapseWhitespace;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;EnsureArrayIndex;(System.Array,System.Int32,System.Type);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;GetTarget;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadNullableString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadReference;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadReferencedElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadReferencedElement;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadReferencingElement;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadReferencingElement;(System.String,System.String,System.Boolean,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadReferencingElement;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable,System.Boolean);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadString;(System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadString;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadTypedPrimitive;(System.Xml.XmlQualifiedName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ShrinkArray;(System.Array,System.Int32,System.Type,System.Boolean);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ToByteArrayBase64;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ToXmlNCName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ToXmlName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ToXmlNmToken;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ToXmlNmTokens;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;get_Document;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;get_Reader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromByteArrayBase64;(System.Byte[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromByteArrayHex;(System.Byte[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromEnum;(System.Int64,System.String[],System.Int64[]);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromEnum;(System.Int64,System.String[],System.Int64[],System.String);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromXmlNCName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromXmlName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromXmlNmToken;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromXmlNmTokens;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromXmlQualifiedName;(System.Xml.XmlQualifiedName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromXmlQualifiedName;(System.Xml.XmlQualifiedName,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.Byte[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.Byte[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementEncoded;(System.Xml.XmlNode,System.String,System.String,System.Boolean,System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementLiteral;(System.Xml.XmlNode,System.String,System.String,System.Boolean,System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementString;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementString;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementString;(System.String,System.String,System.String,System.Xml.XmlQualifiedName);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementString;(System.String,System.String,System.Xml.XmlQualifiedName);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.Byte[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.Byte[],System.Xml.XmlQualifiedName);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.Byte[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.Byte[],System.Xml.XmlQualifiedName);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.String,System.Xml.XmlQualifiedName);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.Xml.XmlQualifiedName);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteId;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringEncoded;(System.String,System.String,System.String,System.Xml.XmlQualifiedName);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringEncodedRaw;(System.String,System.String,System.Byte[],System.Xml.XmlQualifiedName);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringEncodedRaw;(System.String,System.String,System.String,System.Xml.XmlQualifiedName);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringLiteral;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringLiteralRaw;(System.String,System.String,System.Byte[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringLiteralRaw;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type,System.Boolean);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type,System.Boolean,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type,System.Boolean,System.Boolean);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteReferencingElement;(System.String,System.String,System.Object);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteReferencingElement;(System.String,System.String,System.Object,System.Boolean);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteRpcResult;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteRpcResult;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteSerializable;(System.Xml.Serialization.IXmlSerializable,System.String,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteSerializable;(System.Xml.Serialization.IXmlSerializable,System.String,System.String,System.Boolean,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteTypedPrimitive;(System.String,System.String,System.Object,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteValue;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteXmlAttribute;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteXmlAttribute;(System.Xml.XmlNode,System.Object);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteXsiType;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteXsiType;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;get_Writer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;set_Writer;(System.Xml.XmlWriter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader,System.String,System.Xml.Serialization.XmlDeserializationEvents);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader,System.String,System.Xml.Serialization.XmlDeserializationEvents);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader,System.Xml.Serialization.XmlDeserializationEvents);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;FromMappings;(System.Xml.Serialization.XmlMapping[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;FromMappings;(System.Xml.Serialization.XmlMapping[],System.Type);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;FromMappings;(System.Xml.Serialization.XmlMapping[],System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[4];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Xml.Serialization.XmlTypeMapping);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;XmlSerializerAssemblyAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;XmlSerializerAssemblyAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;get_AssemblyName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;get_CodeBase;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;set_AssemblyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;set_CodeBase;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[3];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[4];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[3];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[4];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlRootAttribute);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlRootAttribute);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Xml.Serialization.XmlTypeMapping);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;XmlSerializerVersionAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;get_ParentAssemblyId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;set_ParentAssemblyId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;set_Version;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlTextAttribute;false;XmlTextAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlTextAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlTextAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlTextAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlTextAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlTypeAttribute;false;XmlTypeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlTypeAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlTypeAttribute;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlTypeAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlTypeAttribute;false;set_TypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.XPath;Extensions;false;CreateNavigator;(System.Xml.Linq.XNode);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;Extensions;false;CreateNavigator;(System.Xml.Linq.XNode,System.Xml.XmlNameTable);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;Extensions;false;CreateNavigator;(System.Xml.Linq.XNode,System.Xml.XmlNameTable);;Argument[1];ReturnValue;generated:taint | +| System.Xml.XPath;XDocumentExtensions;false;ToXPathNavigable;(System.Xml.Linq.XNode);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathDocument;false;CreateNavigator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathDocument;false;XPathDocument;(System.Xml.XmlReader,System.Xml.XmlSpace);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.XPath;XPathException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.XPath;XPathException;false;XPathException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.XPath;XPathException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathExpression;false;Compile;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathExpression;false;Compile;(System.String,System.Xml.IXmlNamespaceResolver);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathExpression;false;Compile;(System.String,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml.XPath;XPathItem;true;ValueAs;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;ValueAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;ValueAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;get_TypedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;get_ValueAsDateTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;get_XmlType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;Compile;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;CreateNavigator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;Evaluate;(System.Xml.XPath.XPathExpression);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;Evaluate;(System.Xml.XPath.XPathExpression,System.Xml.XPath.XPathNodeIterator);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;Evaluate;(System.Xml.XPath.XPathExpression,System.Xml.XPath.XPathNodeIterator);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;GetAttribute;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;GetNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;LookupNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;LookupPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;ReadSubtree;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;Select;(System.Xml.XPath.XPathExpression);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;SelectSingleNode;(System.Xml.XPath.XPathExpression);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;WriteSubtree;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.XPath;XPathNavigator;true;get_InnerXml;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;get_OuterXml;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;get_XmlLang;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNodeIterator;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNodeIterator;true;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml.XPath;XPathNodeIterator;true;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Xml.Xsl;XslCompiledTransform;false;Load;(System.Reflection.MethodInfo,System.Byte[],System.Type[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[2];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[2];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Xsl;XsltArgumentList;false;GetExtensionObject;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XsltArgumentList;false;GetParam;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XsltArgumentList;false;RemoveExtensionObject;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XsltArgumentList;false;RemoveParam;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XsltCompileException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Xsl;XsltException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Xsl;XsltException;false;XsltException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Xsl;XsltException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XsltException;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;NameTable;false;Add;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;NameTable;false;Add;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;NameTable;false;Add;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;NameTable;false;Add;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;NameTable;false;Get;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;NameTable;false;Get;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;UniqueId;false;UniqueId;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;UniqueId;false;UniqueId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlAttribute;false;AppendChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlAttribute;false;AppendChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;AppendChild;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttribute;false;AppendChild;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[1].Element;generated:taint | +| System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint | +| System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttribute;false;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[1].Element;generated:taint | +| System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint | +| System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[1].Element;generated:taint | +| System.Xml;XmlAttribute;false;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;PrependChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlAttribute;false;PrependChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;PrependChild;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttribute;false;PrependChild;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;RemoveChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlAttribute;false;RemoveChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlAttribute;false;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint | +| System.Xml;XmlAttribute;false;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlAttribute;false;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttribute;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlAttribute;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | | System.Xml;XmlAttribute;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlAttribute;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlAttribute;false;get_NamespaceURI;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlAttribute;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlAttribute;false;get_OwnerDocument;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlAttribute;false;get_OwnerElement;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlAttribute;false;get_ParentNode;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlAttribute;false;get_Prefix;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlAttribute;false;get_SchemaInfo;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlAttribute;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlAttributeCollection;false;Append;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;Append;(System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttributeCollection;false;Append;(System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlAttributeCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml;XmlAttributeCollection;false;CopyTo;(System.Xml.XmlAttribute[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Xml;XmlAttributeCollection;false;InsertAfter;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;InsertAfter;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttributeCollection;false;InsertAfter;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;InsertBefore;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;InsertBefore;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttributeCollection;false;InsertBefore;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;Prepend;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;Prepend;(System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttributeCollection;false;Prepend;(System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;Remove;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;RemoveAt;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;SetNamedItem;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;SetNamedItem;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttributeCollection;false;SetNamedItem;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;get_ItemOf;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;get_ItemOf;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;get_ItemOf;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Xml;XmlBinaryReaderSession;false;Add;(System.Int32,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlBinaryReaderSession;false;Add;(System.Int32,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlBinaryReaderSession;false;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlBinaryReaderSession;false;TryLookup;(System.String,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlBinaryReaderSession;false;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlCDataSection;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlCDataSection;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | | System.Xml;XmlCDataSection;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlCDataSection;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlCDataSection;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlCDataSection;false;get_ParentNode;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlCDataSection;false;get_PreviousText;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlCharacterData;false;XmlCharacterData;(System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml;XmlCharacterData;false;get_InnerText;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlCharacterData;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlCharacterData;false;set_InnerText;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlCharacterData;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlCharacterData;true;AppendData;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlCharacterData;true;Substring;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlCharacterData;true;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlCharacterData;true;set_Data;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlComment;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlComment;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlComment;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlComment;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlConvert;false;DecodeName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;EncodeLocalName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;EncodeName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;EncodeNmToken;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyNCName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyNMTOKEN;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyPublicId;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyTOKEN;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyWhitespace;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyXmlChars;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;CreateNavigator;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;GetElementFromRow;(System.Data.DataRow);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;GetElementsByTagName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;GetRowFromElement;(System.Xml.XmlElement);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;Load;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDataDocument;false;Load;(System.IO.TextReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDataDocument;false;Load;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDataDocument;false;Load;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDataDocument;false;XmlDataDocument;(System.Data.DataSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDataDocument;false;get_DataSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDeclaration;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDeclaration;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlDeclaration;false;XmlDeclaration;(System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDeclaration;false;XmlDeclaration;(System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDeclaration;false;XmlDeclaration;(System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlDeclaration;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlDeclaration;false;get_InnerText;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDeclaration;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDeclaration;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDeclaration;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlDeclaration;false;get_Standalone;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlDeclaration;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlDeclaration;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDeclaration;false;set_Encoding;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDeclaration;false;set_Standalone;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionary;false;Add;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionary;false;Add;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionary;false;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionary;false;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);;Argument[3];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[3];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[5];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[3];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.XmlDictionaryReaderQuotas);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateDictionaryReader;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateTextReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;ReadContentAsString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;ReadContentAsString;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;ReadElementContentAsDateTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;ReadElementContentAsString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;ReadString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;ReadString;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;GetAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;GetNonAtomizedNames;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadArray;(System.String,System.String,System.DateTime[],System.Int32,System.Int32);;Argument[Qualifier];Argument[2].Element;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadArray;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.DateTime[],System.Int32,System.Int32);;Argument[Qualifier];Argument[2].Element;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadContentAsQualifiedName;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadContentAsString;(System.String[],System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadContentAsString;(System.String[],System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadContentAsString;(System.Xml.XmlDictionaryString[],System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadContentAsString;(System.Xml.XmlDictionaryString[],System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadContentAsUniqueId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadDateTimeArray;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadDateTimeArray;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadElementContentAsUniqueId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryString;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryString;false;XmlDictionaryString;(System.Xml.IXmlDictionary,System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryString;false;XmlDictionaryString;(System.Xml.IXmlDictionary,System.String,System.Int32);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryString;false;get_Dictionary;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryString;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateDictionaryWriter;(System.Xml.XmlWriter);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteAttributeString;(System.String,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteAttributeString;(System.String,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteAttributeString;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteAttributeString;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteBase64Async;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteElementString;(System.String,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteElementString;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteNode;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteStartAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteNode;(System.Xml.XmlDictionaryReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteQualifiedName;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteStartAttribute;(System.String,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteString;(System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteTextNode;(System.Xml.XmlDictionaryReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteValue;(System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlnsAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlnsAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlnsAttribute;(System.String,System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlnsAttribute;(System.String,System.Xml.XmlDictionaryString);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocument;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateDocumentFragment;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateDocumentType;(System.String,System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateDocumentType;(System.String,System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateDocumentType;(System.String,System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateDocumentType;(System.String,System.String,System.String,System.String);;Argument[3];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateEntityReference;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNavigator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNavigator;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNavigator;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String,System.String);;Argument[3];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateProcessingInstruction;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateProcessingInstruction;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateXmlDeclaration;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateXmlDeclaration;(System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateXmlDeclaration;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;GetElementsByTagName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;GetElementsByTagName;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;GetElementsByTagName;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;ImportNode;(System.Xml.XmlNode,System.Boolean);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;ImportNode;(System.Xml.XmlNode,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlDocument;false;Load;(System.IO.Stream);;Argument[0];Argument[Qualifier];taint | | System.Xml;XmlDocument;false;Load;(System.IO.TextReader);;Argument[0];Argument[Qualifier];taint | | System.Xml;XmlDocument;false;Load;(System.String);;Argument[0];Argument[Qualifier];taint | | System.Xml;XmlDocument;false;Load;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];taint | +| System.Xml;XmlDocument;false;Save;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlDocument;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlDocument;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlDocument;false;XmlDocument;(System.Xml.XmlImplementation);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml;XmlDocument;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlDocument;false;get_DocumentElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;get_DocumentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;get_Implementation;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlDocument;false;get_InnerXml;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocument;false;get_IsReadOnly;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocument;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocument;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlDocument;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlDocument;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocument;false;get_OwnerDocument;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocument;false;get_ParentNode;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocument;false;get_SchemaInfo;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlDocument;false;get_Schemas;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;set_Schemas;(System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocument;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocumentFragment;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocumentFragment;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlDocumentFragment;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlDocumentFragment;false;XmlDocumentFragment;(System.Xml.XmlDocument);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Xml;XmlDocumentFragment;false;get_InnerXml;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocumentFragment;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocumentFragment;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocumentFragment;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocumentFragment;false;get_OwnerDocument;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocumentFragment;false;get_ParentNode;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlDocumentType;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocumentType;false;XmlDocumentType;(System.String,System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocumentType;false;XmlDocumentType;(System.String,System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocumentType;false;XmlDocumentType;(System.String,System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocumentType;false;XmlDocumentType;(System.String,System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocumentType;false;get_Entities;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocumentType;false;get_InternalSubset;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlDocumentType;false;get_IsReadOnly;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocumentType;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocumentType;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlDocumentType;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlDocumentType;false;get_Notations;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocumentType;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocumentType;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetAttribute;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetAttribute;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetAttributeNode;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetAttributeNode;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetElementsByTagName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetElementsByTagName;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetElementsByTagName;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;RemoveAttributeAt;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;RemoveAttributeNode;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;RemoveAttributeNode;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlElement;false;SetAttribute;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;SetAttributeNode;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;SetAttributeNode;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;SetAttributeNode;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;SetAttributeNode;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlElement;false;SetAttributeNode;(System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlElement;false;SetAttributeNode;(System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlElement;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | | System.Xml;XmlElement;false;get_Attributes;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlElement;false;get_InnerText;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlElement;false;get_InnerXml;();;Argument[Qualifier];ReturnValue;taint | @@ -2519,6 +8999,7 @@ | System.Xml;XmlElement;false;get_ParentNode;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlElement;false;get_Prefix;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlElement;false;get_SchemaInfo;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlElement;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml;XmlEntity;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlEntity;false;get_InnerText;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlEntity;false;get_InnerXml;();;Argument[Qualifier];ReturnValue;taint | @@ -2526,24 +9007,82 @@ | System.Xml;XmlEntity;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlEntity;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlEntity;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlEntity;false;get_NotationName;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlEntity;false;get_OuterXml;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlEntity;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlEntity;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlEntityReference;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlEntityReference;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlEntityReference;false;XmlEntityReference;(System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml;XmlEntityReference;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlEntityReference;false;get_IsReadOnly;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlEntityReference;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlEntityReference;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlEntityReference;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlEntityReference;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlException;false;XmlException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlException;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlImplementation;false;CreateDocument;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlImplementation;false;XmlImplementation;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml;XmlLinkedNode;false;get_NextSibling;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlLinkedNode;false;get_PreviousSibling;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNamedNodeMap;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Xml;XmlNamedNodeMap;false;GetNamedItem;(System.String);;Argument[Qualifier];ReturnValue;value | | System.Xml;XmlNamedNodeMap;false;GetNamedItem;(System.String,System.String);;Argument[Qualifier];ReturnValue;value | +| System.Xml;XmlNamedNodeMap;false;Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamedNodeMap;false;RemoveNamedItem;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamedNodeMap;false;RemoveNamedItem;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamedNodeMap;false;SetNamedItem;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlNamedNodeMap;false;SetNamedItem;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlNamespaceManager;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Xml;XmlNamespaceManager;false;LookupNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamespaceManager;false;LookupPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamespaceManager;false;XmlNamespaceManager;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlNamespaceManager;false;get_DefaultNamespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamespaceManager;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlNode;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Xml;XmlNode;false;SelectNodes;(System.String);;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;false;SelectNodes;(System.String,System.Xml.XmlNamespaceManager);;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;false;SelectSingleNode;(System.String);;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;false;SelectSingleNode;(System.String,System.Xml.XmlNamespaceManager);;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlNode;true;AppendChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;AppendChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;AppendChild;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;AppendChild;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;CreateNavigator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;GetNamespaceOfPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;GetPrefixOfNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[1].Element;generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[1].Element;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[1].Element;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;PrependChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;PrependChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;PrependChild;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;PrependChild;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;RemoveChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;RemoveChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | | System.Xml;XmlNode;true;get_Attributes;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_BaseURI;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_ChildNodes;();;Argument[Qualifier];ReturnValue;taint | @@ -2552,6 +9091,8 @@ | System.Xml;XmlNode;true;get_InnerText;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_InnerXml;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_IsReadOnly;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlNode;true;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;get_Item;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlNode;true;get_LastChild;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_Name;();;Argument[Qualifier];ReturnValue;taint | @@ -2566,18 +9107,84 @@ | System.Xml;XmlNode;true;get_PreviousText;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_SchemaInfo;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[4];Argument[Qualifier];generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;get_NewParent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;get_NewValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;get_Node;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;get_OldParent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;get_OldValue;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlNodeList;true;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.Xml;XmlNodeList;true;get_ItemOf;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;GetAttribute;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;GetAttribute;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;LookupNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;LookupPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;ReadString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;XmlNodeReader;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNodeReader;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_LocalName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_NamespaceURI;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_Prefix;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_SchemaInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_XmlLang;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlNotation;false;get_InnerXml;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNotation;false;get_IsReadOnly;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNotation;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNotation;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNotation;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNotation;false;get_OuterXml;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlNotation;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNotation;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[4];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[5];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[6];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[7];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[9];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_DocTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_InternalSubset;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_NamespaceManager;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_XmlLang;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;set_BaseURI;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_DocTypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_Encoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_InternalSubset;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_NameTable;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_NamespaceManager;(System.Xml.XmlNamespaceManager);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_PublicId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_SystemId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_XmlLang;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlProcessingInstruction;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlProcessingInstruction;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlProcessingInstruction;false;XmlProcessingInstruction;(System.String,System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlProcessingInstruction;false;XmlProcessingInstruction;(System.String,System.String,System.Xml.XmlDocument);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlProcessingInstruction;false;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlProcessingInstruction;false;get_InnerText;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlProcessingInstruction;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlProcessingInstruction;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlProcessingInstruction;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlProcessingInstruction;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlProcessingInstruction;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlProcessingInstruction;false;set_Data;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlProcessingInstruction;false;set_InnerText;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlProcessingInstruction;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlQualifiedName;false;ToString;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlQualifiedName;false;ToString;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | | System.Xml;XmlReader;false;Create;(System.IO.Stream);;Argument[0];ReturnValue;taint | | System.Xml;XmlReader;false;Create;(System.IO.Stream,System.Xml.XmlReaderSettings);;Argument[0];ReturnValue;taint | | System.Xml;XmlReader;false;Create;(System.IO.Stream,System.Xml.XmlReaderSettings,System.String);;Argument[0];ReturnValue;taint | @@ -2590,29 +9197,168 @@ | System.Xml;XmlReader;false;Create;(System.String,System.Xml.XmlReaderSettings);;Argument[0];ReturnValue;taint | | System.Xml;XmlReader;false;Create;(System.String,System.Xml.XmlReaderSettings,System.Xml.XmlParserContext);;Argument[0];ReturnValue;taint | | System.Xml;XmlReader;false;Create;(System.Xml.XmlReader,System.Xml.XmlReaderSettings);;Argument[0];ReturnValue;taint | +| System.Xml;XmlReader;true;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadContentAsObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadContentAsString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAsDateTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAsDateTime;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAsObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAsObject;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAsString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAsString;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementString;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadSubtree;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;get_Item;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;get_SchemaInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReaderSettings;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReaderSettings;false;set_NameTable;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlReaderSettings;false;set_Schemas;(System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlReaderSettings;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlResolver;true;ResolveUri;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlResolver;true;ResolveUri;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlSecureResolver;false;ResolveUri;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlSecureResolver;false;ResolveUri;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlSecureResolver;false;XmlSecureResolver;(System.Xml.XmlResolver,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlSecureResolver;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlSignificantWhitespace;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlSignificantWhitespace;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | | System.Xml;XmlSignificantWhitespace;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlSignificantWhitespace;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlSignificantWhitespace;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlSignificantWhitespace;false;get_ParentNode;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlSignificantWhitespace;false;get_PreviousText;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlSignificantWhitespace;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlSignificantWhitespace;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlText;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlText;false;SplitText;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlText;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | | System.Xml;XmlText;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlText;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlText;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlText;false;get_ParentNode;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlText;false;get_PreviousText;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlText;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlText;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;GetRemainder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextReader;false;LookupNamespace;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlTextReader;false;ReadString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextReader;false;XmlTextReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;XmlTextReader;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;XmlTextReader;(System.String,System.IO.TextReader,System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;XmlTextReader;(System.String,System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;XmlTextReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;XmlTextReader;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextReader;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextReader;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextReader;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextReader;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextWriter;false;LookupPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextWriter;false;WriteName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextWriter;false;WriteNmToken;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextWriter;false;WriteQualifiedName;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextWriter;false;WriteStartAttribute;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextWriter;false;XmlTextWriter;(System.IO.Stream,System.Text.Encoding);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextWriter;false;XmlTextWriter;(System.IO.TextWriter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextWriter;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextWriter;false;get_XmlLang;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlUrlResolver;false;ResolveUri;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlUrlResolver;false;ResolveUri;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlUrlResolver;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlUrlResolver;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlValidatingReader;false;LookupNamespace;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlValidatingReader;false;ReadString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlValidatingReader;false;XmlValidatingReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlValidatingReader;false;XmlValidatingReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlValidatingReader;false;XmlValidatingReader;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlValidatingReader;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlValidatingReader;false;get_Reader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlValidatingReader;false;get_Schemas;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlWhitespace;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlWhitespace;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | | System.Xml;XmlWhitespace;false;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlWhitespace;false;get_Name;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlWhitespace;false;get_NodeType;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlWhitespace;false;get_ParentNode;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlWhitespace;false;get_PreviousText;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlWhitespace;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlWhitespace;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;Create;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.IO.Stream,System.Xml.XmlWriterSettings);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.IO.Stream,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.IO.TextWriter);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.IO.TextWriter,System.Xml.XmlWriterSettings);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.IO.TextWriter,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.String,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.Text.StringBuilder,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.Xml.XmlWriter);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.Xml.XmlWriter,System.Xml.XmlWriterSettings);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.Xml.XmlWriter,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeStringAsync;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteElementString;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteElementString;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteElementString;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteStartAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteStartAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteAttributes;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteAttributesAsync;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteNmToken;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteNode;(System.Xml.XPath.XPathNavigator,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteNode;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteNodeAsync;(System.Xml.XPath.XPathNavigator,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteNodeAsync;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteQualifiedName;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriterSettings;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlWriterSettings;false;get_IndentChars;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlWriterSettings;false;get_NewLineChars;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlWriterSettings;false;set_Encoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriterSettings;false;set_IndentChars;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriterSettings;false;set_NewLineChars;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;AggregateException;false;AggregateException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;AggregateException;false;AggregateException;(System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System;AggregateException;false;GetBaseException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;AggregateException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;AggregateException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;AggregateException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;AppDomain;false;ApplyPolicy;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;ArgumentException;false;ArgumentException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;ArgumentException;false;ArgumentException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;ArgumentException;false;ArgumentException;(System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System;ArgumentException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;ArgumentException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArgumentException;false;get_ParamName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArgumentOutOfRangeException;false;ArgumentOutOfRangeException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;ArgumentOutOfRangeException;false;ArgumentOutOfRangeException;(System.String,System.Object,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;ArgumentOutOfRangeException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;ArgumentOutOfRangeException;false;get_ActualValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArgumentOutOfRangeException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Array;false;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System;Array;false;AsReadOnly<>;(T[]);;Argument[0].Element;ReturnValue.Element;value | | System;Array;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | | System;Array;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System;Array;false;CopyTo;(System.Array,System.Int64);;Argument[Qualifier].Element;Argument[0].Element;value | +| System;Array;false;Fill<>;(T[],T);;Argument[1];Argument[0].Element;generated:taint | +| System;Array;false;Fill<>;(T[],T,System.Int32,System.Int32);;Argument[1];Argument[0].Element;generated:taint | | System;Array;false;Find<>;(T[],System.Predicate);;Argument[0].Element;Argument[1].Parameter[0];value | | System;Array;false;Find<>;(T[],System.Predicate);;Argument[0].Element;ReturnValue;value | | System;Array;false;FindAll<>;(T[],System.Predicate);;Argument[0].Element;Argument[1].Parameter[0];value | @@ -2626,14 +9372,31 @@ | System;Array;false;Reverse<>;(T[]);;Argument[0].Element;ReturnValue.Element;value | | System;Array;false;Reverse<>;(T[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | | System;Array;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System;Array;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System;Array;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System;ArraySegment<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ArraySegment<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System;ArraySegment<>;false;ArraySegment;(T[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System;ArraySegment<>;false;ArraySegment;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | | System;ArraySegment<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System;ArraySegment<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | | System;ArraySegment<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System;ArraySegment<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ArraySegment<>;false;Insert;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System;ArraySegment<>;false;Slice;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArraySegment<>;false;Slice;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArraySegment<>;false;get_Array;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ArraySegment<>;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System;ArraySegment<>;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | | System;ArraySegment<>;false;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | +| System;BadImageFormatException;false;BadImageFormatException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;BadImageFormatException;false;BadImageFormatException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;BadImageFormatException;false;BadImageFormatException;(System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System;BadImageFormatException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;BadImageFormatException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;BadImageFormatException;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;BadImageFormatException;false;get_FusionLog;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;BadImageFormatException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Boolean;false;Parse;(System.String);;Argument[0];ReturnValue;taint | | System;Boolean;false;TryParse;(System.ReadOnlySpan,System.Boolean);;Argument[0].Element;Argument[1];taint | | System;Boolean;false;TryParse;(System.ReadOnlySpan,System.Boolean);;Argument[0].Element;ReturnValue;taint | @@ -2966,6 +9729,61 @@ | System;Convert;false;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);;Argument[0].Element;Argument[1].Element;taint | | System;Convert;false;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);;Argument[0].Element;Argument[2];taint | | System;Convert;false;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);;Argument[0].Element;ReturnValue;taint | +| System;DBNull;false;ToType;(System.Type,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint | +| System;DateTime;false;GetDateTimeFormats;(System.Char,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;DateTime;false;ToDateTime;(System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:value | +| System;DateTime;false;ToLocalTime;();;Argument[Qualifier];ReturnValue;generated:value | +| System;DateTime;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System;DateTime;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;DateTime;false;ToType;(System.Type,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;DateTime;false;ToType;(System.Type,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint | +| System;DateTime;false;ToUniversalTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;DateTimeOffset;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;DateTimeOffset;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System;DateTimeOffset;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;Decimal;false;ToDecimal;(System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:value | +| System;Delegate;false;Combine;(System.Delegate,System.Delegate);;Argument[0];ReturnValue;generated:taint | +| System;Delegate;false;Combine;(System.Delegate,System.Delegate);;Argument[1];ReturnValue;generated:taint | +| System;Delegate;false;Combine;(System.Delegate[]);;Argument[0].Element;ReturnValue;generated:taint | +| System;Delegate;false;CreateDelegate;(System.Type,System.Reflection.MethodInfo,System.Boolean);;Argument[1];ReturnValue;generated:taint | +| System;Delegate;false;Delegate;(System.Object,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;Delegate;false;Delegate;(System.Object,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;Delegate;false;Delegate;(System.Type,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;Delegate;false;Delegate;(System.Type,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;Delegate;false;DynamicInvoke;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System;Delegate;false;Remove;(System.Delegate,System.Delegate);;Argument[0];ReturnValue;generated:taint | +| System;Delegate;false;RemoveAll;(System.Delegate,System.Delegate);;Argument[0];ReturnValue;generated:taint | +| System;Delegate;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Delegate;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Delegate;true;DynamicInvokeImpl;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System;Delegate;true;GetInvocationList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Delegate;true;GetMethodImpl;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Delegate;true;RemoveImpl;(System.Delegate);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Double;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System;Double;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;Double;false;ToType;(System.Type,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;Enum;false;GetUnderlyingType;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System;Enum;false;ToType;(System.Type,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Environment;false;ExpandEnvironmentVariables;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;Exception;false;Exception;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;Exception;false;Exception;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;Exception;false;Exception;(System.String,System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System;Exception;false;Exception;(System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System;Exception;false;GetBaseException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Exception;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;Exception;false;get_HelpLink;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Exception;false;get_InnerException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Exception;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Exception;false;get_StackTrace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Exception;false;get_TargetSite;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Exception;false;set_HelpLink;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;Exception;false;set_Source;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;FormattableString;false;CurrentCulture;(System.FormattableString);;Argument[0];ReturnValue;generated:taint | +| System;FormattableString;false;Invariant;(System.FormattableString);;Argument[0];ReturnValue;generated:taint | +| System;FormattableString;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;FormattableString;false;ToString;(System.String,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Half;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System;Half;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | | System;Int32;false;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);;Argument[0].Element;ReturnValue;taint | | System;Int32;false;Parse;(System.String);;Argument[0];ReturnValue;taint | | System;Int32;false;Parse;(System.String,System.Globalization.NumberStyles);;Argument[0];ReturnValue;taint | @@ -2979,16 +9797,115 @@ | System;Int32;false;TryParse;(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Int32);;Argument[0];ReturnValue;taint | | System;Int32;false;TryParse;(System.String,System.Int32);;Argument[0];Argument[1];taint | | System;Int32;false;TryParse;(System.String,System.Int32);;Argument[0];ReturnValue;taint | +| System;IntPtr;false;IntPtr;(System.Void*);;Argument[0];Argument[Qualifier];generated:taint | +| System;IntPtr;false;ToPointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Lazy<,>;false;Lazy;(TMetadata);;Argument[0];Argument[Qualifier];generated:taint | +| System;Lazy<,>;false;Lazy;(TMetadata,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System;Lazy<,>;false;Lazy;(TMetadata,System.Threading.LazyThreadSafetyMode);;Argument[0];Argument[Qualifier];generated:taint | +| System;Lazy<,>;false;get_Metadata;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Lazy<>;false;Lazy;(System.Func);;Argument[0].ReturnValue;ReturnValue.Property[System.Lazy<>.Value];value | | System;Lazy<>;false;Lazy;(System.Func,System.Boolean);;Argument[0].ReturnValue;ReturnValue.Property[System.Lazy<>.Value];value | | System;Lazy<>;false;Lazy;(System.Func,System.Threading.LazyThreadSafetyMode);;Argument[0].ReturnValue;ReturnValue.Property[System.Lazy<>.Value];value | +| System;Lazy<>;false;Lazy;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System;Lazy<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Lazy<>;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System;Memory<>;false;Memory;(T[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System;Memory<>;false;Memory;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System;Memory<>;false;Slice;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Memory<>;false;Slice;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Memory<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory;(System.String,System.Index);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory;(System.String,System.Range);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(System.ArraySegment);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(System.ArraySegment,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(System.ArraySegment,System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(T[],System.Index);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(T[],System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(T[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(T[],System.Range);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;EnumerateRunes;(System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim;(System.Memory);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim;(System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim<>;(System.Memory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim<>;(System.Memory,T);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim<>;(System.ReadOnlyMemory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim<>;(System.ReadOnlyMemory,T);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim<>;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim<>;(System.Span,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd;(System.Memory);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd;(System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd<>;(System.Memory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd<>;(System.Memory,T);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd<>;(System.ReadOnlyMemory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd<>;(System.ReadOnlyMemory,T);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd<>;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd<>;(System.Span,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart;(System.Memory);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart;(System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart<>;(System.Memory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart<>;(System.Memory,T);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart<>;(System.ReadOnlyMemory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart<>;(System.ReadOnlyMemory,T);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart<>;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart<>;(System.Span,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MissingFieldException;false;MissingFieldException;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;MissingFieldException;false;MissingFieldException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;MissingFieldException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;MissingMemberException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;MissingMemberException;false;MissingMemberException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;MissingMemberException;false;MissingMemberException;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;MissingMemberException;false;MissingMemberException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;MissingMemberException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;MissingMethodException;false;MissingMethodException;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;MissingMethodException;false;MissingMethodException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;MissingMethodException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;MulticastDelegate;false;CombineImpl;(System.Delegate);;Argument[Qualifier];ReturnValue;generated:value | +| System;MulticastDelegate;false;GetInvocationList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;MulticastDelegate;false;GetMethodImpl;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;MulticastDelegate;false;RemoveImpl;(System.Delegate);;Argument[Qualifier];ReturnValue;generated:taint | +| System;MulticastDelegate;false;RemoveImpl;(System.Delegate);;Argument[Qualifier];ReturnValue;generated:value | +| System;NotFiniteNumberException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;Nullable;false;GetUnderlyingType;(System.Type);;Argument[0];ReturnValue;generated:taint | | System;Nullable<>;false;GetValueOrDefault;();;Argument[Qualifier].Property[System.Nullable<>.Value];ReturnValue;value | | System;Nullable<>;false;GetValueOrDefault;(T);;Argument[0];ReturnValue;value | | System;Nullable<>;false;GetValueOrDefault;(T);;Argument[Qualifier].Property[System.Nullable<>.Value];ReturnValue;value | | System;Nullable<>;false;Nullable;(T);;Argument[0];ReturnValue.Property[System.Nullable<>.Value];value | +| System;Nullable<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Nullable<>;false;get_HasValue;();;Argument[Qualifier].Property[System.Nullable<>.Value];ReturnValue;taint | | System;Nullable<>;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System;ObjectDisposedException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;ObjectDisposedException;false;ObjectDisposedException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;ObjectDisposedException;false;ObjectDisposedException;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;ObjectDisposedException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ObjectDisposedException;false;get_ObjectName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;OperatingSystem;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;OperatingSystem;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;OperatingSystem;false;get_ServicePack;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;OperatingSystem;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;OperatingSystem;false;get_VersionString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;OperationCanceledException;false;OperationCanceledException;(System.String,System.Exception,System.Threading.CancellationToken);;Argument[2];Argument[Qualifier];generated:taint | +| System;OperationCanceledException;false;OperationCanceledException;(System.String,System.Threading.CancellationToken);;Argument[1];Argument[Qualifier];generated:taint | +| System;OperationCanceledException;false;OperationCanceledException;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System;OperationCanceledException;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ReadOnlyMemory<>;false;ReadOnlyMemory;(T[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System;ReadOnlyMemory<>;false;ReadOnlyMemory;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System;ReadOnlyMemory<>;false;Slice;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;ReadOnlyMemory<>;false;Slice;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;ReadOnlyMemory<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ReadOnlySpan<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;RuntimeFieldHandle;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;RuntimeMethodHandle;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;RuntimeTypeHandle;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;SequencePosition;false;GetObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;SequencePosition;false;SequencePosition;(System.Object,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System;Single;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System;Single;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;Single;false;ToType;(System.Type,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;Span<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System;String;false;Clone;();;Argument[Qualifier];ReturnValue;value | | System;String;false;Concat;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint | | System;String;false;Concat;(System.Object);;Argument[0];ReturnValue;taint | @@ -3019,6 +9936,7 @@ | System;String;false;Concat;(System.String[]);;Argument[0].Element;ReturnValue;taint | | System;String;false;Concat<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint | | System;String;false;Copy;(System.String);;Argument[0];ReturnValue;value | +| System;String;false;EnumerateRunes;();;Argument[Qualifier];ReturnValue;generated:taint | | System;String;false;Format;(System.IFormatProvider,System.String,System.Object);;Argument[1];ReturnValue;taint | | System;String;false;Format;(System.IFormatProvider,System.String,System.Object);;Argument[2];ReturnValue;taint | | System;String;false;Format;(System.IFormatProvider,System.String,System.Object,System.Object);;Argument[1];ReturnValue;taint | @@ -3076,6 +9994,9 @@ | System;String;false;Replace;(System.Char,System.Char);;Argument[Qualifier];ReturnValue;taint | | System;String;false;Replace;(System.String,System.String);;Argument[1];ReturnValue;taint | | System;String;false;Replace;(System.String,System.String);;Argument[Qualifier];ReturnValue;taint | +| System;String;false;Replace;(System.String,System.String,System.Boolean,System.Globalization.CultureInfo);;Argument[Qualifier];ReturnValue;generated:taint | +| System;String;false;Replace;(System.String,System.String,System.StringComparison);;Argument[1];ReturnValue;generated:taint | +| System;String;false;Replace;(System.String,System.String,System.StringComparison);;Argument[Qualifier];ReturnValue;generated:taint | | System;String;false;Split;(System.Char,System.Int32,System.StringSplitOptions);;Argument[Qualifier];ReturnValue.Element;taint | | System;String;false;Split;(System.Char,System.StringSplitOptions);;Argument[Qualifier];ReturnValue.Element;taint | | System;String;false;Split;(System.Char[]);;Argument[Qualifier];ReturnValue.Element;taint | @@ -3090,11 +10011,13 @@ | System;String;false;String;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | | System;String;false;Substring;(System.Int32);;Argument[Qualifier];ReturnValue;taint | | System;String;false;Substring;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;taint | +| System;String;false;ToDateTime;(System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint | | System;String;false;ToLower;();;Argument[Qualifier];ReturnValue;taint | | System;String;false;ToLower;(System.Globalization.CultureInfo);;Argument[Qualifier];ReturnValue;taint | | System;String;false;ToLowerInvariant;();;Argument[Qualifier];ReturnValue;taint | | System;String;false;ToString;();;Argument[Qualifier];ReturnValue;value | | System;String;false;ToString;(System.IFormatProvider);;Argument[Qualifier];ReturnValue;value | +| System;String;false;ToType;(System.Type,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint | | System;String;false;ToUpper;();;Argument[Qualifier];ReturnValue;taint | | System;String;false;ToUpper;(System.Globalization.CultureInfo);;Argument[Qualifier];ReturnValue;taint | | System;String;false;ToUpperInvariant;();;Argument[Qualifier];ReturnValue;taint | @@ -3107,6 +10030,58 @@ | System;String;false;TrimStart;();;Argument[Qualifier];ReturnValue;taint | | System;String;false;TrimStart;(System.Char);;Argument[Qualifier];ReturnValue;taint | | System;String;false;TrimStart;(System.Char[]);;Argument[Qualifier];ReturnValue;taint | +| System;StringNormalizationExtensions;false;Normalize;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;StringNormalizationExtensions;false;Normalize;(System.String,System.Text.NormalizationForm);;Argument[0];ReturnValue;generated:taint | +| System;TimeZone;true;ToLocalTime;(System.DateTime);;Argument[0];ReturnValue;generated:taint | +| System;TimeZone;true;ToUniversalTime;(System.DateTime);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[1];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[2];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[3];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[4];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;get_DateEnd;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;get_DateStart;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;get_DaylightDelta;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;get_DaylightTransitionEnd;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;get_DaylightTransitionStart;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo+TransitionTime;false;CreateFixedDateRule;(System.DateTime,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo+TransitionTime;false;CreateFloatingDateRule;(System.DateTime,System.Int32,System.Int32,System.DayOfWeek);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo+TransitionTime;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;TimeZoneInfo+TransitionTime;false;get_TimeOfDay;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTime;(System.DateTime,System.TimeZoneInfo);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTime;(System.DateTime,System.TimeZoneInfo,System.TimeZoneInfo);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTimeBySystemTimeZoneId;(System.DateTime,System.String);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTimeBySystemTimeZoneId;(System.DateTime,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTimeFromUtc;(System.DateTime,System.TimeZoneInfo);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTimeToUtc;(System.DateTime);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTimeToUtc;(System.DateTime,System.TimeZoneInfo);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String);;Argument[3];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[1];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[2];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[3];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[4];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[5].Element;ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[1];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[2];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[3];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[4];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[5].Element;ReturnValue;generated:taint | +| System;TimeZoneInfo;false;FindSystemTimeZoneById;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;TimeZoneInfo;false;GetUtcOffset;(System.DateTime);;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;GetUtcOffset;(System.DateTimeOffset);;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;get_BaseUtcOffset;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;get_DaylightName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;get_StandardName;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple;false;Create<,,,,,,,>;(T1,T2,T3,T4,T5,T6,T7,T8);;Argument[0];ReturnValue.Property[System.Tuple<,,,,,,,>.Item1];value | | System;Tuple;false;Create<,,,,,,,>;(T1,T2,T3,T4,T5,T6,T7,T8);;Argument[1];ReturnValue.Property[System.Tuple<,,,,,,,>.Item2];value | | System;Tuple;false;Create<,,,,,,,>;(T1,T2,T3,T4,T5,T6,T7,T8);;Argument[2];ReturnValue.Property[System.Tuple<,,,,,,,>.Item3];value | @@ -3142,6 +10117,7 @@ | System;Tuple;false;Create<,>;(T1,T2);;Argument[0];ReturnValue.Property[System.Tuple<,>.Item1];value | | System;Tuple;false;Create<,>;(T1,T2);;Argument[1];ReturnValue.Property[System.Tuple<,>.Item2];value | | System;Tuple;false;Create<>;(T1);;Argument[0];ReturnValue.Property[System.Tuple<>.Item1];value | +| System;Tuple<,,,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[0];ReturnValue.Property[System.Tuple<,,,,,,,>.Item1];value | | System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[1];ReturnValue.Property[System.Tuple<,,,,,,,>.Item2];value | | System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[2];ReturnValue.Property[System.Tuple<,,,,,,,>.Item3];value | @@ -3149,6 +10125,13 @@ | System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[4];ReturnValue.Property[System.Tuple<,,,,,,,>.Item5];value | | System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[5];ReturnValue.Property[System.Tuple<,,,,,,,>.Item6];value | | System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[6];ReturnValue.Property[System.Tuple<,,,,,,,>.Item7];value | +| System;Tuple<,,,,,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,,>;false;get_Item5;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,,>;false;get_Item6;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,,>;false;get_Item7;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item1];ReturnValue;value | | System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item2];ReturnValue;value | | System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item3];ReturnValue;value | @@ -3156,6 +10139,8 @@ | System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item5];ReturnValue;value | | System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item6];ReturnValue;value | | System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item7];ReturnValue;value | +| System;Tuple<,,,,,,,>;false;get_Rest;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[0];ReturnValue.Property[System.Tuple<,,,,,,>.Item1];value | | System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[1];ReturnValue.Property[System.Tuple<,,,,,,>.Item2];value | | System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[2];ReturnValue.Property[System.Tuple<,,,,,,>.Item3];value | @@ -3163,6 +10148,13 @@ | System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[4];ReturnValue.Property[System.Tuple<,,,,,,>.Item5];value | | System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[5];ReturnValue.Property[System.Tuple<,,,,,,>.Item6];value | | System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[6];ReturnValue.Property[System.Tuple<,,,,,,>.Item7];value | +| System;Tuple<,,,,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;get_Item5;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;get_Item6;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;get_Item7;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item1];ReturnValue;value | | System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item2];ReturnValue;value | | System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item3];ReturnValue;value | @@ -3170,47 +10162,74 @@ | System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item5];ReturnValue;value | | System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item6];ReturnValue;value | | System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item7];ReturnValue;value | +| System;Tuple<,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[0];ReturnValue.Property[System.Tuple<,,,,,>.Item1];value | | System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[1];ReturnValue.Property[System.Tuple<,,,,,>.Item2];value | | System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[2];ReturnValue.Property[System.Tuple<,,,,,>.Item3];value | | System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[3];ReturnValue.Property[System.Tuple<,,,,,>.Item4];value | | System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[4];ReturnValue.Property[System.Tuple<,,,,,>.Item5];value | | System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[5];ReturnValue.Property[System.Tuple<,,,,,>.Item6];value | +| System;Tuple<,,,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,>;false;get_Item5;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,>;false;get_Item6;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item1];ReturnValue;value | | System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item2];ReturnValue;value | | System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item3];ReturnValue;value | | System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item4];ReturnValue;value | | System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item5];ReturnValue;value | | System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item6];ReturnValue;value | +| System;Tuple<,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[0];ReturnValue.Property[System.Tuple<,,,,>.Item1];value | | System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[1];ReturnValue.Property[System.Tuple<,,,,>.Item2];value | | System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[2];ReturnValue.Property[System.Tuple<,,,,>.Item3];value | | System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[3];ReturnValue.Property[System.Tuple<,,,,>.Item4];value | | System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[4];ReturnValue.Property[System.Tuple<,,,,>.Item5];value | +| System;Tuple<,,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,>;false;get_Item5;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item1];ReturnValue;value | | System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item2];ReturnValue;value | | System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item3];ReturnValue;value | | System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item4];ReturnValue;value | | System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item5];ReturnValue;value | +| System;Tuple<,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[0];ReturnValue.Property[System.Tuple<,,,>.Item1];value | | System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[1];ReturnValue.Property[System.Tuple<,,,>.Item2];value | | System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[2];ReturnValue.Property[System.Tuple<,,,>.Item3];value | | System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[3];ReturnValue.Property[System.Tuple<,,,>.Item4];value | +| System;Tuple<,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,>.Item1];ReturnValue;value | | System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,>.Item2];ReturnValue;value | | System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,>.Item3];ReturnValue;value | | System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,>.Item4];ReturnValue;value | +| System;Tuple<,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,>;false;Tuple;(T1,T2,T3);;Argument[0];ReturnValue.Property[System.Tuple<,,>.Item1];value | | System;Tuple<,,>;false;Tuple;(T1,T2,T3);;Argument[1];ReturnValue.Property[System.Tuple<,,>.Item2];value | | System;Tuple<,,>;false;Tuple;(T1,T2,T3);;Argument[2];ReturnValue.Property[System.Tuple<,,>.Item3];value | +| System;Tuple<,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,>.Item1];ReturnValue;value | | System;Tuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,>.Item2];ReturnValue;value | | System;Tuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,>.Item3];ReturnValue;value | +| System;Tuple<,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,>;false;Tuple;(T1,T2);;Argument[0];ReturnValue.Property[System.Tuple<,>.Item1];value | | System;Tuple<,>;false;Tuple;(T1,T2);;Argument[1];ReturnValue.Property[System.Tuple<,>.Item2];value | +| System;Tuple<,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,>.Item1];ReturnValue;value | | System;Tuple<,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,>.Item2];ReturnValue;value | +| System;Tuple<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<>;false;Tuple;(T1);;Argument[0];ReturnValue.Property[System.Tuple<>.Item1];value | +| System;Tuple<>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<>.Item1];ReturnValue;value | | System;TupleExtensions;false;Deconstruct<,,,,,,,,,,,,,,,,,,,,>;(System.Tuple>>,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21);;Argument[0].Property[System.Tuple<,,,,,,,>.Item1];Argument[1];value | | System;TupleExtensions;false;Deconstruct<,,,,,,,,,,,,,,,,,,,,>;(System.Tuple>>,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21);;Argument[0].Property[System.Tuple<,,,,,,,>.Item2];Argument[2];value | @@ -3338,13 +10357,159 @@ | System;TupleExtensions;false;Deconstruct<,>;(System.Tuple,T1,T2);;Argument[0].Property[System.Tuple<,>.Item1];Argument[1];value | | System;TupleExtensions;false;Deconstruct<,>;(System.Tuple,T1,T2);;Argument[0].Property[System.Tuple<,>.Item2];Argument[2];value | | System;TupleExtensions;false;Deconstruct<>;(System.Tuple,T1);;Argument[0].Property[System.Tuple<>.Item1];Argument[1];value | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;Type;false;GetConstructor;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetConstructor;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetConstructor;(System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetConstructors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetEvent;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetField;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetFields;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetInterface;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMember;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMembers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Int32,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Int32,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethods;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetNestedType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetNestedTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String,System.Type,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;MakeGenericSignatureType;(System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System;Type;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;get_TypeInitializer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;true;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;true;GetMember;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;true;get_GenericTypeArguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TypeInitializationException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;TypeInitializationException;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TypeLoadException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;TypeLoadException;false;TypeLoadException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;TypeLoadException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TypeLoadException;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UIntPtr;false;ToPointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UIntPtr;false;UIntPtr;(System.Void*);;Argument[0];Argument[Qualifier];generated:taint | +| System;UnhandledExceptionEventArgs;false;UnhandledExceptionEventArgs;(System.Object,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System;UnhandledExceptionEventArgs;false;get_ExceptionObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;EscapeDataString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;EscapeString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;EscapeUriString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;GetComponents;(System.UriComponents,System.UriFormat);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;GetLeftPart;(System.UriPartial);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;Uri;false;MakeRelative;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;MakeRelativeUri;(System.Uri);;Argument[0];ReturnValue;generated:taint | | System;Uri;false;ToString;();;Argument[Qualifier];ReturnValue;taint | +| System;Uri;false;TryCreate;(System.String,System.UriKind,System.Uri);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;TryCreate;(System.Uri,System.String,System.Uri);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;TryCreate;(System.Uri,System.String,System.Uri);;Argument[1];ReturnValue;generated:taint | +| System;Uri;false;TryCreate;(System.Uri,System.Uri,System.Uri);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;TryCreate;(System.Uri,System.Uri,System.Uri);;Argument[1];ReturnValue;generated:taint | +| System;Uri;false;UnescapeDataString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;Uri;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | | System;Uri;false;Uri;(System.String);;Argument[0];ReturnValue;taint | | System;Uri;false;Uri;(System.String,System.Boolean);;Argument[0];ReturnValue;taint | | System;Uri;false;Uri;(System.String,System.UriKind);;Argument[0];ReturnValue;taint | +| System;Uri;false;Uri;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;Uri;false;Uri;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;Uri;false;Uri;(System.Uri,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System;Uri;false;Uri;(System.Uri,System.String,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System;Uri;false;Uri;(System.Uri,System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System;Uri;false;Uri;(System.Uri,System.Uri);;Argument[1];Argument[Qualifier];generated:taint | +| System;Uri;false;get_Authority;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;get_DnsSafeHost;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;get_IdnHost;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;get_LocalPath;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Uri;false;get_OriginalString;();;Argument[Qualifier];ReturnValue;taint | | System;Uri;false;get_PathAndQuery;();;Argument[Qualifier];ReturnValue;taint | | System;Uri;false;get_Query;();;Argument[Qualifier];ReturnValue;taint | +| System;Uri;false;get_Scheme;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;get_UserInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;UriBuilder;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;UriBuilder;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;UriBuilder;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;UriBuilder;(System.String,System.String,System.Int32,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;UriBuilder;(System.String,System.String,System.Int32,System.String,System.String);;Argument[4];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;UriBuilder;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;get_Fragment;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_Password;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_Path;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_Query;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_Scheme;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_Uri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_UserName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;set_Fragment;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;set_Host;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;set_Password;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;set_Path;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;set_Query;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;set_Scheme;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;set_UserName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriFormatException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;UriParser;false;Register;(System.UriParser,System.String,System.Int32);;Argument[1];Argument[0];generated:taint | +| System;UriParser;true;GetComponents;(System.Uri,System.UriComponents,System.UriFormat);;Argument[0];ReturnValue;generated:taint | +| System;UriParser;true;OnNewUri;();;Argument[Qualifier];ReturnValue;generated:value | +| System;UriParser;true;Resolve;(System.Uri,System.Uri,System.UriFormatException);;Argument[0];ReturnValue;generated:taint | +| System;UriParser;true;Resolve;(System.Uri,System.Uri,System.UriFormatException);;Argument[1];ReturnValue;generated:taint | +| System;UriTypeConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint | +| System;UriTypeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | | System;ValueTuple;false;Create<,,,,,,,>;(T1,T2,T3,T4,T5,T6,T7,T8);;Argument[0];ReturnValue.Field[System.ValueTuple<,,,,,,,>.Item1];value | | System;ValueTuple;false;Create<,,,,,,,>;(T1,T2,T3,T4,T5,T6,T7,T8);;Argument[1];ReturnValue.Field[System.ValueTuple<,,,,,,,>.Item2];value | | System;ValueTuple;false;Create<,,,,,,,>;(T1,T2,T3,T4,T5,T6,T7,T8);;Argument[2];ReturnValue.Field[System.ValueTuple<,,,,,,,>.Item3];value | @@ -3380,6 +10545,7 @@ | System;ValueTuple;false;Create<,>;(T1,T2);;Argument[0];ReturnValue.Field[System.ValueTuple<,>.Item1];value | | System;ValueTuple;false;Create<,>;(T1,T2);;Argument[1];ReturnValue.Field[System.ValueTuple<,>.Item2];value | | System;ValueTuple;false;Create<>;(T1);;Argument[0];ReturnValue.Field[System.ValueTuple<>.Item1];value | +| System;ValueTuple<,,,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[0];ReturnValue.Field[System.ValueTuple<,,,,,,,>.Item1];value | | System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[1];ReturnValue.Field[System.ValueTuple<,,,,,,,>.Item2];value | | System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[2];ReturnValue.Field[System.ValueTuple<,,,,,,,>.Item3];value | @@ -3394,6 +10560,7 @@ | System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item5];ReturnValue;value | | System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item6];ReturnValue;value | | System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item7];ReturnValue;value | +| System;ValueTuple<,,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[0];ReturnValue.Field[System.ValueTuple<,,,,,,>.Item1];value | | System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[1];ReturnValue.Field[System.ValueTuple<,,,,,,>.Item2];value | | System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[2];ReturnValue.Field[System.ValueTuple<,,,,,,>.Item3];value | @@ -3408,6 +10575,7 @@ | System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item5];ReturnValue;value | | System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item6];ReturnValue;value | | System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item7];ReturnValue;value | +| System;ValueTuple<,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[0];ReturnValue.Field[System.ValueTuple<,,,,,>.Item1];value | | System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[1];ReturnValue.Field[System.ValueTuple<,,,,,>.Item2];value | | System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[2];ReturnValue.Field[System.ValueTuple<,,,,,>.Item3];value | @@ -3420,6 +10588,7 @@ | System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item4];ReturnValue;value | | System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item5];ReturnValue;value | | System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item6];ReturnValue;value | +| System;ValueTuple<,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[0];ReturnValue.Field[System.ValueTuple<,,,,>.Item1];value | | System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[1];ReturnValue.Field[System.ValueTuple<,,,,>.Item2];value | | System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[2];ReturnValue.Field[System.ValueTuple<,,,,>.Item3];value | @@ -3430,6 +10599,7 @@ | System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item3];ReturnValue;value | | System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item4];ReturnValue;value | | System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item5];ReturnValue;value | +| System;ValueTuple<,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[0];ReturnValue.Field[System.ValueTuple<,,,>.Item1];value | | System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[1];ReturnValue.Field[System.ValueTuple<,,,>.Item2];value | | System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[2];ReturnValue.Field[System.ValueTuple<,,,>.Item3];value | @@ -3438,15 +10608,18 @@ | System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,>.Item2];ReturnValue;value | | System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,>.Item3];ReturnValue;value | | System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,>.Item4];ReturnValue;value | +| System;ValueTuple<,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,,>;false;ValueTuple;(T1,T2,T3);;Argument[0];ReturnValue.Field[System.ValueTuple<,,>.Item1];value | | System;ValueTuple<,,>;false;ValueTuple;(T1,T2,T3);;Argument[1];ReturnValue.Field[System.ValueTuple<,,>.Item2];value | | System;ValueTuple<,,>;false;ValueTuple;(T1,T2,T3);;Argument[2];ReturnValue.Field[System.ValueTuple<,,>.Item3];value | | System;ValueTuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,>.Item1];ReturnValue;value | | System;ValueTuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,>.Item2];ReturnValue;value | | System;ValueTuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,>.Item3];ReturnValue;value | +| System;ValueTuple<,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,>;false;ValueTuple;(T1,T2);;Argument[0];ReturnValue.Field[System.ValueTuple<,>.Item1];value | | System;ValueTuple<,>;false;ValueTuple;(T1,T2);;Argument[1];ReturnValue.Field[System.ValueTuple<,>.Item2];value | | System;ValueTuple<,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,>.Item1];ReturnValue;value | | System;ValueTuple<,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,>.Item2];ReturnValue;value | +| System;ValueTuple<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<>;false;ValueTuple;(T1);;Argument[0];ReturnValue.Field[System.ValueTuple<>.Item1];value | | System;ValueTuple<>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<>.Item1];ReturnValue;value | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql index ab446617404..811a81a934c 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql @@ -1,5 +1,5 @@ import shared.FlowSummaries private class IncludeAllSummarizedCallable extends IncludeSummarizedCallable { - IncludeAllSummarizedCallable() { this instanceof SummarizedCallable } + IncludeAllSummarizedCallable() { exists(this) } } diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index d08b311114e..68fda845a4a 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -1,3 +1,31 @@ +| Microsoft.CSharp.RuntimeBinder;Binder;false;BinaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;BinaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;Convert;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Type);;Argument[2];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;GetIndex;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[1];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;GetIndex;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;GetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;GetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;Invoke;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[1];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;Invoke;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;InvokeConstructor;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[1];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;InvokeConstructor;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;InvokeMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Collections.Generic.IEnumerable,System.Type,System.Collections.Generic.IEnumerable);;Argument[4].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;IsEvent;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type);;Argument[2];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;SetIndex;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[1];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;SetIndex;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;SetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;SetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;UnaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;generated:taint | +| Microsoft.CSharp.RuntimeBinder;Binder;false;UnaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint | +| Microsoft.Extensions.Primitives;Extensions;false;Append;(System.Text.StringBuilder,Microsoft.Extensions.Primitives.StringSegment);;Argument[0];ReturnValue;generated:taint | +| Microsoft.Extensions.Primitives;StringSegment;false;Split;(System.Char[]);;Argument[0].Element;ReturnValue;generated:taint | +| Microsoft.Extensions.Primitives;StringSegment;false;Split;(System.Char[]);;Argument[Qualifier];ReturnValue;generated:taint | +| Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;false;Enumerator;(Microsoft.Extensions.Primitives.StringTokenizer);;Argument[0].Element;Argument[Qualifier];generated:taint | +| Microsoft.Extensions.Primitives;StringTokenizer;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| Microsoft.Extensions.Primitives;StringTokenizer;false;StringTokenizer;(Microsoft.Extensions.Primitives.StringSegment,System.Char[]);;Argument[0];Argument[Qualifier];generated:taint | +| Microsoft.Extensions.Primitives;StringTokenizer;false;StringTokenizer;(Microsoft.Extensions.Primitives.StringSegment,System.Char[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| Microsoft.Extensions.Primitives;StringTokenizer;false;StringTokenizer;(System.String,System.Char[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| Microsoft.Extensions.Primitives;StringValues+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | Microsoft.Extensions.Primitives;StringValues;false;Add;(System.String);;Argument[0];ReturnValue;taint | | Microsoft.Extensions.Primitives;StringValues;false;Add;(System.String);;Argument[Qualifier];ReturnValue;taint | | Microsoft.Extensions.Primitives;StringValues;false;Concat;(Microsoft.Extensions.Primitives.StringValues,Microsoft.Extensions.Primitives.StringValues);;Argument[0];ReturnValue;taint | @@ -56,6 +84,10 @@ | Microsoft.VisualBasic;Collection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | Microsoft.VisualBasic;Collection;false;get_Item;(System.Object);;Argument[Qualifier].Element;ReturnValue;value | | Microsoft.VisualBasic;Collection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | +| Microsoft.Win32.SafeHandles;SafeFileHandle;false;SafeFileHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| Microsoft.Win32.SafeHandles;SafePipeHandle;false;SafePipeHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| Microsoft.Win32.SafeHandles;SafeProcessHandle;false;SafeProcessHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| Microsoft.Win32.SafeHandles;SafeWaitHandle;false;SafeWaitHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | | Newtonsoft.Json.Linq;JArray;false;get_Item;(System.Object);;Argument[Qualifier].Element;ReturnValue;value | | Newtonsoft.Json.Linq;JArray;false;set_Item;(System.Object,Newtonsoft.Json.Linq.JToken);;Argument[1];Argument[Qualifier].Element;value | | Newtonsoft.Json.Linq;JConstructor;false;get_Item;(System.Object);;Argument[Qualifier].Element;ReturnValue;value | @@ -147,9 +179,74 @@ | Newtonsoft.Json;JsonSerializer;false;Serialize;(Newtonsoft.Json.JsonWriter,System.Object,System.Type);;Argument[1];Argument[0];taint | | Newtonsoft.Json;JsonSerializer;false;Serialize;(System.IO.TextWriter,System.Object);;Argument[1];Argument[0];taint | | Newtonsoft.Json;JsonSerializer;false;Serialize;(System.IO.TextWriter,System.Object,System.Type);;Argument[1];Argument[0];taint | +| System.Buffers;ArrayBufferWriter<>;false;GetMemory;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ArrayBufferWriter<>;false;get_WrittenMemory;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;BuffersExtensions;false;PositionOf<>;(System.Buffers.ReadOnlySequence,T);;Argument[0];ReturnValue;generated:taint | +| System.Buffers;MemoryHandle;false;MemoryHandle;(System.Void*,System.Runtime.InteropServices.GCHandle,System.Buffers.IPinnable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Buffers;MemoryHandle;false;MemoryHandle;(System.Void*,System.Runtime.InteropServices.GCHandle,System.Buffers.IPinnable);;Argument[1];Argument[Qualifier];generated:taint | +| System.Buffers;MemoryHandle;false;MemoryHandle;(System.Void*,System.Runtime.InteropServices.GCHandle,System.Buffers.IPinnable);;Argument[2];Argument[Qualifier];generated:taint | +| System.Buffers;MemoryHandle;false;get_Pointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;MemoryManager<>;false;CreateMemory;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;MemoryManager<>;false;CreateMemory;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;MemoryManager<>;true;get_Memory;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>+Enumerator;false;Enumerator;(System.Buffers.ReadOnlySequence<>);;Argument[0];Argument[Qualifier];generated:taint | +| System.Buffers;ReadOnlySequence<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;GetPosition;(System.Int64);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;GetPosition;(System.Int64,System.SequencePosition);;Argument[1];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);;Argument[2];Argument[Qualifier];generated:taint | +| System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(System.ReadOnlyMemory);;Argument[0];Argument[Qualifier];generated:taint | +| System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(T[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Buffers;ReadOnlySequence<>;false;ReadOnlySequence;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int32,System.SequencePosition);;Argument[1];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int32,System.SequencePosition);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int64);;Argument[Qualifier];ReturnValue;generated:value | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int64,System.Int64);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int64,System.SequencePosition);;Argument[1];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.Int64,System.SequencePosition);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition);;Argument[0];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.Int64);;Argument[0];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.Int64);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.SequencePosition);;Argument[0];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;Slice;(System.SequencePosition,System.SequencePosition);;Argument[1];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;TryGet;(System.SequencePosition,System.ReadOnlyMemory,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;get_End;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;get_First;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;ReadOnlySequence<>;false;get_Start;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;SequenceReader<>;false;SequenceReader;(System.Buffers.ReadOnlySequence);;Argument[0];Argument[Qualifier];generated:taint | +| System.Buffers;SequenceReader<>;false;TryReadTo;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;SequenceReader<>;false;TryReadTo;(System.Buffers.ReadOnlySequence,T,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;SequenceReader<>;false;TryReadTo;(System.Buffers.ReadOnlySequence,T,T,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;SequenceReader<>;false;TryReadToAny;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;SequenceReader<>;false;get_Position;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Buffers;SequenceReader<>;false;get_UnreadSequence;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.CodeDom.Compiler;GeneratedCodeAttribute;false;GeneratedCodeAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;GeneratedCodeAttribute;false;GeneratedCodeAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;GeneratedCodeAttribute;false;get_Tool;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.CodeDom.Compiler;GeneratedCodeAttribute;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;IndentedTextWriter;(System.IO.TextWriter,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;IndentedTextWriter;(System.IO.TextWriter,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.CodeDom.Compiler;IndentedTextWriter;false;get_InnerWriter;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Concurrent;BlockingCollection<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Concurrent;BlockingCollection<>;false;Add;(T,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;BlockingCollection<>;false;BlockingCollection;(System.Collections.Concurrent.IProducerConsumerCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;BlockingCollection<>;false;BlockingCollection;(System.Collections.Concurrent.IProducerConsumerCollection,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections.Concurrent;BlockingCollection<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Concurrent;BlockingCollection<>;false;TryAdd;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;BlockingCollection<>;false;TryAdd;(T,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;BlockingCollection<>;false;TryAdd;(T,System.Int32,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;BlockingCollection<>;false;TryAdd;(T,System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Concurrent;ConcurrentBag<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Concurrent;ConcurrentBag<>;false;ToArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Concurrent;ConcurrentBag<>;false;TryAdd;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;ConcurrentBag<>;false;TryPeek;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Concurrent;ConcurrentBag<>;false;TryTake;(T);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;ConcurrentDictionary;(System.Collections.Generic.IEnumerable>);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | @@ -158,11 +255,41 @@ | System.Collections.Concurrent;ConcurrentDictionary<,>;false;ConcurrentDictionary;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;ConcurrentDictionary;(System.Int32,System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[1].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;ConcurrentDictionary;(System.Int32,System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[1].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Concurrent;ConcurrentDictionary<,>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Concurrent;ConcurrentDictionary<,>;false;GetOrAdd;(TKey,TValue);;Argument[1];ReturnValue;generated:taint | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | | System.Collections.Concurrent;ConcurrentDictionary<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | +| System.Collections.Concurrent;ConcurrentStack<>;false;ConcurrentStack;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Concurrent;ConcurrentStack<>;false;TryPeek;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Concurrent;ConcurrentStack<>;false;TryPop;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Concurrent;ConcurrentStack<>;false;TryPopRange;(T[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Collections.Concurrent;ConcurrentStack<>;false;TryPopRange;(T[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Collections.Concurrent;ConcurrentStack<>;false;TryTake;(T);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Concurrent;IProducerConsumerCollection<>;true;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Concurrent;OrderablePartitioner<>;false;GetDynamicPartitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Concurrent;Partitioner;false;Create<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Concurrent;Partitioner;false;Create<>;(System.Collections.Generic.IEnumerable,System.Collections.Concurrent.EnumerablePartitionerOptions);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Concurrent;Partitioner;false;Create<>;(System.Collections.Generic.IList,System.Boolean);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Concurrent;Partitioner;false;Create<>;(TSource[],System.Boolean);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Generic;CollectionExtensions;false;GetValueOrDefault<,>;(System.Collections.Generic.IReadOnlyDictionary,TKey,TValue);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Generic;CollectionExtensions;false;GetValueOrDefault<,>;(System.Collections.Generic.IReadOnlyDictionary,TKey,TValue);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Generic;CollectionExtensions;false;GetValueOrDefault<,>;(System.Collections.Generic.IReadOnlyDictionary,TKey,TValue);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Generic;CollectionExtensions;false;Remove<,>;(System.Collections.Generic.IDictionary,TKey,TValue);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Generic;CollectionExtensions;false;TryAdd<,>;(System.Collections.Generic.IDictionary,TKey,TValue);;Argument[0].Element;Argument[2];generated:taint | +| System.Collections.Generic;CollectionExtensions;false;TryAdd<,>;(System.Collections.Generic.IDictionary,TKey,TValue);;Argument[1];Argument[0].Element;generated:taint | +| System.Collections.Generic;CollectionExtensions;false;TryAdd<,>;(System.Collections.Generic.IDictionary,TKey,TValue);;Argument[2];Argument[0].Element;generated:taint | +| System.Collections.Generic;Dictionary<,>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Dictionary<,>+Enumerator;false;get_Entry;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Dictionary<,>+Enumerator;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Dictionary<,>+Enumerator;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Dictionary<,>+KeyCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;Dictionary<,>+KeyCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.Dictionary<,>+KeyCollection+Enumerator.Current];value | +| System.Collections.Generic;Dictionary<,>+KeyCollection;false;KeyCollection;(System.Collections.Generic.Dictionary<,>);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;Dictionary<,>+KeyCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Dictionary<,>+ValueCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;Dictionary<,>+ValueCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.Dictionary<,>+ValueCollection+Enumerator.Current];value | +| System.Collections.Generic;Dictionary<,>+ValueCollection;false;ValueCollection;(System.Collections.Generic.Dictionary<,>);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;Dictionary<,>+ValueCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;Dictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;Dictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Generic;Dictionary<,>;false;Dictionary;(System.Collections.Generic.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | @@ -173,10 +300,19 @@ | System.Collections.Generic;Dictionary<,>;false;Dictionary;(System.Collections.Generic.IEnumerable>);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Generic;Dictionary<,>;false;Dictionary;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;Dictionary<,>;false;Dictionary;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Generic;Dictionary<,>;false;Dictionary;(System.Int32,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[Qualifier];generated:taint | | System.Collections.Generic;Dictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.Dictionary<,>+Enumerator.Current];value | +| System.Collections.Generic;Dictionary<,>;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections.Generic;Dictionary<,>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;Dictionary<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Generic;Dictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Generic;Dictionary<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | +| System.Collections.Generic;HashSet<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;HashSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.HashSet<>+Enumerator.Current];value | +| System.Collections.Generic;HashSet<>;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections.Generic;HashSet<>;false;HashSet;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;HashSet<>;false;TryGetValue;(T,T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;HashSet<>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;ICollection<>;true;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Generic;ICollection<>;true;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;IDictionary<,>;true;Add;(TKey,TValue);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | @@ -191,13 +327,57 @@ | System.Collections.Generic;IList<>;true;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Collections.Generic;IList<>;true;set_Item;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Generic;ISet<>;true;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Generic;KeyValuePair;false;Create<,>;(TKey,TValue);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Generic;KeyValuePair;false;Create<,>;(TKey,TValue);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Generic;KeyValuePair<,>;false;Deconstruct;(TKey,TValue);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;KeyValuePair<,>;false;KeyValuePair;(TKey,TValue);;Argument[0];ReturnValue.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;KeyValuePair<,>;false;KeyValuePair;(TKey,TValue);;Argument[1];ReturnValue.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Generic;KeyValuePair<,>;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;KeyValuePair<,>;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddAfter;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[0];Argument[1];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddAfter;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddAfter;(System.Collections.Generic.LinkedListNode,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddAfter;(System.Collections.Generic.LinkedListNode,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[0];Argument[1];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[1];Argument[0];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,System.Collections.Generic.LinkedListNode);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[1];Argument[0];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddBefore;(System.Collections.Generic.LinkedListNode,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddFirst;(System.Collections.Generic.LinkedListNode);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddFirst;(System.Collections.Generic.LinkedListNode);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddFirst;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddFirst;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddFirst;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddLast;(System.Collections.Generic.LinkedListNode);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddLast;(System.Collections.Generic.LinkedListNode);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddLast;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddLast;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;AddLast;(T);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;LinkedList<>;false;Find;(T);;Argument[Qualifier].Element;ReturnValue;value | | System.Collections.Generic;LinkedList<>;false;FindLast;(T);;Argument[Qualifier].Element;ReturnValue;value | | System.Collections.Generic;LinkedList<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.LinkedList<>+Enumerator.Current];value | +| System.Collections.Generic;LinkedList<>;false;LinkedList;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;LinkedList;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;Remove;(System.Collections.Generic.LinkedListNode);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedList<>;false;get_First;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;get_Last;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedList<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Generic;LinkedListNode<>;false;LinkedListNode;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;LinkedListNode<>;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedListNode<>;false;get_Next;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedListNode<>;false;get_Previous;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedListNode<>;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;LinkedListNode<>;false;set_Value;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;List<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;List<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Generic;List<>;false;AsReadOnly;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Generic;List<>;false;CopyTo;(T[]);;Argument[Qualifier];Argument[0].Element;generated:taint | | System.Collections.Generic;List<>;false;Find;(System.Predicate);;Argument[Qualifier].Element;Argument[0].Parameter[0];value | | System.Collections.Generic;List<>;false;Find;(System.Predicate);;Argument[Qualifier].Element;ReturnValue;value | | System.Collections.Generic;List<>;false;FindAll;(System.Predicate);;Argument[Qualifier].Element;Argument[0].Parameter[0];value | @@ -207,13 +387,26 @@ | System.Collections.Generic;List<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.List<>+Enumerator.Current];value | | System.Collections.Generic;List<>;false;GetRange;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | | System.Collections.Generic;List<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier].Element;value | +| System.Collections.Generic;List<>;false;List;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections.Generic;List<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections.Generic;List<>;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Generic;List<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Generic;Queue<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;Queue<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Generic;Queue<>;false;Dequeue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Queue<>;false;Enqueue;(T);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Generic;Queue<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.Queue<>+Enumerator.Current];value | | System.Collections.Generic;Queue<>;false;Peek;();;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Generic;Queue<>;false;Queue;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;Queue<>;false;TryDequeue;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Queue<>;false;TryPeek;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Queue<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.SortedDictionary<,>+KeyCollection+Enumerator.Current];value | +| System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;KeyCollection;(System.Collections.Generic.SortedDictionary<,>);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;SortedDictionary<,>+KeyCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.SortedDictionary<,>+ValueCollection+Enumerator.Current];value | +| System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;ValueCollection;(System.Collections.Generic.SortedDictionary<,>);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;SortedDictionary<,>+ValueCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;SortedDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;SortedDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Generic;SortedDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.SortedDictionary<,>+Enumerator.Current];value | @@ -222,26 +415,63 @@ | System.Collections.Generic;SortedDictionary<,>;false;SortedDictionary;(System.Collections.Generic.IDictionary,System.Collections.Generic.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;SortedDictionary<,>;false;SortedDictionary;(System.Collections.Generic.IDictionary,System.Collections.Generic.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Generic;SortedDictionary<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Generic;SortedDictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;SortedDictionary<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.Generic;SortedList<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;SortedList<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Generic;SortedList<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | +| System.Collections.Generic;SortedList<,>;false;SortedList;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Generic;SortedList<,>;false;SortedList;(System.Collections.Generic.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;SortedList<,>;false;SortedList;(System.Collections.Generic.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Generic;SortedList<,>;false;SortedList;(System.Collections.Generic.IDictionary,System.Collections.Generic.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Generic;SortedList<,>;false;SortedList;(System.Collections.Generic.IDictionary,System.Collections.Generic.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Generic;SortedList<,>;false;TryGetValue;(TKey,TValue);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;SortedList<,>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;SortedList<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Generic;SortedList<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Generic;SortedList<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | | System.Collections.Generic;SortedSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.SortedSet<>+Enumerator.Current];value | +| System.Collections.Generic;SortedSet<>;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;SortedSet<>;false;IntersectWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections.Generic;SortedSet<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Generic;SortedSet<>;false;SortedSet;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;SortedSet<>;false;SortedSet;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;SortedSet<>;false;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;SortedSet<>;false;UnionWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;SortedSet<>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;SortedSet<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Generic;Stack<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Generic;Stack<>;false;CopyTo;(T[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Generic;Stack<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.Stack<>+Enumerator.Current];value | | System.Collections.Generic;Stack<>;false;Peek;();;Argument[Qualifier].Element;ReturnValue;value | | System.Collections.Generic;Stack<>;false;Pop;();;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Generic;Stack<>;false;Push;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Generic;Stack<>;false;Stack;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Generic;Stack<>;false;ToArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Stack<>;false;TryPeek;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Stack<>;false;TryPop;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Generic;Stack<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Immutable;IImmutableDictionary<,>;true;AddRange;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;IImmutableList<>;true;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;IImmutableList<>;true;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;IImmutableSet<>;true;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(System.Collections.Immutable.ImmutableArray,System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T,T);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T,T,T,T);;Argument[3];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;Create<>;(T[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray;false;ToImmutableArray<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableArray<>+Builder;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableArray<>+Builder;false;AddRange;(System.Collections.Immutable.ImmutableArray<>);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableArray<>+Builder;false;AddRange;(System.Collections.Immutable.ImmutableArray<>+Builder);;Argument[0].Element;Argument[Qualifier].Element;value | @@ -250,26 +480,135 @@ | System.Collections.Immutable;ImmutableArray<>+Builder;false;AddRange<>;(System.Collections.Immutable.ImmutableArray+Builder);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableArray<>+Builder;false;AddRange<>;(TDerived[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableArray<>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | +| System.Collections.Immutable;ImmutableArray<>+Builder;false;MoveToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableArray<>+Builder;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableArray<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Add;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Immutable.ImmutableArray<>);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Immutable.ImmutableArray<>);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;As<>;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;AsMemory;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;CastArray<>;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;CastUp<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Insert;(System.Int32,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;InsertRange;(System.Int32,System.Collections.Immutable.ImmutableArray<>);;Argument[1].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;InsertRange;(System.Int32,System.Collections.Immutable.ImmutableArray<>);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;OfType<>;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Remove;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Remove;(T,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;RemoveAt;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Collections.Immutable.ImmutableArray<>);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Collections.Immutable.ImmutableArray<>,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;RemoveRange;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Replace;(T,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;SetItem;(System.Int32,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Sort;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Sort;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;Sort;(System.Int32,System.Int32,System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableArray<>;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;Create<,>;(System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;Create<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;Create<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[1].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;CreateRange<,>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[2].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;GetValueOrDefault<,>;(System.Collections.Immutable.IImmutableDictionary,TKey,TValue);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary;false;ToImmutableDictionary<,>;(System.Collections.Immutable.ImmutableDictionary+Builder);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;AddRange;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableDictionary<,>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;GetValueOrDefault;(TKey,TValue);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;TryGetKey;(TKey,TKey);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_ValueComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;set_KeyComparer;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>+Builder;false;set_ValueComparer;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableDictionary<,>;false;Add;(TKey,TValue);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableDictionary<,>;false;Add;(TKey,TValue);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableDictionary<,>;false;AddRange;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableDictionary<,>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableDictionary<,>;false;Remove;(TKey);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;RemoveRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;SetItem;(TKey,TValue);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;SetItems;(System.Collections.Generic.IEnumerable>);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;TryGetKey;(TKey,TKey);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;WithComparers;(System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;WithComparers;(System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableDictionary<,>;false;WithComparers;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Immutable;ImmutableDictionary<,>;false;get_Item;(TKey);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | +| System.Collections.Immutable;ImmutableDictionary<,>;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableDictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableDictionary<,>;false;get_ValueComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableDictionary<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableHashSet;false;Create<>;(System.Collections.Generic.IEqualityComparer,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet;false;CreateRange<>;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet;false;ToImmutableHashSet<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet;false;ToImmutableHashSet<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet;false;ToImmutableHashSet<>;(System.Collections.Immutable.ImmutableHashSet+Builder);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableHashSet<>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableHashSet<>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableHashSet<>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>+Builder;false;TryGetValue;(T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>+Builder;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>+Builder;false;set_KeyComparer;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Immutable;ImmutableHashSet<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableHashSet<>;false;Except;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableHashSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableHashSet<>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableHashSet<>;false;Intersect;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;Remove;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;TryGetValue;(T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;WithComparer;(System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableHashSet<>;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableHashSet<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableInterlocked;false;GetOrAdd<,>;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;Create<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;Remove<>;(System.Collections.Immutable.IImmutableList,T);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;RemoveRange<>;(System.Collections.Immutable.IImmutableList,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;Replace<>;(System.Collections.Immutable.IImmutableList,T,T);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;Replace<>;(System.Collections.Immutable.IImmutableList,T,T);;Argument[2];Argument[0].Element;generated:taint | +| System.Collections.Immutable;ImmutableList;false;Replace<>;(System.Collections.Immutable.IImmutableList,T,T);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;ToImmutableList<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList;false;ToImmutableList<>;(System.Collections.Immutable.ImmutableList+Builder);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableList<>+Builder;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableList<>+Builder;false;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);;Argument[2];Argument[3];generated:taint | +| System.Collections.Immutable;ImmutableList<>+Builder;false;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);;Argument[Qualifier];Argument[3];generated:taint | +| System.Collections.Immutable;ImmutableList<>+Builder;false;BinarySearch;(T,System.Collections.Generic.IComparer);;Argument[0];Argument[1];generated:taint | +| System.Collections.Immutable;ImmutableList<>+Builder;false;BinarySearch;(T,System.Collections.Generic.IComparer);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.Immutable;ImmutableList<>+Builder;false;CopyTo;(T[]);;Argument[Qualifier];Argument[0].Element;generated:taint | | System.Collections.Immutable;ImmutableList<>+Builder;false;Find;(System.Predicate);;Argument[Qualifier].Element;Argument[0].Parameter[0];value | | System.Collections.Immutable;ImmutableList<>+Builder;false;Find;(System.Predicate);;Argument[Qualifier].Element;ReturnValue;value | | System.Collections.Immutable;ImmutableList<>+Builder;false;FindAll;(System.Predicate);;Argument[Qualifier].Element;Argument[0].Parameter[0];value | @@ -281,8 +620,16 @@ | System.Collections.Immutable;ImmutableList<>+Builder;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableList<>+Builder;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections.Immutable;ImmutableList<>+Builder;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableList<>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>+Builder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableList<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableList<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableList<>;false;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);;Argument[2];Argument[3];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;BinarySearch;(System.Int32,System.Int32,T,System.Collections.Generic.IComparer);;Argument[Qualifier];Argument[3];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;BinarySearch;(T,System.Collections.Generic.IComparer);;Argument[0];Argument[1];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;BinarySearch;(T,System.Collections.Generic.IComparer);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;CopyTo;(T[]);;Argument[Qualifier];Argument[0].Element;generated:taint | | System.Collections.Immutable;ImmutableList<>;false;Find;(System.Predicate);;Argument[Qualifier].Element;Argument[0].Parameter[0];value | | System.Collections.Immutable;ImmutableList<>;false;Find;(System.Predicate);;Argument[Qualifier].Element;ReturnValue;value | | System.Collections.Immutable;ImmutableList<>;false;FindAll;(System.Predicate);;Argument[Qualifier].Element;Argument[0].Parameter[0];value | @@ -293,66 +640,310 @@ | System.Collections.Immutable;ImmutableList<>;false;GetRange;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | | System.Collections.Immutable;ImmutableList<>;false;Insert;(System.Int32,T);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableList<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableList<>;false;Remove;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Remove;(T,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;RemoveAt;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;RemoveRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;RemoveRange;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;RemoveRange;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableList<>;false;RemoveRange;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableList<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections.Immutable;ImmutableList<>;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Sort;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Sort;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;Sort;(System.Int32,System.Int32,System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableList<>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableList<>;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Immutable;ImmutableList<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableQueue;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue;false;Create<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue;false;Dequeue<>;(System.Collections.Immutable.IImmutableQueue,T);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue<>;false;Dequeue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue<>;false;Dequeue;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue<>;false;Enqueue;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableQueue<>;false;Enqueue;(T);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableQueue<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableQueue<>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableQueue<>;false;Peek;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;Create<,>;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;Create<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;Create<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateBuilder<,>;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateBuilder<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateBuilder<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEnumerable>);;Argument[1].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEnumerable>);;Argument[2].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;CreateRange<,>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[2];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary;false;ToImmutableSortedDictionary<,>;(System.Collections.Immutable.ImmutableSortedDictionary+Builder);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;AddRange;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedDictionary<,>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;GetValueOrDefault;(TKey,TValue);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;TryGetKey;(TKey,TKey);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;TryGetKey;(TKey,TKey);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_ValueComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;set_KeyComparer;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Builder;false;set_ValueComparer;(System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;Add;(TKey,TValue);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;Add;(TKey,TValue);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;AddRange;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedDictionary<,>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;Remove;(TKey);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;RemoveRange;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItem;(TKey,TValue);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItem;(TKey,TValue);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItem;(TKey,TValue);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItems;(System.Collections.Generic.IEnumerable>);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;SetItems;(System.Collections.Generic.IEnumerable>);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;TryGetKey;(TKey,TKey);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;TryGetKey;(TKey,TKey);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;WithComparers;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;WithComparers;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;WithComparers;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_Item;(TKey);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_ValueComparer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedDictionary<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(System.Collections.Generic.IComparer,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(System.Collections.Generic.IComparer,T);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(System.Collections.Generic.IComparer,T[]);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;CreateBuilder<>;(System.Collections.Generic.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;CreateRange<>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;CreateRange<>;(System.Collections.Generic.IComparer,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IComparer);;Argument[1];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Immutable.ImmutableSortedSet+Builder);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedSet<>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;IntersectWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;ToImmutable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;TryGetValue;(T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;TryGetValue;(T,T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;UnionWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;get_Max;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;get_Min;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;set_KeyComparer;(System.Collections.Generic.IComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedSet<>;false;Add;(T);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Except;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedSet<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedSet<>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Intersect;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Remove;(T);;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableSortedSet<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;ToBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;TryGetValue;(T,T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;TryGetValue;(T,T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Union;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableSortedSet<>;false;WithComparer;(System.Collections.Generic.IComparer);;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Immutable;ImmutableSortedSet<>;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Immutable;ImmutableSortedSet<>;false;get_KeyComparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;get_Max;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;get_Min;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableSortedSet<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Immutable;ImmutableStack;false;Create<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack;false;Create<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack;false;CreateRange<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack;false;Pop<>;(System.Collections.Immutable.IImmutableStack,T);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Immutable;ImmutableStack<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableStack<>+Enumerator.Current];value | +| System.Collections.Immutable;ImmutableStack<>;false;Peek;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack<>;false;Pop;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack<>;false;Pop;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack<>;false;Push;(T);;Argument[0];ReturnValue;generated:taint | +| System.Collections.Immutable;ImmutableStack<>;false;Push;(T);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.ObjectModel;Collection<>;false;Collection;(System.Collections.Generic.IList);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;Collection<>;false;InsertItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;Collection<>;false;InsertItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.ObjectModel;Collection<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;Collection<>;false;SetItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.ObjectModel;Collection<>;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.ObjectModel;Collection<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;InsertItem;(System.Int32,TItem);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;InsertItem;(System.Int32,TItem);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;KeyedCollection;(System.Collections.Generic.IEqualityComparer,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;SetItem;(System.Int32,TItem);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;SetItem;(System.Int32,TItem);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;TryGetValue;(TKey,TItem);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;get_Comparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.ObjectModel;KeyedCollection<,>;false;get_Dictionary;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;KeyedCollection<,>;false;get_Item;(TKey);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.ObjectModel;ObservableCollection<>;false;InsertItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;ObservableCollection<>;false;InsertItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.ObjectModel;ObservableCollection<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.ObjectModel;ObservableCollection<>;false;SetItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint | +| System.Collections.ObjectModel;ReadOnlyCollection<>;false;ReadOnlyCollection;(System.Collections.Generic.IList);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections.ObjectModel;ReadOnlyCollection<>;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.ObjectModel;ReadOnlyCollection<>;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.ObjectModel;ReadOnlyCollection<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.ObjectModel;ReadOnlyDictionary<,>+KeyCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.ObjectModel;ReadOnlyDictionary<,>+ValueCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;ReadOnlyDictionary;(System.Collections.Generic.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;ReadOnlyDictionary;(System.Collections.Generic.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_Dictionary;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_Item;(TKey);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_Keys;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element;value | +| System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.ObjectModel;ReadOnlyDictionary<,>;false;get_Values;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | +| System.Collections.Specialized;HybridDictionary;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;HybridDictionary;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Specialized;IOrderedDictionary;true;get_Item;(System.Int32);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.Collections.Specialized;IOrderedDictionary;true;set_Item;(System.Int32,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections.Specialized;IOrderedDictionary;true;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections.Specialized;ListDictionary;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;ListDictionary;false;ListDictionary;(System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;ListDictionary;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Specialized;NameObjectCollectionBase+KeysCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseAdd;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseAdd;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseGet;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseGet;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseGetAllKeys;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseGetAllValues;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseGetAllValues;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseGetKey;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseSet;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;BaseSet;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Collections.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Int32,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;NameObjectCollectionBase;(System.Int32,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[2];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameObjectCollectionBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections.Specialized;NameObjectCollectionBase;true;get_Keys;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Specialized;NameValueCollection;false;Add;(System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier].Element;value | +| System.Collections.Specialized;NameValueCollection;false;Add;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections.Specialized;NameValueCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Collections.Specialized;NameValueCollection;false;Get;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameValueCollection;false;Get;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameValueCollection;false;GetKey;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameValueCollection;false;NameValueCollection;(System.Collections.Specialized.NameValueCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameValueCollection;false;NameValueCollection;(System.Int32,System.Collections.Specialized.NameValueCollection);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameValueCollection;false;Set;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NameValueCollection;false;get_AllKeys;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameValueCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameValueCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NameValueCollection;false;set_Item;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Collections.IList,System.Collections.IList,System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Collections.IList,System.Collections.IList,System.Int32);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Collections.IList,System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Collections.IList,System.Int32,System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Int32);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Int32,System.Int32);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Object,System.Int32);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Object,System.Int32);;Argument[2];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;get_NewItems;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;get_OldItems;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Specialized;OrderedDictionary;false;AsReadOnly;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections.Specialized;OrderedDictionary;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections.Specialized;OrderedDictionary;false;OrderedDictionary;(System.Int32,System.Collections.IEqualityComparer);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;OrderedDictionary;false;OrderedDictionary;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections.Specialized;OrderedDictionary;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections.Specialized;StringCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier].Element;value | | System.Collections.Specialized;StringCollection;false;AddRange;(System.String[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Collections.Specialized;StringCollection;false;CopyTo;(System.String[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections.Specialized;StringCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Specialized.StringEnumerator.Current];value | | System.Collections.Specialized;StringCollection;false;Insert;(System.Int32,System.String);;Argument[1];Argument[Qualifier].Element;value | | System.Collections.Specialized;StringCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections.Specialized;StringCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections.Specialized;StringCollection;false;set_Item;(System.Int32,System.String);;Argument[1];Argument[Qualifier].Element;value | +| System.Collections.Specialized;StringDictionary;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Collections.Specialized;StringDictionary;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;StringDictionary;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections.Specialized;StringEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;ArrayList;false;Adapter;(System.Collections.IList);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections;ArrayList;false;AddRange;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier].Element;value | +| System.Collections;ArrayList;false;ArrayList;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Collections;ArrayList;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections;ArrayList;false;CopyTo;(System.Array);;Argument[Qualifier];Argument[0].Element;generated:taint | | System.Collections;ArrayList;false;FixedSize;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue.Element;value | | System.Collections;ArrayList;false;FixedSize;(System.Collections.IList);;Argument[0].Element;ReturnValue.Element;value | | System.Collections;ArrayList;false;GetEnumerator;(System.Int32,System.Int32);;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Collections;ArrayList;false;GetRange;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | | System.Collections;ArrayList;false;InsertRange;(System.Int32,System.Collections.ICollection);;Argument[1].Element;Argument[Qualifier].Element;value | +| System.Collections;ArrayList;false;ReadOnly;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections;ArrayList;false;ReadOnly;(System.Collections.IList);;Argument[0].Element;ReturnValue;generated:taint | | System.Collections;ArrayList;false;Repeat;(System.Object,System.Int32);;Argument[0];ReturnValue.Element;value | | System.Collections;ArrayList;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections;ArrayList;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System.Collections;ArrayList;false;SetRange;(System.Int32,System.Collections.ICollection);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Collections;ArrayList;false;Synchronized;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections;ArrayList;false;Synchronized;(System.Collections.IList);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections;ArrayList;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;BitArray;false;And;(System.Collections.BitArray);;Argument[Qualifier];ReturnValue;generated:value | | System.Collections;BitArray;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections;BitArray;false;LeftShift;(System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;BitArray;false;Not;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;BitArray;false;Or;(System.Collections.BitArray);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;BitArray;false;RightShift;(System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;BitArray;false;Xor;(System.Collections.BitArray);;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;BitArray;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;CollectionBase;false;Remove;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections;CollectionBase;false;Remove;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections;CollectionBase;false;get_InnerList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;CollectionBase;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;CollectionBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;Comparer;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Collections;DictionaryBase;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;DictionaryBase;false;get_Dictionary;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;DictionaryBase;false;get_InnerHashtable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;DictionaryBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;DictionaryBase;true;OnGet;(System.Object,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.Collections;DictionaryEntry;false;Deconstruct;(System.Object,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;DictionaryEntry;false;DictionaryEntry;(System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections;DictionaryEntry;false;DictionaryEntry;(System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections;DictionaryEntry;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;DictionaryEntry;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;DictionaryEntry;false;set_Key;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections;DictionaryEntry;false;set_Value;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections;Hashtable;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections;Hashtable;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;Hashtable;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary,System.Collections.IEqualityComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | @@ -365,6 +956,16 @@ | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary,System.Single,System.Collections.IEqualityComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections;Hashtable;false;Hashtable;(System.Int32,System.Single,System.Collections.IEqualityComparer);;Argument[2];Argument[Qualifier];generated:taint | +| System.Collections;Hashtable;false;Hashtable;(System.Int32,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[2];Argument[Qualifier];generated:taint | +| System.Collections;Hashtable;false;Hashtable;(System.Int32,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer);;Argument[3];Argument[Qualifier];generated:taint | +| System.Collections;Hashtable;false;Synchronized;(System.Collections.Hashtable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections;Hashtable;false;get_EqualityComparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;Hashtable;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;Hashtable;false;get_comparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;Hashtable;false;get_hcp;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;Hashtable;false;set_comparer;(System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections;Hashtable;false;set_hcp;(System.Collections.IHashCodeProvider);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections;ICollection;true;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Collections;IDictionary;true;Add;(System.Object,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;IDictionary;true;Add;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | @@ -379,38 +980,250 @@ | System.Collections;IList;true;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Collections;IList;true;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Collections;Queue;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | +| System.Collections;Queue;false;Dequeue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;Queue;false;Enqueue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections;Queue;false;Peek;();;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections;Queue;false;Queue;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections;Queue;false;Synchronized;(System.Collections.Queue);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections;Queue;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Collections;ReadOnlyCollectionBase;false;get_InnerList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;ReadOnlyCollectionBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections;SortedList;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections;SortedList;false;GetByIndex;(System.Int32);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | +| System.Collections;SortedList;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;SortedList;false;GetKey;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;SortedList;false;GetKeyList;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Collections;SortedList;false;GetValueList;();;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element;value | +| System.Collections;SortedList;false;SetByIndex;(System.Int32,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Collections;SortedList;false;SortedList;(System.Collections.IComparer);;Argument[0];Argument[Qualifier];generated:taint | | System.Collections;SortedList;false;SortedList;(System.Collections.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;SortedList;false;SortedList;(System.Collections.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Collections;SortedList;false;SortedList;(System.Collections.IDictionary,System.Collections.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Collections;SortedList;false;SortedList;(System.Collections.IDictionary,System.Collections.IComparer);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Collections;SortedList;false;Synchronized;(System.Collections.SortedList);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections;SortedList;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Collections;Stack;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | | System.Collections;Stack;false;Peek;();;Argument[Qualifier].Element;ReturnValue;value | | System.Collections;Stack;false;Pop;();;Argument[Qualifier].Element;ReturnValue;value | +| System.Collections;Stack;false;Push;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Collections;Stack;false;Stack;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Collections;Stack;false;Synchronized;(System.Collections.Stack);;Argument[0].Element;ReturnValue;generated:taint | +| System.Collections;Stack;false;ToArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Collections;Stack;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.ComponentModel.DataAnnotations.Schema;ColumnAttribute;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations.Schema;ColumnAttribute;false;set_TypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations.Schema;TableAttribute;false;get_Schema;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations.Schema;TableAttribute;false;set_Schema;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;AssociatedMetadataTypeTypeDescriptionProvider;false;AssociatedMetadataTypeTypeDescriptionProvider;(System.Type,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;CustomValidationAttribute;false;FormatErrorMessage;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;GetAutoGenerateField;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;GetAutoGenerateFilter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;GetOrder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_GroupName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_Prompt;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_ResourceType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;get_ShortName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_Description;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_GroupName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_Prompt;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_ResourceType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayAttribute;false;set_ShortName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayFormatAttribute;false;get_NullDisplayText;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayFormatAttribute;false;get_NullDisplayTextResourceType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;DisplayFormatAttribute;false;set_NullDisplayText;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;DisplayFormatAttribute;false;set_NullDisplayTextResourceType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;FileExtensionsAttribute;false;FormatErrorMessage;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;FileExtensionsAttribute;false;get_Extensions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;FileExtensionsAttribute;false;set_Extensions;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;FilterUIHintAttribute;false;get_ControlParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;MetadataTypeAttribute;false;MetadataTypeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;MetadataTypeAttribute;false;get_MetadataClassType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;UIHintAttribute;false;get_ControlParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;false;get_ErrorMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;false;get_ErrorMessageResourceName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;false;get_ErrorMessageResourceType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;false;set_ErrorMessage;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;false;set_ErrorMessageResourceName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;false;set_ErrorMessageResourceType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;ValidationAttribute;true;FormatErrorMessage;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationContext;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationContext;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.DataAnnotations;ValidationContext;false;set_DisplayName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;ValidationException;false;ValidationException;(System.ComponentModel.DataAnnotations.ValidationResult,System.ComponentModel.DataAnnotations.ValidationAttribute,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.DataAnnotations;ValidationException;false;get_ValidationResult;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design.Serialization;ContextStack;false;Append;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.Design.Serialization;ContextStack;false;Pop;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design.Serialization;ContextStack;false;Push;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel.Design.Serialization;ContextStack;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design.Serialization;ContextStack;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design.Serialization;ContextStack;false;get_Item;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design.Serialization;DesignerSerializerAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design.Serialization;RootDesignerSerializerAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerCollection;false;DesignerCollection;(System.Collections.IList);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.ComponentModel.Design;DesignerCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.ComponentModel.Design;DesignerCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | | System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | +| System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerOptionService+DesignerOptionCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.ComponentModel.Design;DesignerOptionService;false;CreateOptionCollection;(System.ComponentModel.Design.DesignerOptionService+DesignerOptionCollection,System.String,System.Object);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerOptionService;false;CreateOptionCollection;(System.ComponentModel.Design.DesignerOptionService+DesignerOptionCollection,System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerOptionService;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerVerb;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerVerb;false;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerVerb;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;DesignerVerb;false;set_Description;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.ComponentModel.Design;DesignerVerbCollection;false;Add;(System.ComponentModel.Design.DesignerVerb);;Argument[0];Argument[Qualifier].Element;value | | System.ComponentModel.Design;DesignerVerbCollection;false;AddRange;(System.ComponentModel.Design.DesignerVerbCollection);;Argument[0].Element;Argument[Qualifier].Element;value | | System.ComponentModel.Design;DesignerVerbCollection;false;AddRange;(System.ComponentModel.Design.DesignerVerb[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.ComponentModel.Design;DesignerVerbCollection;false;CopyTo;(System.ComponentModel.Design.DesignerVerb[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.ComponentModel.Design;DesignerVerbCollection;false;DesignerVerbCollection;(System.ComponentModel.Design.DesignerVerb[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.ComponentModel.Design;DesignerVerbCollection;false;Insert;(System.Int32,System.ComponentModel.Design.DesignerVerb);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel.Design;DesignerVerbCollection;false;Remove;(System.ComponentModel.Design.DesignerVerb);;Argument[0];Argument[Qualifier];generated:taint | | System.ComponentModel.Design;DesignerVerbCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.ComponentModel.Design;DesignerVerbCollection;false;set_Item;(System.Int32,System.ComponentModel.Design.DesignerVerb);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel.Design;MenuCommand;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;ServiceContainer;false;GetService;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel.Design;ServiceContainer;false;ServiceContainer;(System.IServiceProvider);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;ArrayConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;AsyncOperation;false;get_SynchronizationContext;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;AttributeCollection;false;AttributeCollection;(System.Attribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.ComponentModel;AttributeCollection;false;FromExisting;(System.ComponentModel.AttributeCollection,System.Attribute[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.ComponentModel;AttributeCollection;false;FromExisting;(System.ComponentModel.AttributeCollection,System.Attribute[]);;Argument[1].Element;ReturnValue;generated:taint | | System.ComponentModel;AttributeCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | +| System.ComponentModel;AttributeCollection;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;AttributeCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;AttributeCollection;false;get_Item;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;AttributeCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.ComponentModel;BaseNumberConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;BaseNumberConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;BindingList<>;false;InsertItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;BindingList<>;false;InsertItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint | +| System.ComponentModel;BindingList<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;BindingList<>;false;SetItem;(System.Int32,T);;Argument[Qualifier];Argument[1];generated:taint | +| System.ComponentModel;CategoryAttribute;false;CategoryAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;CategoryAttribute;false;get_Category;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;CharConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;CollectionConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;Component;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;Component;false;get_Events;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;Component;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;Component;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;ComponentCollection;false;ComponentCollection;(System.ComponentModel.IComponent[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.ComponentModel;ComponentCollection;false;CopyTo;(System.ComponentModel.IComponent[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.ComponentModel;ComponentCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ComponentCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ComponentResourceManager;false;ApplyResources;(System.Object,System.String);;Argument[Qualifier];Argument[0];generated:taint | +| System.ComponentModel;ComponentResourceManager;false;ApplyResources;(System.Object,System.String,System.Globalization.CultureInfo);;Argument[Qualifier];Argument[0];generated:taint | +| System.ComponentModel;Container;false;Add;(System.ComponentModel.IComponent,System.String);;Argument[1];Argument[0];generated:taint | +| System.ComponentModel;Container;false;CreateSite;(System.ComponentModel.IComponent,System.String);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;Container;false;GetService;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;Container;false;get_Components;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ContainerFilterService;true;FilterComponents;(System.ComponentModel.ComponentCollection);;Argument[0].Element;ReturnValue;generated:taint | +| System.ComponentModel;CultureInfoConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;CultureInfoConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;CultureInfoConverter;false;GetStandardValues;(System.ComponentModel.ITypeDescriptorContext);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;CustomTypeDescriptor;false;CustomTypeDescriptor;(System.ComponentModel.ICustomTypeDescriptor);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;CustomTypeDescriptor;true;GetAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;CustomTypeDescriptor;true;GetProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;CustomTypeDescriptor;true;GetProperties;(System.Attribute[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;CustomTypeDescriptor;true;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;DateTimeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;DateTimeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;DateTimeOffsetConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;DateTimeOffsetConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;DecimalConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;DefaultValueAttribute;false;DefaultValueAttribute;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;DefaultValueAttribute;false;DefaultValueAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;DefaultValueAttribute;false;DefaultValueAttribute;(System.Type,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;DefaultValueAttribute;false;SetValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;DefaultValueAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;DesignerAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;EditorAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;EnumConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | | System.ComponentModel;EventDescriptorCollection;false;Add;(System.ComponentModel.EventDescriptor);;Argument[0];Argument[Qualifier].Element;value | +| System.ComponentModel;EventDescriptorCollection;false;EventDescriptorCollection;(System.ComponentModel.EventDescriptor[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.ComponentModel;EventDescriptorCollection;false;Find;(System.String,System.Boolean);;Argument[Qualifier].Element;ReturnValue;value | | System.ComponentModel;EventDescriptorCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.ComponentModel;EventDescriptorCollection;false;Insert;(System.Int32,System.ComponentModel.EventDescriptor);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel;EventDescriptorCollection;false;Sort;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;EventDescriptorCollection;false;Sort;(System.Collections.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;EventDescriptorCollection;false;Sort;(System.Collections.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;EventDescriptorCollection;false;Sort;(System.String[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;EventDescriptorCollection;false;Sort;(System.String[],System.Collections.IComparer);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;EventDescriptorCollection;false;Sort;(System.String[],System.Collections.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | | System.ComponentModel;EventDescriptorCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.ComponentModel;EventDescriptorCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | +| System.ComponentModel;EventHandlerList;false;AddHandler;(System.Object,System.Delegate);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;EventHandlerList;false;AddHandler;(System.Object,System.Delegate);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;EventHandlerList;false;AddHandlers;(System.ComponentModel.EventHandlerList);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;EventHandlerList;false;get_Item;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;EventHandlerList;false;set_Item;(System.Object,System.Delegate);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;EventHandlerList;false;set_Item;(System.Object,System.Delegate);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;GuidConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | | System.ComponentModel;IBindingList;true;Find;(System.ComponentModel.PropertyDescriptor,System.Object);;Argument[Qualifier].Element;ReturnValue;value | +| System.ComponentModel;InstallerTypeAttribute;false;InstallerTypeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;InstallerTypeAttribute;false;InstallerTypeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;LicFileLicenseProvider;false;GetKey;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;LicFileLicenseProvider;false;GetLicense;(System.ComponentModel.LicenseContext,System.Type,System.Object,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;LicenseException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.ComponentModel;LicenseException;false;LicenseException;(System.Type,System.Object,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;LicenseException;false;LicenseException;(System.Type,System.Object,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;LicenseProviderAttribute;false;LicenseProviderAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;LicenseProviderAttribute;false;LicenseProviderAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;LicenseProviderAttribute;false;get_LicenseProvider;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;LicenseProviderAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ListSortDescriptionCollection;false;ListSortDescriptionCollection;(System.ComponentModel.ListSortDescription[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.ComponentModel;ListSortDescriptionCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.ComponentModel;ListSortDescriptionCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.ComponentModel;ListSortDescriptionCollection;false;set_Item;(System.Int32,System.ComponentModel.ListSortDescription);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel;MarshalByValueComponent;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MarshalByValueComponent;false;get_Events;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MarshalByValueComponent;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MarshalByValueComponent;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToDisplayString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean,System.Boolean,System.Boolean,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean,System.Boolean,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;(System.Boolean,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MaskedTextProvider;false;ToString;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;false;FindMethod;(System.Type,System.String,System.Type[],System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;false;FindMethod;(System.Type,System.String,System.Type[],System.Type,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;false;GetInvokee;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;false;GetSite;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.ComponentModel.MemberDescriptor);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.ComponentModel.MemberDescriptor,System.Attribute[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.ComponentModel.MemberDescriptor,System.Attribute[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.String,System.Attribute[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;MemberDescriptor;false;MemberDescriptor;(System.String,System.Attribute[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.ComponentModel;MemberDescriptor;true;CreateAttributeCollection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;FillAttributes;(System.Collections.IList);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.ComponentModel;MemberDescriptor;true;GetInvocationTarget;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;get_AttributeArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;get_Category;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;MemberDescriptor;true;set_AttributeArray;(System.Attribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.ComponentModel;MultilineStringConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;NestedContainer;false;CreateSite;(System.ComponentModel.IComponent,System.String);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;NestedContainer;false;GetService;(System.Type);;Argument[Qualifier];ReturnValue;generated:value | +| System.ComponentModel;NullableConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;NullableConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;NullableConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;NullableConverter;false;GetProperties;(System.ComponentModel.ITypeDescriptorContext,System.Object,System.Attribute[]);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;ProgressChangedEventArgs;false;ProgressChangedEventArgs;(System.Int32,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.ComponentModel;ProgressChangedEventArgs;false;get_UserState;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptor;false;GetValueChangedHandler;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptor;true;GetEditor;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;PropertyDescriptor;true;GetEditor;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptor;true;get_Converter;();;Argument[Qualifier];ReturnValue;generated:taint | | System.ComponentModel;PropertyDescriptorCollection;false;Add;(System.ComponentModel.PropertyDescriptor);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.ComponentModel;PropertyDescriptorCollection;false;Add;(System.ComponentModel.PropertyDescriptor);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.ComponentModel;PropertyDescriptorCollection;false;Add;(System.ComponentModel.PropertyDescriptor);;Argument[0];Argument[Qualifier].Element;value | @@ -423,6 +1236,12 @@ | System.ComponentModel;PropertyDescriptorCollection;false;PropertyDescriptorCollection;(System.ComponentModel.PropertyDescriptor[]);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.ComponentModel;PropertyDescriptorCollection;false;PropertyDescriptorCollection;(System.ComponentModel.PropertyDescriptor[],System.Boolean);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.ComponentModel;PropertyDescriptorCollection;false;PropertyDescriptorCollection;(System.ComponentModel.PropertyDescriptor[],System.Boolean);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.ComponentModel;PropertyDescriptorCollection;false;Sort;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.Collections.IComparer);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.Collections.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.String[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.String[],System.Collections.IComparer);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;PropertyDescriptorCollection;false;Sort;(System.String[],System.Collections.IComparer);;Argument[Qualifier];ReturnValue;generated:taint | | System.ComponentModel;PropertyDescriptorCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | | System.ComponentModel;PropertyDescriptorCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.ComponentModel;PropertyDescriptorCollection;false;get_Item;(System.Object);;Argument[Qualifier].Element;ReturnValue;value | @@ -431,27 +1250,225 @@ | System.ComponentModel;PropertyDescriptorCollection;false;set_Item;(System.Int32,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.ComponentModel;PropertyDescriptorCollection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.ComponentModel;PropertyDescriptorCollection;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.ComponentModel;PropertyTabAttribute;false;PropertyTabAttribute;(System.String,System.ComponentModel.PropertyTabScope);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;PropertyTabAttribute;false;PropertyTabAttribute;(System.Type,System.ComponentModel.PropertyTabScope);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;PropertyTabAttribute;false;get_TabClasses;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ReferenceConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;ReferenceConverter;false;ReferenceConverter;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;RunWorkerCompletedEventArgs;false;RunWorkerCompletedEventArgs;(System.Object,System.Exception,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;RunWorkerCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;StringConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TimeSpanConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;ToolboxItemAttribute;false;ToolboxItemAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;ToolboxItemAttribute;false;ToolboxItemAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;ToolboxItemAttribute;false;get_ToolboxItemType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ToolboxItemAttribute;false;get_ToolboxItemTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;ToolboxItemFilterAttribute;false;get_TypeId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter+StandardValuesCollection;false;StandardValuesCollection;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.ComponentModel;TypeConverter+StandardValuesCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFrom;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFrom;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromInvariantString;(System.ComponentModel.ITypeDescriptorContext,System.String);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromInvariantString;(System.ComponentModel.ITypeDescriptorContext,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromInvariantString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromInvariantString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromString;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.String);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromString;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromString;(System.ComponentModel.ITypeDescriptorContext,System.String);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromString;(System.ComponentModel.ITypeDescriptorContext,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertFromString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertTo;(System.Object,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertToInvariantString;(System.ComponentModel.ITypeDescriptorContext,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertToInvariantString;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertToString;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertToString;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertToString;(System.ComponentModel.ITypeDescriptorContext,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;ConvertToString;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;GetProperties;(System.ComponentModel.ITypeDescriptorContext,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;GetProperties;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;GetStandardValues;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeConverter;false;SortProperties;(System.ComponentModel.PropertyDescriptorCollection,System.String[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;false;GetReflectionType;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;false;GetTypeDescriptor;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;false;GetTypeDescriptor;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;false;GetTypeDescriptor;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;false;GetTypeDescriptor;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;false;TypeDescriptionProvider;(System.ComponentModel.TypeDescriptionProvider);;Argument[0];Argument[Qualifier];generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetExtendedTypeDescriptor;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetExtendedTypeDescriptor;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetFullComponentName;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetReflectionType;(System.Type,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetRuntimeType;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetTypeDescriptor;(System.Type,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetTypeDescriptor;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptionProvider;true;GetTypeDescriptor;(System.Type,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;AddAttributes;(System.Object,System.Attribute[]);;Argument[1].Element;ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;AddAttributes;(System.Type,System.Attribute[]);;Argument[1].Element;ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateEvent;(System.Type,System.ComponentModel.EventDescriptor,System.Attribute[]);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateEvent;(System.Type,System.ComponentModel.EventDescriptor,System.Attribute[]);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateEvent;(System.Type,System.String,System.Type,System.Attribute[]);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateEvent;(System.Type,System.String,System.Type,System.Attribute[]);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateProperty;(System.Type,System.ComponentModel.PropertyDescriptor,System.Attribute[]);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateProperty;(System.Type,System.ComponentModel.PropertyDescriptor,System.Attribute[]);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateProperty;(System.Type,System.String,System.Type,System.Attribute[]);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;CreateProperty;(System.Type,System.String,System.Type,System.Attribute[]);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;GetAssociation;(System.Type,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;GetFullComponentName;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;GetProvider;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeDescriptor;false;GetReflectionType;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.ComponentModel;TypeListConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeListConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;TypeListConverter;false;GetStandardValues;(System.ComponentModel.ITypeDescriptorContext);;Argument[Qualifier];ReturnValue;generated:taint | +| System.ComponentModel;TypeListConverter;false;TypeListConverter;(System.Type[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.ComponentModel;VersionConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.ComponentModel;WarningException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.ComponentModel;Win32Exception;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.ComponentModel;Win32Exception;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataAdapter;false;get_TableMappings;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;DataColumnMapping;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DataColumnMapping;false;DataColumnMapping;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data.Common;DataColumnMapping;false;GetDataColumnBySchemaAction;(System.Data.DataTable,System.Type,System.Data.MissingSchemaAction);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;GetDataColumnBySchemaAction;(System.String,System.String,System.Data.DataTable,System.Type,System.Data.MissingSchemaAction);;Argument[2];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;get_DataSetColumn;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;get_SourceColumn;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMapping;false;set_DataSetColumn;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DataColumnMapping;false;set_SourceColumn;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DataColumnMappingCollection;false;Add;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMappingCollection;false;Add;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMappingCollection;false;Add;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data.Common;DataColumnMappingCollection;false;AddRange;(System.Array);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data.Common;DataColumnMappingCollection;false;AddRange;(System.Data.Common.DataColumnMapping[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data.Common;DataColumnMappingCollection;false;CopyTo;(System.Data.Common.DataColumnMapping[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data.Common;DataColumnMappingCollection;false;GetByDataSetColumn;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMappingCollection;false;GetColumnMappingBySchemaAction;(System.Data.Common.DataColumnMappingCollection,System.String,System.Data.MissingMappingAction);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data.Common;DataColumnMappingCollection;false;GetColumnMappingBySchemaAction;(System.Data.Common.DataColumnMappingCollection,System.String,System.Data.MissingMappingAction);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DataColumnMappingCollection;false;GetDataColumn;(System.Data.Common.DataColumnMappingCollection,System.String,System.Type,System.Data.DataTable,System.Data.MissingMappingAction,System.Data.MissingSchemaAction);;Argument[3];ReturnValue;generated:taint | | System.Data.Common;DataColumnMappingCollection;false;Insert;(System.Int32,System.Data.Common.DataColumnMapping);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataColumnMappingCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Data.Common;DataColumnMappingCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | +| System.Data.Common;DataColumnMappingCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Data.Common;DataColumnMappingCollection;false;set_Item;(System.Int32,System.Data.Common.DataColumnMapping);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataColumnMappingCollection;false;set_Item;(System.String,System.Data.Common.DataColumnMapping);;Argument[1];Argument[Qualifier].Element;value | +| System.Data.Common;DataTableMapping;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String,System.Data.Common.DataColumnMapping[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String,System.Data.Common.DataColumnMapping[]);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMapping;false;DataTableMapping;(System.String,System.String,System.Data.Common.DataColumnMapping[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMapping;false;GetColumnMappingBySchemaAction;(System.String,System.Data.MissingMappingAction);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;GetColumnMappingBySchemaAction;(System.String,System.Data.MissingMappingAction);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;GetDataColumn;(System.String,System.Type,System.Data.DataTable,System.Data.MissingMappingAction,System.Data.MissingSchemaAction);;Argument[2];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;GetDataTableBySchemaAction;(System.Data.DataSet,System.Data.MissingSchemaAction);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;GetDataTableBySchemaAction;(System.Data.DataSet,System.Data.MissingSchemaAction);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;get_ColumnMappings;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;get_DataSetTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;get_SourceTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMapping;false;set_DataSetTable;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMapping;false;set_SourceTable;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DataTableMappingCollection;false;Add;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DataTableMappingCollection;false;Add;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DataTableMappingCollection;false;Add;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data.Common;DataTableMappingCollection;false;AddRange;(System.Array);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data.Common;DataTableMappingCollection;false;AddRange;(System.Data.Common.DataTableMapping[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data.Common;DataTableMappingCollection;false;CopyTo;(System.Data.Common.DataTableMapping[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data.Common;DataTableMappingCollection;false;GetByDataSetTable;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DataTableMappingCollection;false;GetTableMappingBySchemaAction;(System.Data.Common.DataTableMappingCollection,System.String,System.String,System.Data.MissingMappingAction);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data.Common;DataTableMappingCollection;false;GetTableMappingBySchemaAction;(System.Data.Common.DataTableMappingCollection,System.String,System.String,System.Data.MissingMappingAction);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DataTableMappingCollection;false;GetTableMappingBySchemaAction;(System.Data.Common.DataTableMappingCollection,System.String,System.String,System.Data.MissingMappingAction);;Argument[2];ReturnValue;generated:taint | | System.Data.Common;DataTableMappingCollection;false;Insert;(System.Int32,System.Data.Common.DataTableMapping);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataTableMappingCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Data.Common;DataTableMappingCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | +| System.Data.Common;DataTableMappingCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Data.Common;DataTableMappingCollection;false;set_Item;(System.Int32,System.Data.Common.DataTableMapping);;Argument[1];Argument[Qualifier].Element;value | | System.Data.Common;DataTableMappingCollection;false;set_Item;(System.String,System.Data.Common.DataTableMapping);;Argument[1];Argument[Qualifier].Element;value | +| System.Data.Common;DbCommand;false;ExecuteReader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;ExecuteReader;(System.Data.CommandBehavior);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;ExecuteReaderAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;ExecuteReaderAsync;(System.Data.CommandBehavior);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;ExecuteReaderAsync;(System.Data.CommandBehavior,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;ExecuteReaderAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;get_Connection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;get_Parameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;get_Transaction;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;false;set_Connection;(System.Data.Common.DbConnection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommand;false;set_Connection;(System.Data.IDbConnection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommand;false;set_Transaction;(System.Data.Common.DbTransaction);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommand;false;set_Transaction;(System.Data.IDbTransaction);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommand;true;ExecuteDbDataReaderAsync;(System.Data.CommandBehavior,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommand;true;PrepareAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;GetDeleteCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;GetDeleteCommand;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;GetInsertCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;GetInsertCommand;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;GetUpdateCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;GetUpdateCommand;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;RowUpdatingHandler;(System.Data.Common.RowUpdatingEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data.Common;DbCommandBuilder;false;get_DataAdapter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;false;set_DataAdapter;(System.Data.Common.DbDataAdapter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommandBuilder;true;InitializeCommand;(System.Data.Common.DbCommand);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;true;get_CatalogSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;true;get_QuotePrefix;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;true;get_QuoteSuffix;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;true;get_SchemaSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbCommandBuilder;true;set_CatalogSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommandBuilder;true;set_QuotePrefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommandBuilder;true;set_QuoteSuffix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbCommandBuilder;true;set_SchemaSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbConnection;false;CreateCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbConnection;true;ChangeDatabaseAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DbConnection;true;OpenAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | | System.Data.Common;DbConnectionStringBuilder;false;Add;(System.String,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Data.Common;DbConnectionStringBuilder;false;Add;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Data.Common;DbConnectionStringBuilder;false;AppendKeyValuePair;(System.Text.StringBuilder,System.String,System.String);;Argument[1];Argument[0];generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;AppendKeyValuePair;(System.Text.StringBuilder,System.String,System.String);;Argument[2];Argument[0];generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;AppendKeyValuePair;(System.Text.StringBuilder,System.String,System.String,System.Boolean);;Argument[1];Argument[0];generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;AppendKeyValuePair;(System.Text.StringBuilder,System.String,System.String,System.Boolean);;Argument[2];Argument[0];generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;GetProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;GetProperties;(System.Attribute[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);;Argument[Qualifier];ReturnValue;generated:value | +| System.Data.Common;DbConnectionStringBuilder;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbConnectionStringBuilder;false;get_ConnectionString;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data.Common;DbConnectionStringBuilder;false;get_Item;(System.String);;Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value | +| System.Data.Common;DbConnectionStringBuilder;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data.Common;DbConnectionStringBuilder;false;set_Item;(System.String,System.Object);;Argument[0];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Data.Common;DbConnectionStringBuilder;false;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Data.Common;DbDataAdapter;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;false;DbDataAdapter;(System.Data.Common.DbDataAdapter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;get_DeleteCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;false;get_InsertCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;false;get_SelectCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;false;get_UpdateCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;false;set_DeleteCommand;(System.Data.Common.DbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_DeleteCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_InsertCommand;(System.Data.Common.DbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_InsertCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_SelectCommand;(System.Data.Common.DbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_SelectCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_UpdateCommand;(System.Data.Common.DbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;false;set_UpdateCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbDataAdapter;true;CreateRowUpdatedEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;true;CreateRowUpdatedEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;true;CreateRowUpdatedEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[3];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;true;CreateRowUpdatingEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;true;CreateRowUpdatingEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DbDataAdapter;true;CreateRowUpdatingEvent;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[3];ReturnValue;generated:taint | +| System.Data.Common;DbDataReader;false;GetFieldValueAsync<>;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataReader;true;GetFieldValue<>;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataReader;true;GetFieldValueAsync<>;(System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataReader;true;GetProviderSpecificValue;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataReader;true;GetProviderSpecificValues;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Data.Common;DbDataReader;true;GetSchemaTableAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataReader;true;GetTextReader;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbDataRecord;false;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);;Argument[Qualifier];ReturnValue;generated:value | +| System.Data.Common;DbEnumerator;false;DbEnumerator;(System.Data.IDataReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbEnumerator;false;DbEnumerator;(System.Data.IDataReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;DbEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data.Common;DbParameterCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Data.Common;DbParameterCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | | System.Data.Common;DbParameterCollection;false;set_Item;(System.Int32,System.Data.Common.DbParameter);;Argument[1];Argument[Qualifier].Element;value | @@ -459,29 +1476,352 @@ | System.Data.Common;DbParameterCollection;true;Add;(System.Object);;Argument[0];Argument[Qualifier].Element;value | | System.Data.Common;DbParameterCollection;true;AddRange;(System.Array);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data.Common;DbParameterCollection;true;Insert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Data.Common;DbTransaction;false;get_Connection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;DbTransaction;true;CommitAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DbTransaction;true;ReleaseAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DbTransaction;true;RollbackAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;DbTransaction;true;RollbackAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Data.Common;DbTransaction;true;SaveAsync;(System.String,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;CopyToRows;(System.Data.DataRow[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;CopyToRows;(System.Data.DataRow[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;RowUpdatedEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;RowUpdatedEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;RowUpdatedEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[3];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;get_Command;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;get_Row;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;get_TableMapping;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatedEventArgs;false;set_Errors;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;RowUpdatingEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;RowUpdatingEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;RowUpdatingEventArgs;(System.Data.DataRow,System.Data.IDbCommand,System.Data.StatementType,System.Data.Common.DataTableMapping);;Argument[3];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;get_BaseCommand;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;get_Command;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;get_Row;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;get_TableMapping;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;set_BaseCommand;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;set_Command;(System.Data.IDbCommand);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.Common;RowUpdatingEventArgs;false;set_Errors;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBinary;false;Add;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBinary;false;Add;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[1];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBinary;false;Concat;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBinary;false;Concat;(System.Data.SqlTypes.SqlBinary,System.Data.SqlTypes.SqlBinary);;Argument[1];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBinary;false;ReadXml;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBinary;false;SqlBinary;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBinary;false;ToSqlGuid;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBinary;false;WriteXml;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data.SqlTypes;SqlBinary;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBytes;false;Read;(System.Int64,System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[1].Element;generated:taint | +| System.Data.SqlTypes;SqlBytes;false;ReadXml;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBytes;false;SqlBytes;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBytes;false;SqlBytes;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBytes;false;Write;(System.Int64,System.Byte[],System.Int32,System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlBytes;false;WriteXml;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data.SqlTypes;SqlBytes;false;get_Buffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBytes;false;get_Stream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlBytes;false;set_Stream;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlChars;false;SqlChars;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlChars;false;WriteXml;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data.SqlTypes;SqlChars;false;get_Buffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;Abs;(System.Data.SqlTypes.SqlDecimal);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;AdjustScale;(System.Data.SqlTypes.SqlDecimal,System.Int32,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;Ceiling;(System.Data.SqlTypes.SqlDecimal);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;ConvertToPrecScale;(System.Data.SqlTypes.SqlDecimal,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;Floor;(System.Data.SqlTypes.SqlDecimal);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;Round;(System.Data.SqlTypes.SqlDecimal,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlDecimal;false;Truncate;(System.Data.SqlTypes.SqlDecimal,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlGuid;false;SqlGuid;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlGuid;false;ToByteArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlGuid;false;ToSqlBinary;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;Add;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;Add;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[1];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;Concat;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[0];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;Concat;(System.Data.SqlTypes.SqlString,System.Data.SqlTypes.SqlString);;Argument[1];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;GetNonUnicodeBytes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;GetUnicodeBytes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;ReadXml;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlString;false;SqlString;(System.Int32,System.Data.SqlTypes.SqlCompareOptions,System.Byte[],System.Int32,System.Int32,System.Boolean);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlString;false;SqlString;(System.String,System.Int32,System.Data.SqlTypes.SqlCompareOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data.SqlTypes;SqlString;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;WriteXml;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data.SqlTypes;SqlString;false;get_CompareInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlString;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data.SqlTypes;SqlXml;false;SqlXml;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;Constraint;false;SetDataSet;(System.Data.DataSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;Constraint;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;Constraint;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;Constraint;true;get_ConstraintName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;Constraint;true;get__DataSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;Constraint;true;set_ConstraintName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Data;ConstraintCollection;false;Add;(System.Data.Constraint);;Argument[0];Argument[Qualifier].Element;value | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn);;Argument[0];ReturnValue;generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Boolean);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ConstraintCollection;false;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[0];ReturnValue;generated:taint | | System.Data;ConstraintCollection;false;AddRange;(System.Data.Constraint[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data;ConstraintCollection;false;CopyTo;(System.Data.Constraint[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data;ConstraintCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;ConstraintCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;ConstraintCollection;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DBConcurrencyException;false;CopyToRows;(System.Data.DataRow[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Data;DBConcurrencyException;false;CopyToRows;(System.Data.DataRow[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Data;DBConcurrencyException;false;DBConcurrencyException;(System.String,System.Exception,System.Data.DataRow[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Data;DBConcurrencyException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data;DBConcurrencyException;false;get_Row;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DBConcurrencyException;false;set_Row;(System.Data.DataRow);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;DataColumn;(System.String,System.Type,System.String,System.Data.MappingType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;DataColumn;(System.String,System.Type,System.String,System.Data.MappingType);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;DataColumn;(System.String,System.Type,System.String,System.Data.MappingType);;Argument[2];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_Caption;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_ColumnName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_DefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_Expression;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_Prefix;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;get_Table;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumn;false;set_Caption;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;set_ColumnName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;set_DataType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;set_DefaultValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;set_Expression;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumn;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataColumnChangeEventArgs;false;DataColumnChangeEventArgs;(System.Data.DataRow,System.Data.DataColumn,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataColumnChangeEventArgs;false;get_Column;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumnCollection;false;Add;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataColumnCollection;false;Add;(System.Data.DataColumn);;Argument[0];Argument[Qualifier].Element;value | | System.Data;DataColumnCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier].Element;value | +| System.Data;DataColumnCollection;false;Add;(System.String,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumnCollection;false;Add;(System.String,System.Type,System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataColumnCollection;false;AddRange;(System.Data.DataColumn[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data;DataColumnCollection;false;CopyTo;(System.Data.DataColumn[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data;DataColumnCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumnCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataColumnCollection;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetDateTime;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetFieldValue<>;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetFieldValueAsync<>;(System.Data.Common.DbDataReader,System.String,System.Threading.CancellationToken);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetGuid;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetProviderSpecificValue;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetString;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetTextReader;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataReaderExtensions;false;GetValue;(System.Data.Common.DbDataReader,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.Data.DataColumn,System.Data.DataColumn,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.Data.DataColumn[],System.Data.DataColumn[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[2];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[3];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[4];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[5].Element;Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[6].Element;Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[2];Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;DataRelation;(System.String,System.String,System.String,System.String[],System.String[],System.Boolean);;Argument[4].Element;Argument[Qualifier];generated:taint | +| System.Data;DataRelation;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_ChildColumns;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_ChildKeyConstraint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_DataSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_ParentColumns;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_ParentKeyConstraint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;get_RelationName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelation;false;set_RelationName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Data;DataRelationCollection;false;Add;(System.Data.DataRelation);;Argument[0];Argument[Qualifier].Element;value | | System.Data;DataRelationCollection;false;CopyTo;(System.Data.DataRelation[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data;DataRelationCollection;false;Remove;(System.Data.DataRelation);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.Data.DataColumn,System.Data.DataColumn);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn,System.Data.DataColumn,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[],System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataRelationCollection;true;Add;(System.String,System.Data.DataColumn[],System.Data.DataColumn[],System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataRelationCollection;true;AddRange;(System.Data.DataRelation[]);;Argument[0].Element;Argument[Qualifier].Element;value | +| System.Data;DataRow;false;DataRow;(System.Data.DataRowBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRow;false;GetChildRows;(System.Data.DataRelation);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetChildRows;(System.Data.DataRelation,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetChildRows;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetChildRows;(System.String,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetParentRows;(System.Data.DataRelation);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetParentRows;(System.Data.DataRelation,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetParentRows;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;GetParentRows;(System.String,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;SetNull;(System.Data.DataColumn);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRow;false;SetParentRow;(System.Data.DataRow,System.Data.DataRelation);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataRow;false;get_Item;(System.Data.DataColumn);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_Item;(System.Data.DataColumn,System.Data.DataRowVersion);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_Item;(System.Int32,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_Item;(System.String,System.Data.DataRowVersion);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_ItemArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_RowError;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;get_Table;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRow;false;set_Item;(System.Data.DataColumn,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataRow;false;set_RowError;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Data;DataRowCollection;false;Add;(System.Data.DataRow);;Argument[0];Argument[Qualifier].Element;value | | System.Data;DataRowCollection;false;Add;(System.Object[]);;Argument[0];Argument[Qualifier].Element;value | | System.Data;DataRowCollection;false;CopyTo;(System.Data.DataRow[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Data;DataRowCollection;false;Find;(System.Object);;Argument[Qualifier].Element;ReturnValue;value | | System.Data;DataRowCollection;false;Find;(System.Object[]);;Argument[Qualifier].Element;ReturnValue;value | +| System.Data;DataRowCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowExtensions;false;SetField<>;(System.Data.DataRow,System.Data.DataColumn,T);;Argument[1];Argument[0];generated:taint | +| System.Data;DataRowView;false;CreateChildView;(System.Data.DataRelation);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataRowView;false;CreateChildView;(System.Data.DataRelation);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;CreateChildView;(System.Data.DataRelation,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataRowView;false;CreateChildView;(System.Data.DataRelation,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;CreateChildView;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;CreateChildView;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);;Argument[Qualifier];ReturnValue;generated:value | +| System.Data;DataRowView;false;get_DataView;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataRowView;false;get_Row;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;Copy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;CreateDataReader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;CreateDataReader;(System.Data.DataTable[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Data;DataSet;false;DataSet;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataSet;false;DataSet;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataSet;false;GetChanges;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;GetChanges;(System.Data.DataRowState);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;GetList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data;DataSet;false;get_DataSetName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_DefaultViewManager;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_Locale;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_Prefix;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_Relations;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;get_Tables;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataSet;false;set_DataSetName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataSet;false;set_Locale;(System.Globalization.CultureInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataSet;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataSet;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataSet;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;Copy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;CreateDataReader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;DataTable;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;DataTable;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;DataTable;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;GetChanges;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;GetChanges;(System.Data.DataRowState);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;GetErrors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;GetList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Data;DataTable;false;LoadDataRow;(System.Object[],System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;LoadDataRow;(System.Object[],System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;LoadDataRow;(System.Object[],System.Data.LoadOption);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;NewRow;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;NewRowArray;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;NewRowFromBuilder;(System.Data.DataRowBuilder);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataTable;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_ChildRelations;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Columns;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Constraints;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_DataSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_DefaultView;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_DisplayExpression;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_ExtendedProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Locale;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_ParentRelations;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Prefix;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Rows;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;get_TableName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTable;false;set_Locale;(System.Globalization.CultureInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;set_PrimaryKey;(System.Data.DataColumn[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTable;false;set_TableName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTableCollection;false;Add;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataTableCollection;false;Add;(System.Data.DataTable);;Argument[0];Argument[Qualifier].Element;value | | System.Data;DataTableCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier].Element;value | +| System.Data;DataTableCollection;false;Add;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;DataTableCollection;false;Add;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Data;DataTableCollection;false;Add;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataTableCollection;false;AddRange;(System.Data.DataTable[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data;DataTableCollection;false;CopyTo;(System.Data.DataTable[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data;DataTableCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableCollection;false;get_Item;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableCollection;false;get_List;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableExtensions;false;AsEnumerable;(System.Data.DataTable);;Argument[0];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;DataTableReader;(System.Data.DataTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataTableReader;false;DataTableReader;(System.Data.DataTable[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Data;DataTableReader;false;GetDateTime;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;GetGuid;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;GetSchemaTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;GetString;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;GetValue;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataTableReader;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;AddNew;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;ApplySort;(System.ComponentModel.PropertyDescriptor,System.ComponentModel.ListSortDirection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataView;false;DataView;(System.Data.DataTable,System.String,System.String,System.Data.DataViewRowState);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataView;false;DataView;(System.Data.DataTable,System.String,System.String,System.Data.DataViewRowState);;Argument[2];Argument[Qualifier];generated:taint | | System.Data;DataView;false;Find;(System.Object);;Argument[Qualifier].Element;ReturnValue;value | | System.Data;DataView;false;Find;(System.Object[]);;Argument[Qualifier].Element;ReturnValue;value | +| System.Data;DataView;false;FindRows;(System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;FindRows;(System.Object[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;GetItemProperties;(System.ComponentModel.PropertyDescriptor[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;GetListName;(System.ComponentModel.PropertyDescriptor[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;ToTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;ToTable;(System.Boolean,System.String[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;ToTable;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;ToTable;(System.String,System.Boolean,System.String[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;get_DataViewManager;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;get_Filter;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;DataView;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Data;DataView;false;get_RowFilter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;get_Sort;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Data;DataView;false;get_Table;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataView;false;set_Filter;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataView;false;set_RowFilter;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataView;false;set_Sort;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataView;false;set_Table;(System.Data.DataTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataViewManager;false;CreateDataView;(System.Data.DataTable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewManager;false;GetListName;(System.ComponentModel.PropertyDescriptor[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewManager;false;get_DataSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewManager;false;get_DataViewSettings;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewManager;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Data;DataViewManager;false;set_DataSet;(System.Data.DataSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataViewSetting;false;get_DataViewManager;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSetting;false;get_RowFilter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSetting;false;get_Sort;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSetting;false;get_Table;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSetting;false;set_RowFilter;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;DataViewSetting;false;set_Sort;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Data;DataViewSettingCollection;false;CopyTo;(System.Data.DataViewSetting[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Data;DataViewSettingCollection;false;get_Item;(System.Data.DataTable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSettingCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSettingCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;DataViewSettingCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Data;DataViewSettingCollection;false;set_Item;(System.Data.DataTable,System.Data.DataViewSetting);;Argument[0];Argument[1];generated:taint | +| System.Data;DataViewSettingCollection;false;set_Item;(System.Data.DataTable,System.Data.DataViewSetting);;Argument[Qualifier];Argument[1];generated:taint | +| System.Data;DataViewSettingCollection;false;set_Item;(System.Int32,System.Data.DataViewSetting);;Argument[Qualifier];Argument[1];generated:taint | | System.Data;EnumerableRowCollectionExtensions;false;Cast<>;(System.Data.EnumerableRowCollection);;Argument[0].Element;ReturnValue.Element;value | | System.Data;EnumerableRowCollectionExtensions;false;OrderBy<,>;(System.Data.EnumerableRowCollection,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Data;EnumerableRowCollectionExtensions;false;OrderBy<,>;(System.Data.EnumerableRowCollection,System.Func);;Argument[0].Element;ReturnValue.Element;value | @@ -503,13 +1843,34 @@ | System.Data;EnumerableRowCollectionExtensions;false;ThenByDescending<,>;(System.Data.OrderedEnumerableRowCollection,System.Func,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue.Element;value | | System.Data;EnumerableRowCollectionExtensions;false;Where<>;(System.Data.EnumerableRowCollection,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Data;EnumerableRowCollectionExtensions;false;Where<>;(System.Data.EnumerableRowCollection,System.Func);;Argument[0].Element;ReturnValue.Element;value | +| System.Data;FillErrorEventArgs;false;FillErrorEventArgs;(System.Data.DataTable,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;FillErrorEventArgs;false;FillErrorEventArgs;(System.Data.DataTable,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Data;FillErrorEventArgs;false;get_DataTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;FillErrorEventArgs;false;get_Errors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;FillErrorEventArgs;false;get_Values;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;FillErrorEventArgs;false;set_Errors;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.Data.DataColumn,System.Data.DataColumn);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.Data.DataColumn[],System.Data.DataColumn[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[2];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[4].Element;Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[1];Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;ForeignKeyConstraint;(System.String,System.String,System.String[],System.String[],System.Data.AcceptRejectRule,System.Data.Rule,System.Data.Rule);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Data;ForeignKeyConstraint;false;get_Columns;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Data;ForeignKeyConstraint;false;get_RelatedColumns;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;IColumnMappingCollection;true;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | | System.Data;IColumnMappingCollection;true;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Data;IDataParameterCollection;true;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | | System.Data;IDataParameterCollection;true;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element;value | | System.Data;ITableMappingCollection;true;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | | System.Data;ITableMappingCollection;true;set_Item;(System.String,System.Object);;Argument[1];Argument[Qualifier].Element;value | +| System.Data;InternalDataCollectionBase;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Data;PropertyCollection;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | +| System.Data;TypedTableBase<>;false;Cast<>;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Data;TypedTableBaseExtensions;false;AsEnumerable<>;(System.Data.TypedTableBase);;Argument[0].Element;ReturnValue.Element;value | | System.Data;TypedTableBaseExtensions;false;ElementAtOrDefault<>;(System.Data.TypedTableBase,System.Int32);;Argument[0].Element;ReturnValue;value | | System.Data;TypedTableBaseExtensions;false;OrderBy<,>;(System.Data.TypedTableBase,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | @@ -524,14 +1885,215 @@ | System.Data;TypedTableBaseExtensions;false;Select<,>;(System.Data.TypedTableBase,System.Func);;Argument[1].ReturnValue;ReturnValue.Element;value | | System.Data;TypedTableBaseExtensions;false;Where<>;(System.Data.TypedTableBase,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Data;TypedTableBaseExtensions;false;Where<>;(System.Data.TypedTableBase,System.Func);;Argument[0].Element;ReturnValue.Element;value | +| System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.Data.DataColumn);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.Data.DataColumn,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.Data.DataColumn[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.Data.DataColumn[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.String[],System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Data;UniqueConstraint;false;UniqueConstraint;(System.String,System.String[],System.Boolean);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Data;UniqueConstraint;false;get_Columns;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractClassAttribute;false;ContractClassAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractClassAttribute;false;get_TypeContainingContracts;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractClassForAttribute;false;ContractClassForAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractClassForAttribute;false;get_TypeContractsAreFor;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractFailedEventArgs;false;ContractFailedEventArgs;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractFailedEventArgs;false;ContractFailedEventArgs;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[2];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractFailedEventArgs;false;ContractFailedEventArgs;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[3];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractFailedEventArgs;false;get_Condition;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractFailedEventArgs;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractFailedEventArgs;false;get_OriginalException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;ContractOptionAttribute;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;get_Category;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;get_Setting;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractOptionAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Contracts;ContractPublicPropertyNameAttribute;false;ContractPublicPropertyNameAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Contracts;ContractPublicPropertyNameAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;DiagnosticCounter;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;DiagnosticCounter;false;get_DisplayUnits;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;DiagnosticCounter;false;set_DisplayName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Tracing;DiagnosticCounter;false;set_DisplayUnits;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics.Tracing;EventListener;false;DisableEvents;(System.Diagnostics.Tracing.EventSource);;Argument[Qualifier];Argument[0];generated:taint | +| System.Diagnostics.Tracing;EventListener;false;EnableEvents;(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventLevel);;Argument[Qualifier];Argument[0];generated:taint | +| System.Diagnostics.Tracing;EventListener;false;EnableEvents;(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventLevel,System.Diagnostics.Tracing.EventKeywords);;Argument[Qualifier];Argument[0];generated:taint | +| System.Diagnostics.Tracing;EventListener;false;EnableEvents;(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventLevel,System.Diagnostics.Tracing.EventKeywords,System.Collections.Generic.IDictionary);;Argument[Qualifier];Argument[0];generated:taint | +| System.Diagnostics.Tracing;EventSource;false;EventSource;(System.Diagnostics.Tracing.EventSourceSettings,System.String[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Diagnostics.Tracing;EventSource;false;GenerateManifest;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;GenerateManifest;(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;GetName;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;GetTrait;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;get_ConstructionException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;get_Guid;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventSource;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_ActivityId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_EventName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_PayloadNames;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics.Tracing;EventWrittenEventArgs;false;get_RelatedActivityId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;AddBaggage;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;AddEvent;(System.Diagnostics.ActivityEvent);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;AddTag;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;AddTag;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;SetEndTime;(System.DateTime);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;SetIdFormat;(System.Diagnostics.ActivityIdFormat);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;SetParentId;(System.Diagnostics.ActivityTraceId,System.Diagnostics.ActivitySpanId,System.Diagnostics.ActivityTraceFlags);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;Activity;false;SetParentId;(System.Diagnostics.ActivityTraceId,System.Diagnostics.ActivitySpanId,System.Diagnostics.ActivityTraceFlags);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics;Activity;false;SetParentId;(System.Diagnostics.ActivityTraceId,System.Diagnostics.ActivitySpanId,System.Diagnostics.ActivityTraceFlags);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;SetParentId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;Activity;false;SetParentId;(System.String);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;SetStartTime;(System.DateTime);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;SetTag;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;Start;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Diagnostics;Activity;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_Events;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_Links;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_ParentId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_ParentSpanId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_RootId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_SpanId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_TagObjects;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_TraceId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;get_TraceStateString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Activity;false;set_DisplayName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;Activity;false;set_TraceStateString;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ActivityCreationOptions<>;false;get_SamplingTags;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ActivitySource;false;StartActivity;(System.String,System.Diagnostics.ActivityKind,System.String,System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEnumerable,System.DateTimeOffset);;Argument[2];ReturnValue;generated:taint | +| System.Diagnostics;ActivitySpanId;false;ToHexString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ActivitySpanId;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ActivityTagsCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Diagnostics;ActivityTagsCollection;false;ActivityTagsCollection;(System.Collections.Generic.IEnumerable>);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Diagnostics;ActivityTagsCollection;false;ActivityTagsCollection;(System.Collections.Generic.IEnumerable>);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Diagnostics;ActivityTagsCollection;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Diagnostics;ActivityTagsCollection;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | | System.Diagnostics;ActivityTagsCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Diagnostics.ActivityTagsCollection+Enumerator.Current];value | +| System.Diagnostics;ActivityTagsCollection;false;TryGetValue;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ActivityTraceId;false;ToHexString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ActivityTraceId;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;CorrelationManager;false;get_LogicalOperationStack;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DataReceivedEventArgs;false;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DebuggerDisplayAttribute;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DebuggerDisplayAttribute;false;set_Target;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;DebuggerTypeProxyAttribute;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DebuggerTypeProxyAttribute;false;set_Target;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;DebuggerVisualizerAttribute;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DebuggerVisualizerAttribute;false;set_Target;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;DefaultTraceListener;false;get_LogFileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DefaultTraceListener;false;set_LogFileName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;DelimitedListTraceListener;false;get_Delimiter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DelimitedListTraceListener;false;set_Delimiter;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;DiagnosticListener;false;Subscribe;(System.IObserver>);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics;DiagnosticListener;false;Subscribe;(System.IObserver>);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;DiagnosticSource;false;StartActivity;(System.Diagnostics.Activity,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;GetVersionInfo;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_Comments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_CompanyName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_FileDescription;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_FileVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_InternalName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_Language;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_LegalCopyright;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_LegalTrademarks;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_OriginalFilename;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_PrivateBuild;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_ProductName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_ProductVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;FileVersionInfo;false;get_SpecialBuild;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;GetProcessById;(System.Int32,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;GetProcesses;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;Start;(System.Diagnostics.ProcessStartInfo);;Argument[0];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_ExitTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_MachineName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_MainModule;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_MaxWorkingSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_MinWorkingSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_Modules;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_ProcessorAffinity;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_SafeHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_StandardError;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_StandardInput;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_StandardOutput;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_StartInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_StartTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;get_Threads;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Process;false;set_ProcessorAffinity;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;Process;false;set_StartInfo;(System.Diagnostics.ProcessStartInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessModule;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessModule;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessModule;false;get_ModuleName;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Diagnostics;ProcessModuleCollection;false;CopyTo;(System.Diagnostics.ProcessModule[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Diagnostics;ProcessModuleCollection;false;ProcessModuleCollection;(System.Diagnostics.ProcessModule[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessModuleCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;ProcessStartInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;ProcessStartInfo;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;ProcessStartInfo;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_Environment;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_EnvironmentVariables;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_UserName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_Verb;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;get_WorkingDirectory;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;ProcessStartInfo;false;set_Arguments;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;set_FileName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;set_UserName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;set_Verb;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessStartInfo;false;set_WorkingDirectory;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessThread;false;get_StartAddress;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Diagnostics;ProcessThreadCollection;false;Add;(System.Diagnostics.ProcessThread);;Argument[0];Argument[Qualifier].Element;value | | System.Diagnostics;ProcessThreadCollection;false;CopyTo;(System.Diagnostics.ProcessThread[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Diagnostics;ProcessThreadCollection;false;Insert;(System.Int32,System.Diagnostics.ProcessThread);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessThreadCollection;false;ProcessThreadCollection;(System.Diagnostics.ProcessThread[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Diagnostics;ProcessThreadCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;SourceFilter;false;SourceFilter;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;SourceFilter;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;SourceFilter;false;set_Source;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;StackFrame;false;GetFileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;StackFrame;false;GetMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;StackFrame;false;StackFrame;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;StackFrame;false;StackFrame;(System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;StackFrame;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;StackTrace;false;GetFrame;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;StackTrace;false;StackTrace;(System.Diagnostics.StackFrame);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;StackTrace;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Switch;false;Switch;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;Switch;false;Switch;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics;Switch;false;Switch;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Diagnostics;Switch;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Switch;false;get_Description;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Switch;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Switch;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;Switch;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;SwitchAttribute;false;SwitchAttribute;(System.String,System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;SwitchAttribute;false;SwitchAttribute;(System.String,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.Diagnostics;SwitchAttribute;false;get_SwitchName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;SwitchAttribute;false;get_SwitchType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;SwitchAttribute;false;set_SwitchName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;SwitchAttribute;false;set_SwitchType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;SwitchLevelAttribute;false;SwitchLevelAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;SwitchLevelAttribute;false;get_SwitchLevelType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;SwitchLevelAttribute;false;set_SwitchLevelType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TextWriterTraceListener;false;TextWriterTraceListener;(System.IO.TextWriter,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TextWriterTraceListener;false;TextWriterTraceListener;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TextWriterTraceListener;false;TextWriterTraceListener;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TextWriterTraceListener;false;get_Writer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TextWriterTraceListener;false;set_Writer;(System.IO.TextWriter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TraceEventCache;false;get_Callstack;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceEventCache;false;get_DateTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceListener;false;TraceListener;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TraceListener;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceListener;false;get_Filter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceListener;false;set_Filter;(System.Diagnostics.TraceFilter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TraceListener;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceListener;true;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Diagnostics;TraceListenerCollection;false;Add;(System.Diagnostics.TraceListener);;Argument[0];Argument[Qualifier].Element;value | | System.Diagnostics;TraceListenerCollection;false;AddRange;(System.Diagnostics.TraceListenerCollection);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Diagnostics;TraceListenerCollection;false;AddRange;(System.Diagnostics.TraceListener[]);;Argument[0].Element;Argument[Qualifier].Element;value | @@ -539,19 +2101,364 @@ | System.Diagnostics;TraceListenerCollection;false;Insert;(System.Int32,System.Diagnostics.TraceListener);;Argument[1];Argument[Qualifier].Element;value | | System.Diagnostics;TraceListenerCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Diagnostics;TraceListenerCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | +| System.Diagnostics;TraceListenerCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | | System.Diagnostics;TraceListenerCollection;false;set_Item;(System.Int32,System.Diagnostics.TraceListener);;Argument[1];Argument[Qualifier].Element;value | +| System.Diagnostics;TraceSource;false;TraceSource;(System.String,System.Diagnostics.SourceLevels);;Argument[0];Argument[Qualifier];generated:taint | +| System.Diagnostics;TraceSource;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceSource;false;get_Listeners;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceSource;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceSource;false;get_Switch;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Diagnostics;TraceSource;false;set_Switch;(System.Diagnostics.SourceSwitch);;Argument[0];Argument[Qualifier];generated:taint | +| System.Drawing;Color;false;FromName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Drawing;Color;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Drawing;Color;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Drawing;ColorConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint | +| System.Drawing;ColorConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Drawing;ColorConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Drawing;ColorTranslator;false;FromHtml;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Drawing;ColorTranslator;false;ToHtml;(System.Drawing.Color);;Argument[0];ReturnValue;generated:taint | +| System.Drawing;PointConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Drawing;PointConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Drawing;Rectangle;false;Inflate;(System.Drawing.Rectangle,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Drawing;RectangleConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Drawing;RectangleConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Drawing;RectangleF;false;Inflate;(System.Drawing.RectangleF,System.Single,System.Single);;Argument[0];ReturnValue;generated:taint | +| System.Drawing;SizeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Drawing;SizeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Drawing;SizeFConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Drawing;SizeFConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Dynamic;BindingRestrictions;false;GetExpressionRestriction;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Dynamic;BindingRestrictions;false;GetInstanceRestriction;(System.Linq.Expressions.Expression,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Dynamic;BindingRestrictions;false;GetInstanceRestriction;(System.Linq.Expressions.Expression,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.Dynamic;BindingRestrictions;false;GetTypeRestriction;(System.Linq.Expressions.Expression,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Dynamic;BindingRestrictions;false;GetTypeRestriction;(System.Linq.Expressions.Expression,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Dynamic;BindingRestrictions;false;Merge;(System.Dynamic.BindingRestrictions);;Argument[Qualifier];ReturnValue;generated:value | +| System.Dynamic;BindingRestrictions;false;ToExpression;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Dynamic;DynamicMetaObject;false;Create;(System.Object,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Dynamic;DynamicMetaObject;false;DynamicMetaObject;(System.Linq.Expressions.Expression,System.Dynamic.BindingRestrictions,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.Dynamic;DynamicMetaObject;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Dynamic;ExpandoObject;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Dynamic;ExpandoObject;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Dynamic;ExpandoObject;false;TryGetValue;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;AsnReader;(System.ReadOnlyMemory,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.AsnReaderOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Formats.Asn1;AsnReader;false;AsnReader;(System.ReadOnlyMemory,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.AsnReaderOptions);;Argument[2];Argument[Qualifier];generated:taint | +| System.Formats.Asn1;AsnReader;false;PeekContentBytes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;PeekEncodedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;ReadEncodedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;ReadEnumeratedBytes;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;ReadIntegerBytes;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;ReadSequence;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;ReadSetOf;(System.Boolean,System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;ReadSetOf;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;TryReadPrimitiveBitString;(System.Int32,System.ReadOnlyMemory,System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;TryReadPrimitiveCharacterStringBytes;(System.Formats.Asn1.Asn1Tag,System.ReadOnlyMemory);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnReader;false;TryReadPrimitiveOctetString;(System.ReadOnlyMemory,System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnWriter;false;PushOctetString;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnWriter;false;PushSequence;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Formats.Asn1;AsnWriter;false;PushSetOf;(System.Nullable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;Calendar;false;ReadOnly;(System.Globalization.Calendar);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;GetSortKey;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;GetSortKey;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;GetSortKey;(System.String,System.Globalization.CompareOptions);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;GetSortKey;(System.String,System.Globalization.CompareOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CompareInfo;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;CultureInfo;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;CultureInfo;false;GetConsoleFallbackUICulture;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;GetCultureInfo;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;GetCultureInfo;(System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;GetCultureInfo;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;GetCultureInfo;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;GetCultureInfoByIetfLanguageTag;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;GetFormat;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;ReadOnly;(System.Globalization.CultureInfo);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_Calendar;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_DateTimeFormat;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_EnglishName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_NativeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_NumberFormat;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;get_TextInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureInfo;false;set_DateTimeFormat;(System.Globalization.DateTimeFormatInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;CultureInfo;false;set_NumberFormat;(System.Globalization.NumberFormatInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;CultureNotFoundException;false;CultureNotFoundException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;CultureNotFoundException;false;CultureNotFoundException;(System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System.Globalization;CultureNotFoundException;false;CultureNotFoundException;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Globalization;CultureNotFoundException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Globalization;CultureNotFoundException;false;get_InvalidCultureId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureNotFoundException;false;get_InvalidCultureName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;CultureNotFoundException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetAbbreviatedDayName;(System.DayOfWeek);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetAbbreviatedEraName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetAbbreviatedMonthName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetAllDateTimePatterns;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetDayName;(System.DayOfWeek);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetEraName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetFormat;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetInstance;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetMonthName;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;GetShortestDayName;(System.DayOfWeek);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;ReadOnly;(System.Globalization.DateTimeFormatInfo);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;SetAllDateTimePatterns;(System.String[],System.Char);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;get_AMDesignator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;get_Calendar;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;get_DateSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;get_MonthDayPattern;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;get_PMDesignator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;get_TimeSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_AMDesignator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_AbbreviatedDayNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_AbbreviatedMonthGenitiveNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_AbbreviatedMonthNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_Calendar;(System.Globalization.Calendar);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_DateSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_DayNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_FullDateTimePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_LongDatePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_LongTimePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_MonthDayPattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_MonthGenitiveNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_MonthNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_PMDesignator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_ShortDatePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_ShortTimePattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_ShortestDayNames;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_TimeSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DateTimeFormatInfo;false;set_YearMonthPattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DaylightTime;false;DaylightTime;(System.DateTime,System.DateTime,System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;DaylightTime;false;DaylightTime;(System.DateTime,System.DateTime,System.TimeSpan);;Argument[1];Argument[Qualifier];generated:taint | +| System.Globalization;DaylightTime;false;DaylightTime;(System.DateTime,System.DateTime,System.TimeSpan);;Argument[2];Argument[Qualifier];generated:taint | +| System.Globalization;DaylightTime;false;get_Delta;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DaylightTime;false;get_End;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;DaylightTime;false;get_Start;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;GlobalizationExtensions;false;GetStringComparer;(System.Globalization.CompareInfo,System.Globalization.CompareOptions);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;IdnMapping;false;GetAscii;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;IdnMapping;false;GetAscii;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;IdnMapping;false;GetAscii;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;IdnMapping;false;GetUnicode;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;IdnMapping;false;GetUnicode;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;IdnMapping;false;GetUnicode;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;GetFormat;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;GetInstance;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;ReadOnly;(System.Globalization.NumberFormatInfo);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_CurrencyDecimalSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_CurrencyGroupSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_CurrencySymbol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_NaNSymbol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_NegativeInfinitySymbol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_NegativeSign;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_NumberDecimalSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_NumberGroupSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_PerMilleSymbol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_PercentDecimalSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_PercentGroupSeparator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_PercentSymbol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_PositiveInfinitySymbol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;get_PositiveSign;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;NumberFormatInfo;false;set_CurrencyDecimalSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_CurrencyGroupSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_CurrencySymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_NaNSymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_NativeDigits;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_NegativeInfinitySymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_NegativeSign;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_NumberDecimalSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_NumberGroupSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_PerMilleSymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_PercentDecimalSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_PercentGroupSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_PercentSymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_PositiveInfinitySymbol;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;NumberFormatInfo;false;set_PositiveSign;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;RegionInfo;false;RegionInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;RegionInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;RegionInfo;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;RegionInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;SortKey;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;SortKey;false;get_OriginalString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;SortVersion;false;SortVersion;(System.Int32,System.Guid);;Argument[1];Argument[Qualifier];generated:taint | +| System.Globalization;SortVersion;false;get_SortId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;GetNextTextElement;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;GetNextTextElement;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;GetTextElementEnumerator;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;GetTextElementEnumerator;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;StringInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;StringInfo;false;SubstringByTextElements;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;SubstringByTextElements;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;get_String;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;StringInfo;false;set_String;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Globalization;TextElementEnumerator;false;GetTextElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;TextElementEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;ReadOnly;(System.Globalization.TextInfo);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;ToLower;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;ToTitleCase;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;ToUpper;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;get_CultureName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Globalization;TextInfo;false;set_ListSeparator;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO.Compression;BrotliStream;false;BrotliStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO.Compression;BrotliStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;BrotliStream;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO.Compression;DeflateStream;false;DeflateStream;(System.IO.Stream,System.IO.Compression.CompressionLevel);;Argument[0];ReturnValue;taint | | System.IO.Compression;DeflateStream;false;DeflateStream;(System.IO.Stream,System.IO.Compression.CompressionLevel,System.Boolean);;Argument[0];ReturnValue;taint | | System.IO.Compression;DeflateStream;false;DeflateStream;(System.IO.Stream,System.IO.Compression.CompressionMode);;Argument[0];ReturnValue;taint | | System.IO.Compression;DeflateStream;false;DeflateStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);;Argument[0];ReturnValue;taint | +| System.IO.Compression;DeflateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;DeflateStream;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;GZipStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;GZipStream;false;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionLevel,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO.Compression;GZipStream;false;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO.Compression;GZipStream;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchive;false;CreateEntry;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchive;false;CreateEntry;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchive;false;CreateEntry;(System.String,System.IO.Compression.CompressionLevel);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchive;false;CreateEntry;(System.String,System.IO.Compression.CompressionLevel);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchive;false;ZipArchive;(System.IO.Stream,System.IO.Compression.ZipArchiveMode,System.Boolean,System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO.Compression;ZipArchive;false;ZipArchive;(System.IO.Stream,System.IO.Compression.ZipArchiveMode,System.Boolean,System.Text.Encoding);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO.Compression;ZipArchive;false;get_Entries;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;Open;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;get_Archive;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;get_LastWriteTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Compression;ZipArchiveEntry;false;set_LastWriteTime;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO.Compression;ZipFile;false;Open;(System.String,System.IO.Compression.ZipArchiveMode,System.Text.Encoding);;Argument[2];ReturnValue;generated:taint | +| System.IO.Compression;ZipFileExtensions;false;CreateEntryFromFile;(System.IO.Compression.ZipArchive,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;ZipFileExtensions;false;CreateEntryFromFile;(System.IO.Compression.ZipArchive,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.IO.Compression;ZipFileExtensions;false;CreateEntryFromFile;(System.IO.Compression.ZipArchive,System.String,System.String,System.IO.Compression.CompressionLevel);;Argument[0];ReturnValue;generated:taint | +| System.IO.Compression;ZipFileExtensions;false;CreateEntryFromFile;(System.IO.Compression.ZipArchive,System.String,System.String,System.IO.Compression.CompressionLevel);;Argument[2];ReturnValue;generated:taint | +| System.IO.Enumeration;FileSystemEntry;false;ToFileSystemInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Enumeration;FileSystemEntry;false;ToSpecifiedFullPath;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Enumeration;FileSystemEntry;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Enumeration;FileSystemEnumerator<>;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Enumeration;FileSystemName;false;TranslateWin32Expression;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorage;false;get_ApplicationIdentity;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorage;false;get_AssemblyIdentity;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorage;false;get_DomainIdentity;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO.MemoryMappedFiles;MemoryMappedFile;false;CreateFromFile;(System.IO.FileStream,System.String,System.Int64,System.IO.MemoryMappedFiles.MemoryMappedFileAccess,System.IO.HandleInheritability,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.IO.MemoryMappedFiles;MemoryMappedFile;false;get_SafeMemoryMappedFileHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.MemoryMappedFiles;MemoryMappedViewAccessor;false;get_SafeMemoryMappedViewHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.MemoryMappedFiles;MemoryMappedViewStream;false;get_SafeMemoryMappedViewHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Pipes;AnonymousPipeClientStream;false;AnonymousPipeClientStream;(System.IO.Pipes.PipeDirection,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO.Pipes;AnonymousPipeServerStream;false;AnonymousPipeServerStream;(System.IO.Pipes.PipeDirection,Microsoft.Win32.SafeHandles.SafePipeHandle,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO.Pipes;AnonymousPipeServerStream;false;AnonymousPipeServerStream;(System.IO.Pipes.PipeDirection,Microsoft.Win32.SafeHandles.SafePipeHandle,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO.Pipes;AnonymousPipeServerStream;false;get_ClientSafePipeHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO.Pipes;NamedPipeClientStream;false;ConnectAsync;(System.Int32,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO.Pipes;NamedPipeClientStream;false;ConnectAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.Pipes;NamedPipeClientStream;false;NamedPipeClientStream;(System.IO.Pipes.PipeDirection,System.Boolean,System.Boolean,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO.Pipes;NamedPipeClientStream;false;NamedPipeClientStream;(System.String,System.String,System.IO.Pipes.PipeDirection,System.IO.Pipes.PipeOptions,System.Security.Principal.TokenImpersonationLevel,System.IO.HandleInheritability);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO.Pipes;NamedPipeServerStream;false;NamedPipeServerStream;(System.IO.Pipes.PipeDirection,System.Boolean,System.Boolean,Microsoft.Win32.SafeHandles.SafePipeHandle);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO.Pipes;NamedPipeServerStream;false;WaitForConnectionAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO.Pipes;PipeStream;false;InitializeHandle;(Microsoft.Win32.SafeHandles.SafePipeHandle,System.Boolean,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO.Pipes;PipeStream;false;get_SafePipeHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;BinaryReader;false;BinaryReader;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;BinaryReader;false;BinaryReader;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;BinaryReader;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.IO;BinaryReader;false;ReadBytes;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;BinaryReader;false;ReadString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;BinaryReader;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;BinaryWriter;false;BinaryWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;BinaryWriter;false;BinaryWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;BinaryWriter;false;DisposeAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;BinaryWriter;false;Write;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;BinaryWriter;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;BinaryWriter;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;BufferedStream;false;get_UnderlyingStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;Directory;false;CreateDirectory;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;Directory;false;GetParent;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;CreateSubdirectory;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;CreateSubdirectory;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;DirectoryInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;DirectoryInfo;false;EnumerateDirectories;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateDirectories;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateDirectories;(System.String,System.IO.EnumerationOptions);;Argument[1];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateDirectories;(System.String,System.IO.EnumerationOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateDirectories;(System.String,System.IO.SearchOption);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;(System.String,System.IO.EnumerationOptions);;Argument[1];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;(System.String,System.IO.EnumerationOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFileSystemInfos;(System.String,System.IO.SearchOption);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFiles;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFiles;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFiles;(System.String,System.IO.EnumerationOptions);;Argument[1];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFiles;(System.String,System.IO.EnumerationOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;EnumerateFiles;(System.String,System.IO.SearchOption);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DirectoryInfo;false;MoveTo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;DirectoryInfo;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DriveInfo;false;DriveInfo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;DriveInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DriveInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DriveInfo;false;get_RootDirectory;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;DriveInfo;false;get_VolumeLabel;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;ErrorEventArgs;false;ErrorEventArgs;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;ErrorEventArgs;false;GetException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;File;false;AppendAllLinesAsync;(System.String,System.Collections.Generic.IEnumerable,System.Text.Encoding,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint | +| System.IO;File;false;AppendAllLinesAsync;(System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.IO;File;false;AppendAllTextAsync;(System.String,System.String,System.Text.Encoding,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint | +| System.IO;File;false;AppendAllTextAsync;(System.String,System.String,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.IO;File;false;ReadLines;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;File;false;ReadLines;(System.String,System.Text.Encoding);;Argument[0];ReturnValue;generated:taint | +| System.IO;File;false;ReadLines;(System.String,System.Text.Encoding);;Argument[1];ReturnValue;generated:taint | +| System.IO;File;false;WriteAllBytesAsync;(System.String,System.Byte[],System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.IO;File;false;WriteAllLinesAsync;(System.String,System.Collections.Generic.IEnumerable,System.Text.Encoding,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint | +| System.IO;File;false;WriteAllLinesAsync;(System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.IO;File;false;WriteAllTextAsync;(System.String,System.String,System.Text.Encoding,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint | +| System.IO;File;false;WriteAllTextAsync;(System.String,System.String,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.IO;FileInfo;false;CopyTo;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;FileInfo;false;CopyTo;(System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.IO;FileInfo;false;MoveTo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;FileInfo;false;MoveTo;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;FileInfo;false;get_Directory;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileInfo;false;get_DirectoryName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileLoadException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.IO;FileLoadException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileNotFoundException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.IO;FileNotFoundException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileNotFoundException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;FileStream;false;get_SafeFileHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemEventArgs;false;FileSystemEventArgs;(System.IO.WatcherChangeTypes,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;FileSystemEventArgs;false;FileSystemEventArgs;(System.IO.WatcherChangeTypes,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;FileSystemEventArgs;false;get_FullPath;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemEventArgs;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemInfo;false;get_Extension;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemInfo;true;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemInfo;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemWatcher;false;FileSystemWatcher;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;FileSystemWatcher;false;FileSystemWatcher;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;FileSystemWatcher;false;FileSystemWatcher;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;FileSystemWatcher;false;get_Filter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemWatcher;false;get_Filters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemWatcher;false;get_Path;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemWatcher;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;FileSystemWatcher;false;set_Filter;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;FileSystemWatcher;false;set_Path;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;FileSystemWatcher;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;MemoryStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;MemoryStream;false;GetBuffer;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;MemoryStream;false;MemoryStream;(System.Byte[]);;Argument[0];ReturnValue;taint | | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Boolean);;Argument[0].Element;ReturnValue;taint | | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean);;Argument[0].Element;ReturnValue;taint | | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Boolean);;Argument[0].Element;ReturnValue;taint | | System.IO;MemoryStream;false;ToArray;();;Argument[Qualifier];ReturnValue;taint | +| System.IO;MemoryStream;false;TryGetBuffer;(System.ArraySegment);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;MemoryStream;false;WriteTo;(System.IO.Stream);;Argument[Qualifier];Argument[0];generated:taint | +| System.IO;Path;false;ChangeExtension;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | | System.IO;Path;false;Combine;(System.String,System.String);;Argument[0];ReturnValue;taint | | System.IO;Path;false;Combine;(System.String,System.String);;Argument[1];ReturnValue;taint | | System.IO;Path;false;Combine;(System.String,System.String,System.String);;Argument[0];ReturnValue;taint | @@ -575,21 +2482,62 @@ | System.IO;Path;false;GetPathRoot;(System.ReadOnlySpan);;Argument[0].Element;ReturnValue;taint | | System.IO;Path;false;GetPathRoot;(System.String);;Argument[0];ReturnValue;taint | | System.IO;Path;false;GetRelativePath;(System.String,System.String);;Argument[1];ReturnValue;taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[1];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[1];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[2];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[1];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[2];ReturnValue;generated:taint | +| System.IO;Path;false;Join;(System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan,System.ReadOnlySpan);;Argument[3];ReturnValue;generated:taint | +| System.IO;Path;false;TrimEndingDirectorySeparator;(System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System.IO;Path;false;TrimEndingDirectorySeparator;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;RenamedEventArgs;false;RenamedEventArgs;(System.IO.WatcherChangeTypes,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;RenamedEventArgs;false;RenamedEventArgs;(System.IO.WatcherChangeTypes,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO;RenamedEventArgs;false;get_OldFullPath;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;RenamedEventArgs;false;get_OldName;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;Stream;false;CopyTo;(System.IO.Stream);;Argument[Qualifier];Argument[0];taint | | System.IO;Stream;false;CopyToAsync;(System.IO.Stream);;Argument[Qualifier];Argument[0];taint | | System.IO;Stream;false;CopyToAsync;(System.IO.Stream,System.Int32);;Argument[Qualifier];Argument[0];taint | | System.IO;Stream;false;CopyToAsync;(System.IO.Stream,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];taint | +| System.IO;Stream;false;FlushAsync;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;Stream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO;Stream;false;Synchronized;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | | System.IO;Stream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO;Stream;true;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[Qualifier];Argument[0].Element;taint | | System.IO;Stream;true;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[Qualifier];taint | | System.IO;Stream;true;CopyTo;(System.IO.Stream,System.Int32);;Argument[Qualifier];Argument[0];taint | | System.IO;Stream;true;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];taint | +| System.IO;Stream;true;FlushAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;Stream;true;Read;(System.Byte[],System.Int32,System.Int32);;Argument[Qualifier];Argument[0].Element;taint | | System.IO;Stream;true;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0].Element;taint | +| System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;Stream;true;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];taint | | System.IO;Stream;true;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[Qualifier];taint | +| System.IO;Stream;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamReader;false;StreamReader;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamReader;false;StreamReader;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Int32,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;StreamReader;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamReader;false;get_CurrentEncoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;StreamWriter;(System.IO.Stream,System.Text.Encoding,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;StreamWriter;(System.IO.Stream,System.Text.Encoding,System.Int32,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;StreamWriter;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StreamWriter;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | | System.IO;StringReader;false;StringReader;(System.String);;Argument[0];ReturnValue;taint | +| System.IO;StringWriter;false;GetStringBuilder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;StringWriter;(System.Text.StringBuilder,System.IFormatProvider);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;StringWriter;false;Write;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;Write;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;Write;(System.Text.StringBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;StringWriter;false;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextReader;false;Synchronized;(System.IO.TextReader);;Argument[0];ReturnValue;generated:taint | | System.IO;TextReader;true;Read;();;Argument[Qualifier];ReturnValue;taint | | System.IO;TextReader;true;Read;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;taint | | System.IO;TextReader;true;Read;(System.Span);;Argument[Qualifier];ReturnValue;taint | @@ -603,6 +2551,531 @@ | System.IO;TextReader;true;ReadLineAsync;();;Argument[Qualifier];ReturnValue;taint | | System.IO;TextReader;true;ReadToEnd;();;Argument[Qualifier];ReturnValue;taint | | System.IO;TextReader;true;ReadToEndAsync;();;Argument[Qualifier];ReturnValue;taint | +| System.IO;TextWriter;false;Synchronized;(System.IO.TextWriter);;Argument[0];ReturnValue;generated:taint | +| System.IO;TextWriter;false;TextWriter;(System.IFormatProvider);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;false;WriteAsync;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;false;WriteAsync;(System.Char[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.IO;TextWriter;false;WriteAsync;(System.Char[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;false;WriteLineAsync;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;false;WriteLineAsync;(System.Char[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.IO;TextWriter;false;WriteLineAsync;(System.Char[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;FlushAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;Write;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object,System.Object,System.Object);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;Write;(System.String,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.Char[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object,System.Object,System.Object);;Argument[3];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.String,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLine;(System.Text.StringBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.Char);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.IO;TextWriter;true;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;get_FormatProvider;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;get_NewLine;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.IO;TextWriter;true;set_NewLine;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryAccessor;false;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryAccessor;false;UnmanagedMemoryAccessor;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryAccessor;false;UnmanagedMemoryAccessor;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.IO;UnmanagedMemoryStream;false;Initialize;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryStream;false;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Byte*,System.Int64);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[Qualifier];generated:taint | +| System.IO;UnmanagedMemoryStream;false;get_PositionPointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;BinaryExpression;false;Update;(System.Linq.Expressions.Expression,System.Linq.Expressions.LambdaExpression,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;BinaryExpression;false;get_Conversion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;BinaryExpression;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;BlockExpression;false;Update;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;BlockExpression;false;get_Expressions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;BlockExpression;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;BlockExpression;false;get_Variables;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;CatchBlock;false;Update;(System.Linq.Expressions.ParameterExpression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;ConditionalExpression;false;Update;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;ConditionalExpression;false;get_IfFalse;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Rewrite;(System.Linq.Expressions.Expression[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;DynamicExpression;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;DynamicExpression;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;ElementInit;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Add;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AddChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;And;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAlso;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;AndAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ArrayAccess;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ArrayIndex;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Bind;(System.Reflection.MemberInfo,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Bind;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Type,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Block;(System.Type,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Call;(System.Reflection.MethodInfo,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Coalesce;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Condition;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Condition;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Divide;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;DivideAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Dynamic;(System.Runtime.CompilerServices.CallSiteBinder,System.Type,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Equal;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOr;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ExclusiveOrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Field;(System.Linq.Expressions.Expression,System.Reflection.FieldInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Field;(System.Linq.Expressions.Expression,System.Type,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GetActionType;(System.Type[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GetFuncType;(System.Type[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;GreaterThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;IfThenElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Invoke;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Lambda<>;(System.Linq.Expressions.Expression,System.Boolean,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Lambda<>;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Lambda<>;(System.Linq.Expressions.Expression,System.String,System.Boolean,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Lambda<>;(System.Linq.Expressions.Expression,System.String,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LeftShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThan;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;LessThanOrEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeBinary;(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[5];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[4];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeDynamic;(System.Type,System.Runtime.CompilerServices.CallSiteBinder,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[5];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeIndex;(System.Linq.Expressions.Expression,System.Reflection.PropertyInfo,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MakeMemberAccess;(System.Linq.Expressions.Expression,System.Reflection.MemberInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Modulo;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ModuloAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Multiply;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;MultiplyChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;New;(System.Reflection.ConstructorInfo,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;New;(System.Reflection.ConstructorInfo,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;New;(System.Reflection.ConstructorInfo,System.Collections.Generic.IEnumerable,System.Reflection.MemberInfo[]);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;NotEqual;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Or;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;OrElse;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Power;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;PowerAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;PowerAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;PowerAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Property;(System.Linq.Expressions.Expression,System.Reflection.PropertyInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Property;(System.Linq.Expressions.Expression,System.Reflection.PropertyInfo,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Property;(System.Linq.Expressions.Expression,System.Type,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ReduceAndCheck;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ReduceExtensions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShift;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;RightShiftAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;Subtract;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssign;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractAssignChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression);;Argument[3];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;SubtractChecked;(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Reflection.MethodInfo);;Argument[2];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;TryGetActionType;(System.Type[],System.Type);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;false;TryGetFuncType;(System.Type[],System.Type);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;true;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;Expression;true;Accept;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression;true;Reduce;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;Expression;true;VisitChildren;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];Argument[0];generated:taint | +| System.Linq.Expressions;Expression;true;VisitChildren;(System.Linq.Expressions.ExpressionVisitor);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;Expression<>;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;false;Visit;(System.Collections.ObjectModel.ReadOnlyCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;false;Visit;(System.Collections.ObjectModel.ReadOnlyCollection);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;false;VisitAndConvert<>;(System.Collections.ObjectModel.ReadOnlyCollection,System.String);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;false;VisitAndConvert<>;(System.Collections.ObjectModel.ReadOnlyCollection,System.String);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;false;VisitAndConvert<>;(T,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;false;VisitAndConvert<>;(T,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;Visit;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;Visit;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitBinary;(System.Linq.Expressions.BinaryExpression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitBinary;(System.Linq.Expressions.BinaryExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitBlock;(System.Linq.Expressions.BlockExpression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitBlock;(System.Linq.Expressions.BlockExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitCatchBlock;(System.Linq.Expressions.CatchBlock);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitConditional;(System.Linq.Expressions.ConditionalExpression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitConditional;(System.Linq.Expressions.ConditionalExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitConstant;(System.Linq.Expressions.ConstantExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitDebugInfo;(System.Linq.Expressions.DebugInfoExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitDefault;(System.Linq.Expressions.DefaultExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitDynamic;(System.Linq.Expressions.DynamicExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitElementInit;(System.Linq.Expressions.ElementInit);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitExtension;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitExtension;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitGoto;(System.Linq.Expressions.GotoExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitIndex;(System.Linq.Expressions.IndexExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitInvocation;(System.Linq.Expressions.InvocationExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitLabel;(System.Linq.Expressions.LabelExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitLabelTarget;(System.Linq.Expressions.LabelTarget);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitLambda<>;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitLambda<>;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitListInit;(System.Linq.Expressions.ListInitExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitLoop;(System.Linq.Expressions.LoopExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMember;(System.Linq.Expressions.MemberExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberAssignment;(System.Linq.Expressions.MemberAssignment);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberAssignment;(System.Linq.Expressions.MemberAssignment);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberBinding;(System.Linq.Expressions.MemberBinding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberBinding;(System.Linq.Expressions.MemberBinding);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberInit;(System.Linq.Expressions.MemberInitExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberListBinding;(System.Linq.Expressions.MemberListBinding);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMemberMemberBinding;(System.Linq.Expressions.MemberMemberBinding);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMethodCall;(System.Linq.Expressions.MethodCallExpression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitMethodCall;(System.Linq.Expressions.MethodCallExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitNew;(System.Linq.Expressions.NewExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitNewArray;(System.Linq.Expressions.NewArrayExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitParameter;(System.Linq.Expressions.ParameterExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitRuntimeVariables;(System.Linq.Expressions.RuntimeVariablesExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitSwitch;(System.Linq.Expressions.SwitchExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitSwitchCase;(System.Linq.Expressions.SwitchCase);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitTry;(System.Linq.Expressions.TryExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitTypeBinary;(System.Linq.Expressions.TypeBinaryExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;ExpressionVisitor;true;VisitUnary;(System.Linq.Expressions.UnaryExpression);;Argument[0];ReturnValue;generated:taint | +| System.Linq.Expressions;GotoExpression;false;Update;(System.Linq.Expressions.LabelTarget,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;IndexExpression;false;GetArgument;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;IndexExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;IndexExpression;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;InvocationExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;LabelExpression;false;Update;(System.Linq.Expressions.LabelTarget,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;LambdaExpression;false;get_Body;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;LambdaExpression;false;get_Parameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;ListInitExpression;false;Update;(System.Linq.Expressions.NewExpression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;LoopExpression;false;Update;(System.Linq.Expressions.LabelTarget,System.Linq.Expressions.LabelTarget,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MemberAssignment;false;Update;(System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MemberAssignment;false;get_Expression;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;MemberExpression;false;Update;(System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MemberExpression;false;get_Member;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;MemberInitExpression;false;Update;(System.Linq.Expressions.NewExpression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MemberListBinding;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MemberMemberBinding;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MethodCallExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;MethodCallExpression;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;MethodCallExpression;false;get_Object;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;NewArrayExpression;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;NewExpression;false;GetArgument;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;NewExpression;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;NewExpression;false;get_Arguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq.Expressions;RuntimeVariablesExpression;false;Update;(System.Collections.Generic.IEnumerable);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;SwitchCase;false;Update;(System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;SwitchExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;TryExpression;false;Update;(System.Linq.Expressions.Expression,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;TypeBinaryExpression;false;Update;(System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq.Expressions;UnaryExpression;false;Update;(System.Linq.Expressions.Expression);;Argument[Qualifier];ReturnValue;generated:value | | System.Linq;Enumerable;false;Aggregate<,,>;(System.Collections.Generic.IEnumerable,TAccumulate,System.Func,System.Func);;Argument[0].Element;Argument[2].Parameter[1];value | | System.Linq;Enumerable;false;Aggregate<,,>;(System.Collections.Generic.IEnumerable,TAccumulate,System.Func,System.Func);;Argument[1];Argument[2].Parameter[0];value | | System.Linq;Enumerable;false;Aggregate<,,>;(System.Collections.Generic.IEnumerable,TAccumulate,System.Func,System.Func);;Argument[2].ReturnValue;Argument[3].Parameter[0];value | @@ -614,6 +3087,7 @@ | System.Linq;Enumerable;false;Aggregate<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[1].ReturnValue;ReturnValue;value | | System.Linq;Enumerable;false;All<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;Any<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | +| System.Linq;Enumerable;false;Append<>;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue;generated:taint | | System.Linq;Enumerable;false;AsEnumerable<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;Enumerable;false;Average<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;Average<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | @@ -731,6 +3205,8 @@ | System.Linq;Enumerable;false;OrderByDescending<,>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;Enumerable;false;OrderByDescending<,>;(System.Collections.Generic.IEnumerable,System.Func,System.Collections.Generic.IComparer);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;OrderByDescending<,>;(System.Collections.Generic.IEnumerable,System.Func,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue.Element;value | +| System.Linq;Enumerable;false;Prepend<>;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue;generated:taint | +| System.Linq;Enumerable;false;Repeat<>;(TResult,System.Int32);;Argument[0];ReturnValue;generated:taint | | System.Linq;Enumerable;false;Reverse<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;Enumerable;false;Select<,>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;Select<,>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[1].ReturnValue;ReturnValue.Element;value | @@ -755,6 +3231,7 @@ | System.Linq;Enumerable;false;SingleOrDefault<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;SingleOrDefault<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;ReturnValue;value | | System.Linq;Enumerable;false;Skip<>;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System.Linq;Enumerable;false;SkipLast<>;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;Enumerable;false;SkipWhile<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;SkipWhile<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;Enumerable;false;SkipWhile<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | @@ -770,6 +3247,7 @@ | System.Linq;Enumerable;false;Sum<>;(System.Collections.Generic.IEnumerable,System.Func>);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;Sum<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;Take<>;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System.Linq;Enumerable;false;TakeLast<>;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;Enumerable;false;TakeWhile<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;Enumerable;false;TakeWhile<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;Enumerable;false;TakeWhile<>;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | @@ -815,12 +3293,26 @@ | System.Linq;Enumerable;false;Zip<,,>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[2].Parameter[0];value | | System.Linq;Enumerable;false;Zip<,,>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func);;Argument[1].Element;Argument[2].Parameter[1];value | | System.Linq;Enumerable;false;Zip<,,>;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func);;Argument[2].ReturnValue;ReturnValue.Element;value | +| System.Linq;EnumerableExecutor<>;false;EnumerableExecutor;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint | +| System.Linq;EnumerableQuery<>;false;CreateQuery<>;(System.Linq.Expressions.Expression);;Argument[0];ReturnValue;generated:taint | +| System.Linq;EnumerableQuery<>;false;EnumerableQuery;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Linq;EnumerableQuery<>;false;EnumerableQuery;(System.Linq.Expressions.Expression);;Argument[0];Argument[Qualifier];generated:taint | | System.Linq;EnumerableQuery<>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | +| System.Linq;EnumerableQuery<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq;EnumerableQuery<>;false;get_Expression;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Linq;EnumerableQuery<>;false;get_Provider;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Linq;ImmutableArrayExtensions;false;ElementAt<>;(System.Collections.Immutable.ImmutableArray,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ImmutableArrayExtensions;false;ElementAtOrDefault<>;(System.Collections.Immutable.ImmutableArray,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ImmutableArrayExtensions;false;First<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;ImmutableArrayExtensions;false;First<>;(System.Collections.Immutable.ImmutableArray+Builder);;Argument[0].Element;ReturnValue;value | +| System.Linq;ImmutableArrayExtensions;false;FirstOrDefault<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;ImmutableArrayExtensions;false;FirstOrDefault<>;(System.Collections.Immutable.ImmutableArray+Builder);;Argument[0].Element;ReturnValue;value | +| System.Linq;ImmutableArrayExtensions;false;Last<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;ImmutableArrayExtensions;false;Last<>;(System.Collections.Immutable.ImmutableArray+Builder);;Argument[0].Element;ReturnValue;value | | System.Linq;ImmutableArrayExtensions;false;LastOrDefault<>;(System.Collections.Immutable.ImmutableArray+Builder);;Argument[0].Element;ReturnValue;value | +| System.Linq;ImmutableArrayExtensions;false;Single<>;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;Lookup<,>;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value | +| System.Linq;Lookup<,>;false;get_Item;(TKey);;Argument[Qualifier];ReturnValue;generated:taint | | System.Linq;ParallelEnumerable;false;Aggregate<,,>;(System.Linq.ParallelQuery,TAccumulate,System.Func,System.Func);;Argument[0].Element;Argument[2].Parameter[1];value | | System.Linq;ParallelEnumerable;false;Aggregate<,,>;(System.Linq.ParallelQuery,TAccumulate,System.Func,System.Func);;Argument[1];Argument[2].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Aggregate<,,>;(System.Linq.ParallelQuery,TAccumulate,System.Func,System.Func);;Argument[2].ReturnValue;Argument[3].Parameter[0];value | @@ -833,6 +3325,13 @@ | System.Linq;ParallelEnumerable;false;All<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Any<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;AsEnumerable<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue.Element;value | +| System.Linq;ParallelEnumerable;false;AsOrdered;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;AsOrdered<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;AsParallel;(System.Collections.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;AsParallel<>;(System.Collections.Concurrent.Partitioner);;Argument[0];ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;AsParallel<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;AsSequential<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;AsUnordered<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;ParallelEnumerable;false;Average<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Average<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Average<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | @@ -977,6 +3476,7 @@ | System.Linq;ParallelEnumerable;false;OrderByDescending<,>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;ParallelEnumerable;false;OrderByDescending<,>;(System.Linq.ParallelQuery,System.Func,System.Collections.Generic.IComparer);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;OrderByDescending<,>;(System.Linq.ParallelQuery,System.Func,System.Collections.Generic.IComparer);;Argument[0].Element;ReturnValue.Element;value | +| System.Linq;ParallelEnumerable;false;Repeat<>;(TResult,System.Int32);;Argument[0];ReturnValue;generated:taint | | System.Linq;ParallelEnumerable;false;Reverse<>;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;ParallelEnumerable;false;Select<,>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Select<,>;(System.Linq.ParallelQuery,System.Func);;Argument[1].ReturnValue;ReturnValue.Element;value | @@ -1062,6 +3562,10 @@ | System.Linq;ParallelEnumerable;false;Where<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;ReturnValue.Element;value | | System.Linq;ParallelEnumerable;false;Where<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Where<>;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;ReturnValue.Element;value | +| System.Linq;ParallelEnumerable;false;WithCancellation<>;(System.Linq.ParallelQuery,System.Threading.CancellationToken);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;WithDegreeOfParallelism<>;(System.Linq.ParallelQuery,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;WithExecutionMode<>;(System.Linq.ParallelQuery,System.Linq.ParallelExecutionMode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Linq;ParallelEnumerable;false;WithMergeOptions<>;(System.Linq.ParallelQuery,System.Linq.ParallelMergeOptions);;Argument[0].Element;ReturnValue;generated:taint | | System.Linq;ParallelEnumerable;false;Zip<,,>;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[2].Parameter[0];value | | System.Linq;ParallelEnumerable;false;Zip<,,>;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable,System.Func);;Argument[1].Element;Argument[2].Parameter[1];value | | System.Linq;ParallelEnumerable;false;Zip<,,>;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable,System.Func);;Argument[2].ReturnValue;ReturnValue.Element;value | @@ -1236,59 +3740,2320 @@ | System.Linq;Queryable;false;Zip<,,>;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[0].Element;Argument[2].Parameter[0];value | | System.Linq;Queryable;false;Zip<,,>;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[1].Element;Argument[2].Parameter[1];value | | System.Linq;Queryable;false;Zip<,,>;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[2].ReturnValue;ReturnValue.Element;value | +| System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.DateTime);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan,System.TimeSpan);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan,System.TimeSpan);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan,System.TimeSpan,System.DateTime);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;get_CacheSyncDate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;get_MaxAge;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;get_MaxStale;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Cache;HttpRequestCachePolicy;false;get_MinFresh;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;AuthenticationHeaderValue;false;AuthenticationHeaderValue;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;AuthenticationHeaderValue;false;AuthenticationHeaderValue;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;AuthenticationHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;AuthenticationHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;AuthenticationHeaderValue;false;get_Parameter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;AuthenticationHeaderValue;false;get_Scheme;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;get_MaxAge;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;get_MaxStaleLimit;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;get_MinFresh;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;get_SharedMaxAge;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;set_MaxAge;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;set_MaxStaleLimit;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;set_MinFresh;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;CacheControlHeaderValue;false;set_SharedMaxAge;(System.Nullable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;ContentDispositionHeaderValue;(System.Net.Http.Headers.ContentDispositionHeaderValue);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;ContentDispositionHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;get_DispositionType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;get_FileNameStar;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentDispositionHeaderValue;false;set_DispositionType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;get_From;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;get_Length;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;get_To;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;get_Unit;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ContentRangeHeaderValue;false;set_Unit;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;EntityTagHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;EntityTagHeaderValue;false;EntityTagHeaderValue;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;EntityTagHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;EntityTagHeaderValue;false;get_Tag;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;HttpResponseHeaders;false;get_AcceptRanges;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;HttpResponseHeaders;false;get_ProxyAuthenticate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;HttpResponseHeaders;false;get_Server;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;HttpResponseHeaders;false;get_Vary;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;HttpResponseHeaders;false;get_WwwAuthenticate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;MediaTypeHeaderValue;(System.Net.Http.Headers.MediaTypeHeaderValue);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;MediaTypeHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.MediaTypeHeaderValue);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;get_CharSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;get_MediaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;MediaTypeHeaderValue;false;set_MediaType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;MediaTypeWithQualityHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.MediaTypeWithQualityHeaderValue);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;NameValueHeaderValue;(System.Net.Http.Headers.NameValueHeaderValue);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;NameValueHeaderValue;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;NameValueHeaderValue;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;NameValueHeaderValue;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;NameValueWithParametersHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductHeaderValue;false;ProductHeaderValue;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ProductHeaderValue;false;ProductHeaderValue;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ProductHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductHeaderValue;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductHeaderValue;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;Parse;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;ProductInfoHeaderValue;(System.Net.Http.Headers.ProductHeaderValue);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;ProductInfoHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.ProductInfoHeaderValue);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;get_Comment;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ProductInfoHeaderValue;false;get_Product;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeConditionHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeConditionHeaderValue;false;RangeConditionHeaderValue;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RangeConditionHeaderValue;false;RangeConditionHeaderValue;(System.Net.Http.Headers.EntityTagHeaderValue);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RangeConditionHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeConditionHeaderValue;false;get_Date;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeConditionHeaderValue;false;get_EntityTag;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeHeaderValue;false;get_Unit;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeHeaderValue;false;set_Unit;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RangeItemHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeItemHeaderValue;false;RangeItemHeaderValue;(System.Nullable,System.Nullable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RangeItemHeaderValue;false;RangeItemHeaderValue;(System.Nullable,System.Nullable);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RangeItemHeaderValue;false;get_From;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RangeItemHeaderValue;false;get_To;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RetryConditionHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RetryConditionHeaderValue;false;RetryConditionHeaderValue;(System.DateTimeOffset);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RetryConditionHeaderValue;false;RetryConditionHeaderValue;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;RetryConditionHeaderValue;false;get_Date;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;RetryConditionHeaderValue;false;get_Delta;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;StringWithQualityHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;StringWithQualityHeaderValue;false;StringWithQualityHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;StringWithQualityHeaderValue;false;StringWithQualityHeaderValue;(System.String,System.Double);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;StringWithQualityHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;StringWithQualityHeaderValue;false;get_Quality;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;StringWithQualityHeaderValue;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;TransferCodingHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;TransferCodingHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;TransferCodingHeaderValue;false;TransferCodingHeaderValue;(System.Net.Http.Headers.TransferCodingHeaderValue);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;TransferCodingHeaderValue;false;TransferCodingHeaderValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;TransferCodingHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.TransferCodingHeaderValue);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Headers;TransferCodingHeaderValue;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;TransferCodingWithQualityHeaderValue;false;TryParse;(System.String,System.Net.Http.Headers.TransferCodingWithQualityHeaderValue);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;ViaHeaderValue;(System.String,System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;ViaHeaderValue;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;ViaHeaderValue;(System.String,System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;ViaHeaderValue;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;get_Comment;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;get_ProtocolName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;get_ProtocolVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;ViaHeaderValue;false;get_ReceivedBy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String,System.DateTimeOffset);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String,System.DateTimeOffset);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;WarningHeaderValue;(System.Int32,System.String,System.String,System.DateTimeOffset);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;get_Agent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;get_Date;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Headers;WarningHeaderValue;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http.Json;JsonContent;false;Create;(System.Object,System.Type,System.Net.Http.Headers.MediaTypeHeaderValue,System.Text.Json.JsonSerializerOptions);;Argument[3];ReturnValue;generated:taint | +| System.Net.Http.Json;JsonContent;false;Create<>;(T,System.Net.Http.Headers.MediaTypeHeaderValue,System.Text.Json.JsonSerializerOptions);;Argument[2];ReturnValue;generated:taint | +| System.Net.Http;ByteArrayContent;false;ByteArrayContent;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Http;ByteArrayContent;false;ByteArrayContent;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Http;ByteArrayContent;false;CreateContentReadStreamAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStream;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;ByteArrayContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.Net.Http;DelegatingHandler;false;DelegatingHandler;(System.Net.Http.HttpMessageHandler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;DelegatingHandler;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Http;DelegatingHandler;false;get_InnerHandler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;DelegatingHandler;false;set_InnerHandler;(System.Net.Http.HttpMessageHandler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;FormUrlEncodedContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.Net.Http;HttpClient;false;Send;(System.Net.Http.HttpRequestMessage);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;Send;(System.Net.Http.HttpRequestMessage,System.Net.Http.HttpCompletionOption);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;Send;(System.Net.Http.HttpRequestMessage,System.Net.Http.HttpCompletionOption,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;Send;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;SendAsync;(System.Net.Http.HttpRequestMessage);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Net.Http.HttpCompletionOption);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Net.Http.HttpCompletionOption,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpClient;false;get_BaseAddress;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpClient;false;get_DefaultRequestVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpClient;false;get_Timeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpClient;false;set_BaseAddress;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpClient;false;set_DefaultRequestVersion;(System.Version);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpClient;false;set_Timeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpClientHandler;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;false;CopyTo;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpContent;false;CopyToAsync;(System.IO.Stream);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpContent;false;CopyToAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpContent;false;CopyToAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpContent;false;CopyToAsync;(System.IO.Stream,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpContent;false;ReadAsStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;false;ReadAsStream;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;false;ReadAsStreamAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;false;ReadAsStreamAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;true;CreateContentReadStream;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;true;CreateContentReadStreamAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;true;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;HttpContent;true;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;HttpContent;true;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpMessageInvoker;false;HttpMessageInvoker;(System.Net.Http.HttpMessageHandler,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpMessageInvoker;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Http;HttpMethod;false;HttpMethod;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpMethod;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpMethod;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpRequestMessage;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpRequestMessage;false;get_Content;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpRequestMessage;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpRequestMessage;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpRequestMessage;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpRequestMessage;false;set_Content;(System.Net.Http.HttpContent);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpRequestMessage;false;set_Method;(System.Net.Http.HttpMethod);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpRequestMessage;false;set_RequestUri;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpRequestMessage;false;set_Version;(System.Version);;Argument[0];Argument[Qualifier];generated:taint | | System.Net.Http;HttpRequestOptions;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value | | System.Net.Http;HttpRequestOptions;false;Add;(System.Collections.Generic.KeyValuePair);;Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value];Argument[Qualifier].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value | +| System.Net.Http;HttpResponseMessage;false;EnsureSuccessStatusCode;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Net.Http;HttpResponseMessage;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpResponseMessage;false;get_ReasonPhrase;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpResponseMessage;false;get_RequestMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpResponseMessage;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;HttpResponseMessage;false;set_Content;(System.Net.Http.HttpContent);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpResponseMessage;false;set_ReasonPhrase;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpResponseMessage;false;set_RequestMessage;(System.Net.Http.HttpRequestMessage);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;HttpResponseMessage;false;set_Version;(System.Version);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;MessageProcessingHandler;false;SendAsync;(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | | System.Net.Http;MultipartContent;false;Add;(System.Net.Http.HttpContent);;Argument[0];Argument[Qualifier].Element;value | +| System.Net.Http;MultipartContent;false;MultipartContent;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Http;MultipartContent;false;SerializeToStream;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;MultipartContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];Argument[0];generated:taint | | System.Net.Http;MultipartFormDataContent;false;Add;(System.Net.Http.HttpContent);;Argument[0];Argument[Qualifier].Element;value | +| System.Net.Http;MultipartFormDataContent;false;Add;(System.Net.Http.HttpContent,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;MultipartFormDataContent;false;Add;(System.Net.Http.HttpContent,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;ReadOnlyMemoryContent;false;CreateContentReadStreamAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;ReadOnlyMemoryContent;false;ReadOnlyMemoryContent;(System.ReadOnlyMemory);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpConnectionContext;false;get_DnsEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpConnectionContext;false;get_InitialRequestMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_ConnectCallback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_ConnectTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_CookieContainer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_DefaultProxyCredentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_Expect100ContinueTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_KeepAlivePingDelay;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_KeepAlivePingTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_PlaintextStreamFilter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_PooledConnectionIdleTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_PooledConnectionLifetime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_Proxy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_RequestHeaderEncodingSelector;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_ResponseDrainTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_ResponseHeaderEncodingSelector;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;get_SslOptions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_ConnectTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_CookieContainer;(System.Net.CookieContainer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_DefaultProxyCredentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_Expect100ContinueTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_KeepAlivePingDelay;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_KeepAlivePingTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_PooledConnectionIdleTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_PooledConnectionLifetime;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_ResponseDrainTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpHandler;false;set_SslOptions;(System.Net.Security.SslClientAuthenticationOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;SocketsHttpPlaintextStreamFilterContext;false;get_InitialRequestMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpPlaintextStreamFilterContext;false;get_NegotiatedHttpVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;SocketsHttpPlaintextStreamFilterContext;false;get_PlaintextStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStream;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[0];ReturnValue;generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Http;StreamContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.Net.Http;StreamContent;false;StreamContent;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;StreamContent;false;StreamContent;(System.IO.Stream,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Http;StringContent;false;SerializeToStreamAsync;(System.IO.Stream,System.Net.TransportContext,System.Threading.CancellationToken);;Argument[2];ReturnValue;generated:taint | +| System.Net.Mail;AlternateView;false;CreateAlternateViewFromString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;AlternateView;false;CreateAlternateViewFromString;(System.String,System.Net.Mime.ContentType);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;AlternateView;false;CreateAlternateViewFromString;(System.String,System.Net.Mime.ContentType);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;AlternateView;false;CreateAlternateViewFromString;(System.String,System.Text.Encoding,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;AlternateView;false;get_BaseUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;AlternateViewCollection;false;InsertItem;(System.Int32,System.Net.Mail.AlternateView);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;AlternateViewCollection;false;SetItem;(System.Int32,System.Net.Mail.AlternateView);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.IO.Stream,System.Net.Mime.ContentType);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.IO.Stream,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.IO.Stream,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.String,System.Net.Mime.ContentType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.String,System.Net.Mime.ContentType);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;Attachment;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.Net.Mime.ContentType);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.Net.Mime.ContentType);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.String,System.Text.Encoding,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;CreateAttachmentFromString;(System.String,System.String,System.Text.Encoding,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;get_ContentDisposition;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;get_NameEncoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;Attachment;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;Attachment;false;set_NameEncoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.IO.Stream,System.Net.Mime.ContentType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.IO.Stream,System.Net.Mime.ContentType);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.IO.Stream,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentBase;false;AttachmentBase;(System.String,System.Net.Mime.ContentType);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentBase;false;get_ContentId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;AttachmentBase;false;get_ContentStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;AttachmentBase;false;set_ContentType;(System.Net.Mime.ContentType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentCollection;false;InsertItem;(System.Int32,System.Net.Mail.Attachment);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;AttachmentCollection;false;SetItem;(System.Int32,System.Net.Mail.Attachment);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;LinkedResource;false;CreateLinkedResourceFromString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;LinkedResource;false;CreateLinkedResourceFromString;(System.String,System.Net.Mime.ContentType);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;LinkedResource;false;CreateLinkedResourceFromString;(System.String,System.Net.Mime.ContentType);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;LinkedResource;false;CreateLinkedResourceFromString;(System.String,System.Text.Encoding,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net.Mail;LinkedResource;false;get_ContentLink;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;LinkedResourceCollection;false;InsertItem;(System.Int32,System.Net.Mail.LinkedResource);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;LinkedResourceCollection;false;SetItem;(System.Int32,System.Net.Mail.LinkedResource);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailAddress;false;MailAddress;(System.String,System.String,System.Text.Encoding);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailAddress;false;MailAddress;(System.String,System.String,System.Text.Encoding);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailAddress;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);;Argument[2];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;get_Address;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailAddress;false;get_User;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Net.Mail;MailAddressCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier].Element;value | +| System.Net.Mail;MailAddressCollection;false;InsertItem;(System.Int32,System.Net.Mail.MailAddress);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailAddressCollection;false;SetItem;(System.Int32,System.Net.Mail.MailAddress);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailAddressCollection;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;MailMessage;(System.Net.Mail.MailAddress,System.Net.Mail.MailAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;MailMessage;(System.String,System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;MailMessage;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;get_Body;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_BodyEncoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_From;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_HeadersEncoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_ReplyTo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_Sender;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_Subject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;get_SubjectEncoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;MailMessage;false;set_Body;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_BodyEncoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_From;(System.Net.Mail.MailAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_HeadersEncoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_ReplyTo;(System.Net.Mail.MailAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_Sender;(System.Net.Mail.MailAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_Subject;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;MailMessage;false;set_SubjectEncoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;Send;(System.Net.Mail.MailMessage);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;Send;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendAsync;(System.Net.Mail.MailMessage,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendAsync;(System.String,System.String,System.String,System.String,System.Object);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendMailAsync;(System.Net.Mail.MailMessage);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendMailAsync;(System.Net.Mail.MailMessage,System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendMailAsync;(System.Net.Mail.MailMessage,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Mail;SmtpClient;false;SendMailAsync;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendMailAsync;(System.String,System.String,System.String,System.String,System.Threading.CancellationToken);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SendMailAsync;(System.String,System.String,System.String,System.String,System.Threading.CancellationToken);;Argument[4];ReturnValue;generated:taint | +| System.Net.Mail;SmtpClient;false;SmtpClient;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;SmtpClient;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;SmtpClient;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;SmtpClient;false;get_PickupDirectoryLocation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;SmtpClient;false;get_TargetName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;SmtpClient;false;set_Credentials;(System.Net.ICredentialsByHost);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;set_Host;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;set_PickupDirectoryLocation;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpClient;false;set_TargetName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Mail;SmtpFailedRecipientException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Mail;SmtpFailedRecipientException;false;SmtpFailedRecipientException;(System.Net.Mail.SmtpStatusCode,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpFailedRecipientException;false;SmtpFailedRecipientException;(System.Net.Mail.SmtpStatusCode,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpFailedRecipientException;false;SmtpFailedRecipientException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpFailedRecipientException;false;SmtpFailedRecipientException;(System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpFailedRecipientException;false;get_FailedRecipient;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mail;SmtpFailedRecipientsException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Mail;SmtpFailedRecipientsException;false;SmtpFailedRecipientsException;(System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpFailedRecipientsException;false;SmtpFailedRecipientsException;(System.String,System.Net.Mail.SmtpFailedRecipientException[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Net.Mail;SmtpFailedRecipientsException;false;get_InnerExceptions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentDisposition;false;ContentDisposition;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mime;ContentDisposition;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentDisposition;false;get_DispositionType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentDisposition;false;set_DispositionType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mime;ContentType;false;ContentType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Mime;ContentType;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentType;false;get_Boundary;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentType;false;get_CharSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentType;false;get_MediaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentType;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentType;false;get_Parameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Mime;ContentType;false;set_MediaType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.NetworkInformation;GatewayIPAddressInformationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.NetworkInformation;IPAddressInformationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.NetworkInformation;MulticastIPAddressInformationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.NetworkInformation;PhysicalAddress;false;PhysicalAddress;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.NetworkInformation;UnicastIPAddressInformationCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;AuthenticatedStream;false;AuthenticatedStream;(System.IO.Stream,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Security;AuthenticatedStream;false;DisposeAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;AuthenticatedStream;false;get_InnerStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClient;(System.Net.NetworkCredential,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ChannelBinding,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsClientAsync;(System.Net.NetworkCredential,System.String,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsServer;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsServer;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsServerAsync;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;AuthenticateAsServerAsync;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Security;NegotiateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Security;NegotiateStream;false;get_RemoteIdentity;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslApplicationProtocol;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslApplicationProtocol;false;get_Protocol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Security;SslStream;false;Write;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Security;SslStream;false;get_LocalCertificate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslStream;false;get_NegotiatedApplicationProtocol;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslStream;false;get_RemoteCertificate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslStream;false;get_TransportContext;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Security;SslStreamCertificateContext;false;Create;(System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;IPPacketInformation;false;get_Address;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;IPv6MulticastOption;false;IPv6MulticastOption;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;IPv6MulticastOption;false;IPv6MulticastOption;(System.Net.IPAddress,System.Int64);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;IPv6MulticastOption;false;get_Group;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;IPv6MulticastOption;false;set_Group;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;MulticastOption;false;MulticastOption;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;MulticastOption;false;MulticastOption;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;MulticastOption;false;MulticastOption;(System.Net.IPAddress,System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;MulticastOption;false;MulticastOption;(System.Net.IPAddress,System.Net.IPAddress);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Sockets;MulticastOption;false;get_Group;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;MulticastOption;false;get_LocalAddress;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;MulticastOption;false;set_Group;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;MulticastOption;false;set_LocalAddress;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;NetworkStream;false;NetworkStream;(System.Net.Sockets.Socket,System.IO.FileAccess,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Sockets;NetworkStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Sockets;NetworkStream;false;get_Socket;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SafeSocketHandle;false;SafeSocketHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;Accept;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;AcceptAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;Bind;(System.Net.EndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;Connect;(System.Net.EndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;Connect;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;Connect;(System.Net.IPAddress[],System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ConnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;DisconnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;EndAccept;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;ReceiveAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[4];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[4];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Net.EndPoint);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Net.EndPoint);;Argument[1];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFrom;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;ReceiveFromAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);;Argument[4];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;ReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);;Argument[4];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;ReceiveMessageFromAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;SendAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;SendPacketsAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;SendTo;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[4];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;SendTo;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;SendTo;(System.Byte[],System.Net.EndPoint);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;SendTo;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;SendToAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;Socket;false;SendToAsync;(System.Net.Sockets.SocketAsyncEventArgs);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net.Sockets;Socket;false;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;get_LocalEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;get_RemoteEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;Socket;false;get_SafeHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;SetBuffer;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;SetBuffer;(System.Memory);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_AcceptSocket;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_BufferList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_ConnectByNameError;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_ConnectSocket;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_MemoryBuffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_ReceiveMessageFromPacketInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_RemoteEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_SendPacketsElements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;get_UserToken;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;set_AcceptSocket;(System.Net.Sockets.Socket);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;set_BufferList;(System.Collections.Generic.IList>);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;set_RemoteEndPoint;(System.Net.EndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;set_SendPacketsElements;(System.Net.Sockets.SendPacketsElement[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketAsyncEventArgs;false;set_UserToken;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;SocketException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;AcceptAsync;(System.Net.Sockets.Socket,System.Net.Sockets.Socket);;Argument[1];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.EndPoint);;Argument[1];Argument[0];generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[1];Argument[0];generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.EndPoint,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.IPAddress,System.Int32);;Argument[1];Argument[0];generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.IPAddress,System.Int32,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.Net.IPAddress,System.Int32,System.Threading.CancellationToken);;Argument[1];Argument[0];generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ConnectAsync;(System.Net.Sockets.Socket,System.String,System.Int32,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ReceiveAsync;(System.Net.Sockets.Socket,System.Memory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ReceiveAsync;(System.Net.Sockets.Socket,System.Memory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ReceiveAsync;(System.Net.Sockets.Socket,System.Memory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ReceiveFromAsync;(System.Net.Sockets.Socket,System.ArraySegment,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;ReceiveMessageFromAsync;(System.Net.Sockets.Socket,System.ArraySegment,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;SendAsync;(System.Net.Sockets.Socket,System.ReadOnlyMemory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;SendAsync;(System.Net.Sockets.Socket,System.ReadOnlyMemory,System.Net.Sockets.SocketFlags,System.Threading.CancellationToken);;Argument[3];ReturnValue;generated:taint | +| System.Net.Sockets;SocketTaskExtensions;false;SendToAsync;(System.Net.Sockets.Socket,System.ArraySegment,System.Net.Sockets.SocketFlags,System.Net.EndPoint);;Argument[3];Argument[0];generated:taint | +| System.Net.Sockets;TcpClient;false;Connect;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;TcpClient;false;GetStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;TcpClient;false;TcpClient;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;TcpClient;false;get_Client;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;TcpClient;false;set_Client;(System.Net.Sockets.Socket);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;TcpListener;false;AcceptSocket;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;TcpListener;false;AcceptTcpClient;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;TcpListener;false;EndAcceptSocket;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;TcpListener;false;EndAcceptTcpClient;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net.Sockets;TcpListener;false;TcpListener;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;TcpListener;false;TcpListener;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;TcpListener;false;get_LocalEndpoint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;TcpListener;false;get_Server;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;UdpClient;false;Connect;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpClient;false;EndReceive;(System.IAsyncResult,System.Net.IPEndPoint);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;UdpClient;false;Receive;(System.Net.IPEndPoint);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;UdpClient;false;Send;(System.Byte[],System.Int32,System.Net.IPEndPoint);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpClient;false;SendAsync;(System.Byte[],System.Int32,System.Net.IPEndPoint);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpClient;false;UdpClient;(System.Net.IPEndPoint);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpClient;false;get_Client;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;UdpClient;false;set_Client;(System.Net.Sockets.Socket);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpReceiveResult;false;UdpReceiveResult;(System.Byte[],System.Net.IPEndPoint);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpReceiveResult;false;UdpReceiveResult;(System.Byte[],System.Net.IPEndPoint);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net.Sockets;UdpReceiveResult;false;get_Buffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.Sockets;UdpReceiveResult;false;get_RemoteEndPoint;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;SetBuffer;(System.Int32,System.Int32,System.ArraySegment);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;get_Cookies;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;get_KeepAliveInterval;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;get_Proxy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;get_RemoteCertificateValidationCallback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;set_ClientCertificates;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;set_Cookies;(System.Net.CookieContainer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;set_KeepAliveInterval;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.WebSockets;ClientWebSocketOptions;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_CookieCollection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_Origin;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_SecWebSocketKey;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_SecWebSocketProtocols;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_SecWebSocketVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_User;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;HttpListenerWebSocketContext;false;get_WebSocket;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net.WebSockets;WebSocket;false;CreateClientWebSocket;(System.IO.Stream,System.String,System.Int32,System.Int32,System.TimeSpan,System.Boolean,System.ArraySegment);;Argument[0];ReturnValue;generated:taint | +| System.Net.WebSockets;WebSocket;false;CreateClientWebSocket;(System.IO.Stream,System.String,System.Int32,System.Int32,System.TimeSpan,System.Boolean,System.ArraySegment);;Argument[1];ReturnValue;generated:taint | +| System.Net.WebSockets;WebSocket;false;CreateFromStream;(System.IO.Stream,System.Boolean,System.String,System.TimeSpan);;Argument[0];ReturnValue;generated:taint | +| System.Net.WebSockets;WebSocket;false;CreateFromStream;(System.IO.Stream,System.Boolean,System.String,System.TimeSpan);;Argument[2];ReturnValue;generated:taint | +| System.Net.WebSockets;WebSocketException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net;Authorization;false;get_ProtectionRealm;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Authorization;false;set_ProtectionRealm;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;Cookie;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;Cookie;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;Cookie;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;Cookie;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_Comment;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_CommentUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_Domain;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_Expires;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_Path;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_Port;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Cookie;false;get_TimeStamp;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Net;Cookie;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System.Net;Cookie;false;set_Comment;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_CommentUri;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_Domain;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_Expires;(System.DateTime);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_Path;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_Port;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;Cookie;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Net;CookieCollection;false;Add;(System.Net.CookieCollection);;Argument[0];Argument[Qualifier].Element;value | +| System.Net;CookieCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;CookieCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;CookieCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Net;CookieException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net;CredentialCache;false;GetCredential;(System.Uri,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;Dns;false;EndGetHostAddresses;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;Dns;false;EndGetHostByName;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;Dns;false;EndGetHostEntry;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;Dns;false;EndResolve;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;DnsEndPoint;false;DnsEndPoint;(System.String,System.Int32,System.Net.Sockets.AddressFamily);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;DnsEndPoint;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;DnsEndPoint;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;DownloadDataCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;DownloadStringCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;EndGetRequestStream;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;EndGetResponse;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;GetRequestStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;GetResponse;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebRequest;false;set_Method;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;FileWebResponse;false;GetResponseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebResponse;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FileWebResponse;false;get_ResponseUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;EndGetRequestStream;(System.IAsyncResult);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;EndGetResponse;(System.IAsyncResult);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;GetRequestStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;GetResponse;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_ClientCertificates;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_ConnectionGroupName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_RenameTo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebRequest;false;set_ClientCertificates;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;FtpWebRequest;false;set_ConnectionGroupName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;FtpWebRequest;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;FtpWebRequest;false;set_Headers;(System.Net.WebHeaderCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;FtpWebRequest;false;set_RenameTo;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;FtpWebResponse;false;GetResponseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_BannerMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_ExitMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_LastModified;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_ResponseUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_StatusDescription;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;FtpWebResponse;false;get_WelcomeMessage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_AuthenticationSchemeSelectorDelegate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_DefaultServiceNames;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_ExtendedProtectionPolicy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_ExtendedProtectionSelectorDelegate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_Prefixes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_Realm;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;get_TimeoutManager;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListener;false;set_ExtendedProtectionPolicy;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpListener;false;set_Realm;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpListenerContext;false;get_Response;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerContext;false;get_User;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Net;HttpListenerPrefixCollection;false;CopyTo;(System.Array,System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Net;HttpListenerRequest;false;EndGetClientCertificate;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_Cookies;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_HttpMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_InputStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_ProtocolVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_RawUrl;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_Url;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_UrlReferrer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_UserAgent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerRequest;false;get_UserHostName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;AppendCookie;(System.Net.Cookie);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpListenerResponse;false;Close;(System.Byte[],System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;HttpListenerResponse;false;CopyFrom;(System.Net.HttpListenerResponse);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpListenerResponse;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;get_Cookies;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;get_OutputStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;get_ProtocolVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;get_RedirectLocation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;get_StatusDescription;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerResponse;false;set_Cookies;(System.Net.CookieCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;HttpListenerResponse;false;set_StatusDescription;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpListenerTimeoutManager;false;get_DrainEntityBody;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerTimeoutManager;false;get_IdleConnection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpListenerTimeoutManager;false;set_DrainEntityBody;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpListenerTimeoutManager;false;set_IdleConnection;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpWebRequest;false;EndGetRequestStream;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;EndGetRequestStream;(System.IAsyncResult,System.Net.TransportContext);;Argument[0];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;EndGetResponse;(System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;GetRequestStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;GetRequestStream;(System.Net.TransportContext);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;GetResponse;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Accept;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Address;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Connection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_ContentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_ContinueDelegate;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_CookieContainer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Expect;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Proxy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_Referer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_RequestUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_TransferEncoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;get_UserAgent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebRequest;false;set_ClientCertificates;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;HttpWebRequest;false;set_CookieContainer;(System.Net.CookieContainer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpWebRequest;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpWebRequest;false;set_Host;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpWebRequest;false;set_Method;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpWebRequest;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;HttpWebResponse;false;GetResponseHeader;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebResponse;false;get_CharacterSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebResponse;false;get_Cookies;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebResponse;false;get_Headers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebResponse;false;get_Server;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebResponse;false;get_StatusDescription;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;HttpWebResponse;false;set_Cookies;(System.Net.CookieCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;IPAddress;false;MapToIPv4;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Net;IPAddress;false;MapToIPv6;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Net;IPAddress;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;IPEndPoint;false;IPEndPoint;(System.Net.IPAddress,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;IPEndPoint;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;IPEndPoint;false;get_Address;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;IPEndPoint;false;set_Address;(System.Net.IPAddress);;Argument[0];Argument[Qualifier];generated:taint | | System.Net;IPHostEntry;false;get_Aliases;();;Argument[Qualifier];ReturnValue;taint | | System.Net;IPHostEntry;false;get_HostName;();;Argument[Qualifier];ReturnValue;taint | +| System.Net;NetworkCredential;false;GetCredential;(System.String,System.Int32,System.String);;Argument[Qualifier];ReturnValue;generated:value | +| System.Net;NetworkCredential;false;GetCredential;(System.Uri,System.String);;Argument[Qualifier];ReturnValue;generated:value | +| System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.Security.SecureString,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.Security.SecureString,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;NetworkCredential;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;get_Domain;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;NetworkCredential;false;get_Password;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;NetworkCredential;false;get_UserName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;NetworkCredential;false;set_Domain;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;set_Password;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;NetworkCredential;false;set_UserName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;OpenReadCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;OpenWriteCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;ProtocolViolationException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net;UploadDataCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;UploadFileCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;UploadStringCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;UploadValuesCompletedEventArgs;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;DownloadData;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadData;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadDataAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadDataAsync;(System.Uri,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadDataTaskAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadDataTaskAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadFile;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadFile;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadFileAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadFileAsync;(System.Uri,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadFileTaskAsync;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadFileTaskAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadString;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadString;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadStringAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadStringAsync;(System.Uri,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadStringTaskAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;DownloadStringTaskAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;GetWebRequest;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;GetWebRequest;(System.Uri);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest,System.IAsyncResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest,System.IAsyncResult);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest,System.IAsyncResult);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;GetWebResponse;(System.Net.WebRequest,System.IAsyncResult);;Argument[1];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenRead;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenRead;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenRead;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenRead;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenRead;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenRead;(System.Uri);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenReadAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenReadAsync;(System.Uri,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenReadTaskAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenReadTaskAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWrite;(System.Uri,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;OpenWriteAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteAsync;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteAsync;(System.Uri,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteAsync;(System.Uri,System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteTaskAsync;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteTaskAsync;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteTaskAsync;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteTaskAsync;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteTaskAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;OpenWriteTaskAsync;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadData;(System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadData;(System.String,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadData;(System.String,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadData;(System.Uri,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadData;(System.Uri,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadData;(System.Uri,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.String,System.Byte[],System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataAsync;(System.Uri,System.String,System.Byte[],System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataTaskAsync;(System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataTaskAsync;(System.String,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataTaskAsync;(System.String,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataTaskAsync;(System.Uri,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataTaskAsync;(System.Uri,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadDataTaskAsync;(System.Uri,System.String,System.Byte[]);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFile;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFile;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFile;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFile;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFile;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFile;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileAsync;(System.Uri,System.String,System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileTaskAsync;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileTaskAsync;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileTaskAsync;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileTaskAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileTaskAsync;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadFileTaskAsync;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadString;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadString;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadString;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadString;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadString;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadString;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String,System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringAsync;(System.Uri,System.String,System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringTaskAsync;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringTaskAsync;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringTaskAsync;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringTaskAsync;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringTaskAsync;(System.Uri,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadStringTaskAsync;(System.Uri,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValues;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValues;(System.String,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValues;(System.String,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValues;(System.Uri,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValues;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValues;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesTaskAsync;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesTaskAsync;(System.String,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesTaskAsync;(System.String,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesTaskAsync;(System.Uri,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesTaskAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;UploadValuesTaskAsync;(System.Uri,System.String,System.Collections.Specialized.NameValueCollection);;Argument[1];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;get_BaseAddress;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;get_Credentials;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;get_Proxy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;get_ResponseHeaders;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebClient;false;set_BaseAddress;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;set_Encoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;set_Headers;(System.Net.WebHeaderCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Net;WebClient;false;set_QueryString;(System.Collections.Specialized.NameValueCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Net;WebException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Net;WebException;false;WebException;(System.String,System.Exception,System.Net.WebExceptionStatus,System.Net.WebResponse);;Argument[3];Argument[Qualifier];generated:taint | +| System.Net;WebException;false;get_Response;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Net;WebHeaderCollection;false;Add;(System.String);;Argument[0];Argument[Qualifier].Element;value | +| System.Net;WebHeaderCollection;false;ToByteArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebHeaderCollection;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebHeaderCollection;false;get_AllKeys;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebHeaderCollection;false;get_Item;(System.Net.HttpRequestHeader);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebHeaderCollection;false;get_Item;(System.Net.HttpResponseHeader);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebProxy;false;GetProxy;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebProxy;false;get_BypassArrayList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebProxy;false;get_BypassList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Net;WebRequest;false;Create;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebRequest;false;Create;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebRequest;false;CreateDefault;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebRequest;false;CreateHttp;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebRequest;false;CreateHttp;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebUtility;false;HtmlDecode;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Net;WebUtility;false;HtmlDecode;(System.String,System.IO.TextWriter);;Argument[0];Argument[1];generated:taint | | System.Net;WebUtility;false;HtmlEncode;(System.String);;Argument[0];ReturnValue;taint | | System.Net;WebUtility;false;HtmlEncode;(System.String,System.IO.TextWriter);;Argument[0];ReturnValue;taint | +| System.Net;WebUtility;false;UrlDecode;(System.String);;Argument[0];ReturnValue;generated:taint | | System.Net;WebUtility;false;UrlEncode;(System.String);;Argument[0];ReturnValue;taint | +| System.Numerics;BigInteger;false;Abs;(System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;DivRem;(System.Numerics.BigInteger,System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Max;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Max;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[1];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Min;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Min;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[1];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Negate;(System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Pow;(System.Numerics.BigInteger,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;BigInteger;false;Remainder;(System.Numerics.BigInteger,System.Numerics.BigInteger);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Complex;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Complex;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Add;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Lerp;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4,System.Single);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Multiply;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Multiply;(System.Numerics.Matrix4x4,System.Single);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Negate;(System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Subtract;(System.Numerics.Matrix4x4,System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Matrix4x4;false;Transpose;(System.Numerics.Matrix4x4);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Plane;false;Normalize;(System.Numerics.Plane);;Argument[0];ReturnValue;generated:taint | +| System.Numerics;Plane;false;Plane;(System.Numerics.Vector3,System.Single);;Argument[0];Argument[Qualifier];generated:taint | +| System.Numerics;Plane;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Numerics;Vector2;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System.Numerics;Vector3;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System.Numerics;Vector4;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System.Numerics;Vector;false;Abs<>;(System.Numerics.Vector);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;DefineDynamicAssembly;(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;DefineDynamicAssembly;(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess,System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;DefineDynamicAssembly;(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess,System.Collections.Generic.IEnumerable);;Argument[2].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;DefineDynamicModule;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;GetDynamicModule;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;GetModule;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;AssemblyBuilder;false;get_ManifestModule;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;GetILGenerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;GetILGenerator;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;GetParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ConstructorBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[]);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[4].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;CustomAttributeBuilder;false;CustomAttributeBuilder;(System.Reflection.ConstructorInfo,System.Object[],System.Reflection.PropertyInfo[],System.Object[],System.Reflection.FieldInfo[],System.Object[]);;Argument[5].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;DynamicILInfo;false;get_DynamicMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;CreateDelegate;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;GetBaseDefinition;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Emit;DynamicMethod;false;GetDynamicILInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;GetILGenerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;GetILGenerator;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;GetParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;get_MethodHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;get_ReturnParameter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;DynamicMethod;false;get_ReturnType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;CreateTypeInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;DefineLiteral;(System.String,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;DefineLiteral;(System.String,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;DefineLiteral;(System.String,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetConstructorImpl;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetConstructors;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetEnumUnderlyingType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetEvent;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetEvents;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetField;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetFields;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetInterfaceMap;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetInterfaceMap;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetMember;(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetMembers;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetMethodImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;GetProperties;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_UnderlyingField;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EnumBuilder;false;get_UnderlyingSystemType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;EventBuilder;false;AddOtherMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;EventBuilder;false;SetAddOnMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;EventBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;EventBuilder;false;SetRaiseMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;EventBuilder;false;SetRemoveOnMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;FieldBuilder;false;SetConstant;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;FieldBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;FieldBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;FieldBuilder;false;get_FieldType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;FieldBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;FieldBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;SetBaseTypeConstraint;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;SetInterfaceConstraints;(System.Type[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_DeclaringMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;GenericTypeParameterBuilder;false;get_UnderlyingSystemType;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Emit;ILGenerator;false;DeclareLocal;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ILGenerator;false;DeclareLocal;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ILGenerator;false;DeclareLocal;(System.Type,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ILGenerator;false;DeclareLocal;(System.Type,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;LocalBuilder;false;get_LocalType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;DefineGenericParameters;(System.String[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;DefineGenericParameters;(System.String[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;DefineParameter;(System.Int32,System.Reflection.ParameterAttributes,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;GetBaseDefinition;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Emit;MethodBuilder;false;GetGenericArguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;GetGenericMethodDefinition;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Emit;MethodBuilder;false;GetILGenerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;GetILGenerator;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;GetParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;MakeGenericMethod;(System.Type[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;MakeGenericMethod;(System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetReturnType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;SetSignature;(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[5].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Emit;MethodBuilder;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;get_ReturnParameter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;MethodBuilder;false;get_ReturnType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineEnum;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineEnum;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineEnum;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[5].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[7].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[8].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineGlobalMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineInitializedData;(System.String,System.Byte[],System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineInitializedData;(System.String,System.Byte[],System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineUninitializedData;(System.String,System.Int32,System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;DefineUninitializedData;(System.String,System.Int32,System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetArrayMethod;(System.Type,System.String,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetArrayMethod;(System.Type,System.String,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetArrayMethod;(System.Type,System.String,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetField;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetFields;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetMethods;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;GetType;(System.String,System.Boolean,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;get_Assembly;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;get_FullyQualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ModuleBuilder;false;get_ScopeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;ParameterBuilder;false;SetConstant;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;ParameterBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;ParameterBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;GetGetMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;GetSetMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;SetConstant;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;SetGetMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;SetSetMethod;(System.Reflection.Emit.MethodBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;get_PropertyType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;PropertyBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetFieldSigHelper;(System.Reflection.Module);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetLocalVarSigHelper;(System.Reflection.Module);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.CallingConventions,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Reflection.CallingConventions,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Reflection.CallingConventions,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Type,System.Type[]);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;SignatureHelper;false;GetMethodSigHelper;(System.Reflection.Module,System.Type,System.Type[]);;Argument[2].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;AddInterfaceImplementation;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;TypeBuilder;false;CreateType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;CreateTypeInfo;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Emit;TypeBuilder;false;DefineConstructor;(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineConstructor;(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][]);;Argument[3].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineConstructor;(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineConstructor;(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineDefaultConstructor;(System.Reflection.MethodAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineEvent;(System.String,System.Reflection.EventAttributes,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineEvent;(System.String,System.Reflection.EventAttributes,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineEvent;(System.String,System.Reflection.EventAttributes,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Reflection.FieldAttributes);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Reflection.FieldAttributes);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[2].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[3].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineField;(System.String,System.Type,System.Type[],System.Type[],System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineGenericParameters;(System.String[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineGenericParameters;(System.String[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineInitializedData;(System.String,System.Byte[],System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineInitializedData;(System.String,System.Byte[],System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[5].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[7].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[8].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineMethod;(System.String,System.Reflection.MethodAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Reflection.Emit.PackingSize,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineNestedType;(System.String,System.Reflection.TypeAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefinePInvokeMethod;(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[3];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[5].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[7].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[8].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[]);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[2];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[3].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[4].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[6].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[7].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineProperty;(System.String,System.Reflection.PropertyAttributes,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineTypeInitializer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineUninitializedData;(System.String,System.Int32,System.Reflection.FieldAttributes);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;DefineUninitializedData;(System.String,System.Int32,System.Reflection.FieldAttributes);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetConstructor;(System.Type,System.Reflection.ConstructorInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetConstructor;(System.Type,System.Reflection.ConstructorInfo);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetConstructorImpl;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetConstructors;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetEvent;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetEvents;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetField;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetField;(System.Type,System.Reflection.FieldInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetField;(System.Type,System.Reflection.FieldInfo);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetFields;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetGenericArguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetGenericTypeDefinition;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Emit;TypeBuilder;false;GetInterface;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetInterfaceMap;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetInterfaceMap;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetMember;(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetMembers;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetMethod;(System.Type,System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetMethod;(System.Type,System.Reflection.MethodInfo);;Argument[1];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetMethodImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetNestedType;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;GetProperties;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;MakeGenericType;(System.Type[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;MakeGenericType;(System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;SetCustomAttribute;(System.Reflection.Emit.CustomAttributeBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;TypeBuilder;false;SetParent;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_Assembly;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Emit;TypeBuilder;false;get_UnderlyingSystemType;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata.Ecma335;CustomModifiersEncoder;false;AddModifier;(System.Reflection.Metadata.EntityHandle,System.Boolean);;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;Add;(System.Reflection.Metadata.ExceptionRegionKind,System.Int32,System.Int32,System.Int32,System.Int32,System.Reflection.Metadata.EntityHandle,System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;AddCatch;(System.Int32,System.Int32,System.Int32,System.Int32,System.Reflection.Metadata.EntityHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;AddFault;(System.Int32,System.Int32,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;AddFilter;(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata.Ecma335;ExceptionRegionEncoder;false;AddFinally;(System.Int32,System.Int32,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddAssembly;(System.Reflection.Metadata.StringHandle,System.Version,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.BlobHandle,System.Reflection.AssemblyFlags,System.Reflection.AssemblyHashAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddAssembly;(System.Reflection.Metadata.StringHandle,System.Version,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.BlobHandle,System.Reflection.AssemblyFlags,System.Reflection.AssemblyHashAlgorithm);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddAssembly;(System.Reflection.Metadata.StringHandle,System.Version,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.BlobHandle,System.Reflection.AssemblyFlags,System.Reflection.AssemblyHashAlgorithm);;Argument[2];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddAssembly;(System.Reflection.Metadata.StringHandle,System.Version,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.BlobHandle,System.Reflection.AssemblyFlags,System.Reflection.AssemblyHashAlgorithm);;Argument[3];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddModule;(System.Int32,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddModule;(System.Int32,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle);;Argument[2];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddModule;(System.Int32,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle);;Argument[3];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataBuilder;false;AddModule;(System.Int32,System.Reflection.Metadata.StringHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle,System.Reflection.Metadata.GuidHandle);;Argument[4];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataRootBuilder;false;MetadataRootBuilder;(System.Reflection.Metadata.Ecma335.MetadataBuilder,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;MetadataRootBuilder;false;get_Sizes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata.Ecma335;PermissionSetEncoder;false;AddPermission;(System.String,System.Collections.Immutable.ImmutableArray);;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata.Ecma335;PermissionSetEncoder;false;AddPermission;(System.String,System.Reflection.Metadata.BlobBuilder);;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata.Ecma335;PortablePdbBuilder;false;Serialize;(System.Reflection.Metadata.BlobBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;SignatureDecoder<,>;false;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;SignatureDecoder<,>;false;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;SignatureDecoder<,>;false;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);;Argument[2];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;false;Array;(System.Reflection.Metadata.Ecma335.SignatureTypeEncoder,System.Reflection.Metadata.Ecma335.ArrayShapeEncoder);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;false;Pointer;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;false;SZArray;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata;AssemblyDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;AssemblyDefinition;false;GetDeclarativeSecurityAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;AssemblyFile;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;AssemblyReference;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;AssemblyReferenceHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;Blob;false;GetBytes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobBuilder+Blobs;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection.Metadata;BlobBuilder;false;GetBlobs;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobBuilder;false;LinkPrefix;(System.Reflection.Metadata.BlobBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata;BlobBuilder;false;LinkPrefix;(System.Reflection.Metadata.BlobBuilder);;Argument[Qualifier];Argument[0];generated:taint | +| System.Reflection.Metadata;BlobBuilder;false;LinkSuffix;(System.Reflection.Metadata.BlobBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata;BlobBuilder;false;LinkSuffix;(System.Reflection.Metadata.BlobBuilder);;Argument[Qualifier];Argument[0];generated:taint | +| System.Reflection.Metadata;BlobBuilder;false;ReserveBytes;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobBuilder;false;TryWriteBytes;(System.IO.Stream,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata;BlobReader;false;ReadConstant;(System.Reflection.Metadata.ConstantTypeCode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobReader;false;ReadSerializedString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobReader;false;ReadUTF8;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobReader;false;ReadUTF16;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobReader;false;get_CurrentPointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobReader;false;get_StartPointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;BlobWriter;false;BlobWriter;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Reflection.Metadata;BlobWriter;false;WriteBytes;(System.IO.Stream,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.Metadata;BlobWriter;false;get_Blob;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;CustomAttributeHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;CustomDebugInformationHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;DeclarativeSecurityAttributeHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;DocumentHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;EventAccessors;false;get_Others;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;EventDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;EventDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;ExportedType;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;FieldDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;FieldDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;GenericParameter;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;GenericParameterConstraint;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;ImportDefinitionCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;ImportDefinitionCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;ImportScopeCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;InterfaceImplementation;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;InterfaceImplementationHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;LocalConstantHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;LocalScope;false;GetChildren;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;LocalScope;false;GetLocalConstants;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;LocalScope;false;GetLocalVariables;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;LocalScopeHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;LocalVariableHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;ManifestResource;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MemberReference;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetAssemblyDefinition;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetAssemblyFile;(System.Reflection.Metadata.AssemblyFileHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetAssemblyReference;(System.Reflection.Metadata.AssemblyReferenceHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetConstant;(System.Reflection.Metadata.ConstantHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetCustomAttribute;(System.Reflection.Metadata.CustomAttributeHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetCustomAttributes;(System.Reflection.Metadata.EntityHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetCustomDebugInformation;(System.Reflection.Metadata.CustomDebugInformationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetCustomDebugInformation;(System.Reflection.Metadata.EntityHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetDeclarativeSecurityAttribute;(System.Reflection.Metadata.DeclarativeSecurityAttributeHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetDocument;(System.Reflection.Metadata.DocumentHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetEventDefinition;(System.Reflection.Metadata.EventDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetExportedType;(System.Reflection.Metadata.ExportedTypeHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetFieldDefinition;(System.Reflection.Metadata.FieldDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetGenericParameter;(System.Reflection.Metadata.GenericParameterHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetGenericParameterConstraint;(System.Reflection.Metadata.GenericParameterConstraintHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetImportScope;(System.Reflection.Metadata.ImportScopeHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetInterfaceImplementation;(System.Reflection.Metadata.InterfaceImplementationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetLocalConstant;(System.Reflection.Metadata.LocalConstantHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetLocalScope;(System.Reflection.Metadata.LocalScopeHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetLocalScopes;(System.Reflection.Metadata.MethodDebugInformationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetLocalScopes;(System.Reflection.Metadata.MethodDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetLocalVariable;(System.Reflection.Metadata.LocalVariableHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetManifestResource;(System.Reflection.Metadata.ManifestResourceHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetMemberReference;(System.Reflection.Metadata.MemberReferenceHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetMethodDebugInformation;(System.Reflection.Metadata.MethodDebugInformationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetMethodDebugInformation;(System.Reflection.Metadata.MethodDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetMethodDefinition;(System.Reflection.Metadata.MethodDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetMethodImplementation;(System.Reflection.Metadata.MethodImplementationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetMethodSpecification;(System.Reflection.Metadata.MethodSpecificationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetModuleDefinition;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetModuleReference;(System.Reflection.Metadata.ModuleReferenceHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetNamespaceDefinitionRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetParameter;(System.Reflection.Metadata.ParameterHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetPropertyDefinition;(System.Reflection.Metadata.PropertyDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetStandaloneSignature;(System.Reflection.Metadata.StandaloneSignatureHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetTypeDefinition;(System.Reflection.Metadata.TypeDefinitionHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetTypeReference;(System.Reflection.Metadata.TypeReferenceHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;GetTypeSpecification;(System.Reflection.Metadata.TypeSpecificationHandle);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_AssemblyReferences;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_CustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_CustomDebugInformation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_DebugMetadataHeader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_DeclarativeSecurityAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_Documents;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_EventDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_FieldDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_ImportScopes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_LocalConstants;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_LocalScopes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_LocalVariables;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_MetadataPointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_MetadataVersion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_MethodDebugInformation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_MethodDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_PropertyDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReader;false;get_StringComparer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;FromMetadataImage;(System.Byte*,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;FromMetadataImage;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;FromMetadataStream;(System.IO.Stream,System.Reflection.Metadata.MetadataStreamOptions,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;FromPortablePdbImage;(System.Byte*,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;FromPortablePdbImage;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;FromPortablePdbStream;(System.IO.Stream,System.Reflection.Metadata.MetadataStreamOptions,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataReaderProvider;false;GetMetadataReader;(System.Reflection.Metadata.MetadataReaderOptions,System.Reflection.Metadata.MetadataStringDecoder);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MetadataStringDecoder;false;GetString;(System.Byte*,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodBodyBlock;false;Create;(System.Reflection.Metadata.BlobReader);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodBodyBlock;false;GetILReader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodBodyBlock;false;get_ExceptionRegions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodBodyBlock;false;get_LocalSignature;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodDebugInformationHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodDefinition;false;GetDeclarativeSecurityAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodDefinition;false;GetParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodImplementation;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodImport;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodImport;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;MethodSpecification;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;ModuleDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;ModuleReference;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;NamespaceDefinition;false;get_ExportedTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;NamespaceDefinition;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;NamespaceDefinition;false;get_NamespaceDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;NamespaceDefinition;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;NamespaceDefinition;false;get_TypeDefinitions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;PEReaderExtensions;false;GetMetadataReader;(System.Reflection.PortableExecutable.PEReader);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;PEReaderExtensions;false;GetMetadataReader;(System.Reflection.PortableExecutable.PEReader,System.Reflection.Metadata.MetadataReaderOptions);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;PEReaderExtensions;false;GetMetadataReader;(System.Reflection.PortableExecutable.PEReader,System.Reflection.Metadata.MetadataReaderOptions,System.Reflection.Metadata.MetadataStringDecoder);;Argument[0];ReturnValue;generated:taint | +| System.Reflection.Metadata;Parameter;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;ParameterHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;PropertyAccessors;false;get_Others;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;PropertyDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;PropertyDefinitionHandleCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;SequencePointCollection+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;SequencePointCollection;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;StandaloneSignature;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetDeclarativeSecurityAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetFields;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetInterfaceImplementations;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetMethods;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeDefinition;false;GetProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.Metadata;TypeSpecification;false;GetCustomAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;ManagedPEBuilder;false;GetDirectories;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;ManagedPEBuilder;false;SerializeSection;(System.String,System.Reflection.PortableExecutable.SectionLocation);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEBuilder+Section;false;Section;(System.String,System.Reflection.PortableExecutable.SectionCharacteristics);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.PortableExecutable;PEBuilder;false;GetSections;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEBuilder;false;Serialize;(System.Reflection.Metadata.BlobBuilder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.PortableExecutable;PEHeaders;false;get_CoffHeader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEHeaders;false;get_CorHeader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEHeaders;false;get_PEHeader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEHeaders;false;get_SectionHeaders;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEMemoryBlock;false;get_Pointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;GetEntireImage;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;GetMetadata;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;GetSectionData;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;GetSectionData;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;PEReader;(System.Byte*,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;PEReader;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;PEReader;(System.IO.Stream,System.Reflection.PortableExecutable.PEStreamOptions,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection.PortableExecutable;PEReader;false;get_PEHeaders;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Assembly;false;CreateQualifiedName;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;Assembly;false;CreateQualifiedName;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Reflection;Assembly;false;GetAssembly;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;Assembly;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Assembly;true;GetName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Assembly;true;GetType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Assembly;true;GetType;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;GetPublicKey;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;SetPublicKey;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Reflection;AssemblyName;false;SetPublicKeyToken;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Reflection;AssemblyName;false;get_CodeBase;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;get_CultureInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;get_EscapedCodeBase;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;AssemblyName;false;set_CodeBase;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;AssemblyName;false;set_CultureInfo;(System.Globalization.CultureInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;AssemblyName;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;AssemblyName;false;set_Version;(System.Version);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeData;false;get_AttributeType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;CustomAttributeNamedArgument;(System.Reflection.MemberInfo,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;CustomAttributeNamedArgument;(System.Reflection.MemberInfo,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;CustomAttributeNamedArgument;(System.Reflection.MemberInfo,System.Reflection.CustomAttributeTypedArgument);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;CustomAttributeNamedArgument;(System.Reflection.MemberInfo,System.Reflection.CustomAttributeTypedArgument);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;get_MemberInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeNamedArgument;false;get_TypedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeTypedArgument;false;CustomAttributeTypedArgument;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeTypedArgument;false;CustomAttributeTypedArgument;(System.Type,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeTypedArgument;false;CustomAttributeTypedArgument;(System.Type,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Reflection;CustomAttributeTypedArgument;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeTypedArgument;false;get_ArgumentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;CustomAttributeTypedArgument;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfo;false;GetAddMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfo;false;GetRaiseMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfo;false;GetRemoveMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfo;true;get_AddMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfo;true;get_RaiseMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfo;true;get_RemoveMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;EventInfoExtensions;false;GetAddMethod;(System.Reflection.EventInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;EventInfoExtensions;false;GetAddMethod;(System.Reflection.EventInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;EventInfoExtensions;false;GetRaiseMethod;(System.Reflection.EventInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;EventInfoExtensions;false;GetRaiseMethod;(System.Reflection.EventInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;EventInfoExtensions;false;GetRemoveMethod;(System.Reflection.EventInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;EventInfoExtensions;false;GetRemoveMethod;(System.Reflection.EventInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;ExceptionHandlingClause;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;IntrospectionExtensions;false;GetTypeInfo;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;LocalVariableInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;MethodInfo;false;CreateDelegate<>;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;MethodInfoExtensions;false;GetBaseDefinition;(System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;Module;false;GetField;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;false;GetFields;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;false;GetMethod;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;false;GetMethod;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;false;GetMethod;(System.String,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;false;GetMethods;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Module;true;GetType;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;ParameterInfo;false;GetRealObject;(System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;ParameterInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;ParameterInfo;false;get_Member;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;ParameterInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;ParameterInfo;false;get_ParameterType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;Pointer;false;Box;(System.Void*,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;Pointer;false;Unbox;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;PropertyInfo;false;GetAccessors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;PropertyInfo;false;GetGetMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;PropertyInfo;false;GetSetMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;PropertyInfo;true;get_GetMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;PropertyInfo;true;get_SetMethod;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;PropertyInfoExtensions;false;GetAccessors;(System.Reflection.PropertyInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;PropertyInfoExtensions;false;GetAccessors;(System.Reflection.PropertyInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;PropertyInfoExtensions;false;GetGetMethod;(System.Reflection.PropertyInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;PropertyInfoExtensions;false;GetGetMethod;(System.Reflection.PropertyInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;PropertyInfoExtensions;false;GetSetMethod;(System.Reflection.PropertyInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;PropertyInfoExtensions;false;GetSetMethod;(System.Reflection.PropertyInfo,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;ReflectionTypeLoadException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Reflection;ReflectionTypeLoadException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetMethodInfo;(System.Delegate);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeBaseDefinition;(System.Reflection.MethodInfo);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeEvent;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeEvents;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeField;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeFields;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeInterfaceMap;(System.Reflection.TypeInfo,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeInterfaceMap;(System.Reflection.TypeInfo,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeMethod;(System.Type,System.String,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeMethods;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeProperties;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;RuntimeReflectionExtensions;false;GetRuntimeProperty;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetConstructorImpl;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetConstructors;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetElementType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetEvent;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetEvents;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetField;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetFields;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetInterface;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetInterfaceMap;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetInterfaceMap;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetMember;(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetMembers;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetMethodImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetMethods;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetNestedType;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetNestedTypes;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetProperties;(System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;GetPropertyImpl;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;TypeDelegator;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Reflection;TypeDelegator;false;get_Assembly;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_AssemblyQualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeDelegator;false;get_UnderlyingSystemType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetConstructor;(System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetConstructors;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetConstructors;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetDefaultMembers;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetEvent;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetEvent;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetEvents;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetEvents;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetField;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetField;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetFields;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetFields;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetGenericArguments;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetInterfaces;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMember;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMember;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMembers;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMembers;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMethod;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMethod;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMethod;(System.Type,System.String,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMethods;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetMethods;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetNestedType;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetNestedTypes;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetProperties;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetProperties;(System.Type,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetProperty;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetProperty;(System.Type,System.String,System.Reflection.BindingFlags);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetProperty;(System.Type,System.String,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeExtensions;false;GetProperty;(System.Type,System.String,System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;false;GetTypeInfo;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection;TypeInfo;true;AsType;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Reflection;TypeInfo;true;GetDeclaredEvent;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;GetDeclaredField;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;GetDeclaredMethod;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;GetDeclaredNestedType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;GetDeclaredProperty;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_DeclaredConstructors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_DeclaredEvents;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_DeclaredFields;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_DeclaredMembers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_DeclaredMethods;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_DeclaredProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_GenericTypeParameters;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Reflection;TypeInfo;true;get_ImplementedInterfaces;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;MissingSatelliteAssemblyException;false;MissingSatelliteAssemblyException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Resources;MissingSatelliteAssemblyException;false;get_CultureName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceManager;false;CreateFileBasedResourceManager;(System.String,System.String,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Resources;ResourceManager;false;CreateFileBasedResourceManager;(System.String,System.String,System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Resources;ResourceManager;false;CreateFileBasedResourceManager;(System.String,System.String,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Resources;ResourceManager;false;GetResourceFileName;(System.Globalization.CultureInfo);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly);;Argument[0];Argument[Qualifier];generated:taint | +| System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly);;Argument[1];Argument[Qualifier];generated:taint | +| System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly,System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.Resources;ResourceManager;false;ResourceManager;(System.String,System.Reflection.Assembly,System.Type);;Argument[2];Argument[Qualifier];generated:taint | +| System.Resources;ResourceManager;false;ResourceManager;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Resources;ResourceManager;false;get_BaseName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceManager;false;get_ResourceSetType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceReader;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceReader;false;GetResourceData;(System.String,System.String,System.Byte[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceReader;false;ResourceReader;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Resources;ResourceSet;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Resources;ResourceSet;false;ResourceSet;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Resources;ResourceSet;false;ResourceSet;(System.Resources.IResourceReader);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Resources;ResourceWriter;false;ResourceWriter;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder<>;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder<>;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder<>;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder<>;false;AwaitOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder<>;false;AwaitUnsafeOnCompleted<,>;(TAwaiter,TStateMachine);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder<>;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;CallSite;false;get_Binder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConditionalWeakTable<,>;false;GetOrCreateValue;(TKey);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredCancelableAsyncEnumerable<>;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredCancelableAsyncEnumerable<>;false;GetAsyncEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredCancelableAsyncEnumerable<>;false;WithCancellation;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredCancelableAsyncEnumerable<>;false;WithCancellation;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredTaskAwaitable;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Runtime.CompilerServices;ConfiguredTaskAwaitable<>+ConfiguredTaskAwaiter;false;GetResult;();;Argument[Qualifier].SyntheticField[m_task_configured_task_awaitable].Property[System.Threading.Tasks.Task<>.Result];ReturnValue;value | | System.Runtime.CompilerServices;ConfiguredTaskAwaitable<>;false;GetAwaiter;();;Argument[Qualifier].SyntheticField[m_configuredTaskAwaiter];ReturnValue;value | +| System.Runtime.CompilerServices;ConfiguredValueTaskAwaitable;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredValueTaskAwaitable<>+ConfiguredValueTaskAwaiter;false;GetResult;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ConfiguredValueTaskAwaitable<>;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ContractHelper;false;RaiseContractFailedEvent;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[1];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ContractHelper;false;RaiseContractFailedEvent;(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception);;Argument[2];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;DateTimeConstantAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;DynamicAttribute;false;DynamicAttribute;(System.Boolean[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;DynamicAttribute;false;get_TransformFlags;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;FormattableStringFactory;false;Create;(System.String,System.Object[]);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;FormattableStringFactory;false;Create;(System.String,System.Object[]);;Argument[1].Element;ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;ReadOnlyCollectionBuilder;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Runtime.CompilerServices;RuntimeWrappedException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Runtime.CompilerServices;RuntimeWrappedException;false;RuntimeWrappedException;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;RuntimeWrappedException;false;get_WrappedException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;StrongBox<>;false;StrongBox;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;StrongBox<>;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;StrongBox<>;false;set_Value;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;SwitchExpressionException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Runtime.CompilerServices;SwitchExpressionException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Runtime.CompilerServices;TaskAwaiter<>;false;GetResult;();;Argument[Qualifier].SyntheticField[m_task_task_awaiter].Property[System.Threading.Tasks.Task<>.Result];ReturnValue;value | +| System.Runtime.CompilerServices;TupleElementNamesAttribute;false;TupleElementNamesAttribute;(System.String[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Runtime.CompilerServices;TupleElementNamesAttribute;false;get_TransformNames;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.CompilerServices;ValueTaskAwaiter<>;false;GetResult;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.ExceptionServices;ExceptionDispatchInfo;false;Capture;(System.Exception);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.ExceptionServices;ExceptionDispatchInfo;false;SetCurrentStackTrace;(System.Exception);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.ExceptionServices;ExceptionDispatchInfo;false;get_SourceException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ArrayWithOffset;false;ArrayWithOffset;(System.Object,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;ArrayWithOffset;false;GetArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;COMException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;GetAddMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;GetRaiseMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;GetRemoveMethod;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;get_DeclaringType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;get_Module;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;ComAwareEventInfo;false;get_ReflectedType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;CriticalHandle;false;CriticalHandle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;CriticalHandle;false;SetHandle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;ExternalException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;GCHandle;false;FromIntPtr;(System.IntPtr);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;GCHandle;false;ToIntPtr;(System.Runtime.InteropServices.GCHandle);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;HandleRef;false;HandleRef;(System.Object,System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;HandleRef;false;HandleRef;(System.Object,System.IntPtr);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;HandleRef;false;ToIntPtr;(System.Runtime.InteropServices.HandleRef);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;HandleRef;false;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;HandleRef;false;get_Wrapper;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;Marshal;false;GenerateProgIdForType;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;MemoryMarshal;false;CreateFromPinnedArray<>;(T[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Runtime.InteropServices;MemoryMarshal;false;TryGetMemoryManager<,>;(System.ReadOnlyMemory,TManager);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;MemoryMarshal;false;TryGetMemoryManager<,>;(System.ReadOnlyMemory,TManager,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;MemoryMarshal;false;TryGetString;(System.ReadOnlyMemory,System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;SafeHandle;false;DangerousGetHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.InteropServices;SafeHandle;false;SafeHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;SafeHandle;false;SetHandle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.InteropServices;SequenceMarshal;false;TryGetArray<>;(System.Buffers.ReadOnlySequence,System.ArraySegment);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;SequenceMarshal;false;TryGetReadOnlyMemory<>;(System.Buffers.ReadOnlySequence,System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.InteropServices;SequenceMarshal;false;TryGetReadOnlySequenceSegment<>;(System.Buffers.ReadOnlySequence,System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector64;false;WithElement<>;(System.Runtime.Intrinsics.Vector64,System.Int32,T);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector128;false;WithElement<>;(System.Runtime.Intrinsics.Vector128,System.Int32,T);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector128;false;WithLower<>;(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector64);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector128;false;WithUpper<>;(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector64);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector256;false;WithElement<>;(System.Runtime.Intrinsics.Vector256,System.Int32,T);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector256;false;WithLower<>;(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector128);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Intrinsics;Vector256;false;WithUpper<>;(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector128);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyDependencyResolver;false;ResolveAssemblyToPath;(System.Reflection.AssemblyName);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyDependencyResolver;false;ResolveAssemblyToPath;(System.Reflection.AssemblyName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyDependencyResolver;false;ResolveUnmanagedDllToPath;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyDependencyResolver;false;ResolveUnmanagedDllToPath;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyLoadContext;false;EnterContextualReflection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyLoadContext;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Loader;AssemblyLoadContext;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Remoting;ObjectHandle;false;ObjectHandle;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Remoting;ObjectHandle;false;Unwrap;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;BinaryFormatter;(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;BinaryFormatter;(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;get_Binder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;get_Context;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;get_SurrogateSelector;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;set_Binder;(System.Runtime.Serialization.SerializationBinder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;set_Context;(System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization.Formatters.Binary;BinaryFormatter;false;set_SurrogateSelector;(System.Runtime.Serialization.ISurrogateSelector);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization.Json;DataContractJsonSerializer;false;DataContractJsonSerializer;(System.Type,System.Runtime.Serialization.Json.DataContractJsonSerializerSettings);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization.Json;DataContractJsonSerializer;false;get_DateTimeFormat;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;DataContractJsonSerializer;false;get_KnownTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding);;Argument[1];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean);;Argument[1];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean);;Argument[1];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Runtime.Serialization.Json;JsonReaderWriterFactory;false;CreateJsonWriter;(System.IO.Stream,System.Text.Encoding,System.Boolean,System.Boolean,System.String);;Argument[4];ReturnValue;generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;get_ItemName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;get_KeyName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;get_ValueName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;set_ItemName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;set_KeyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;CollectionDataContractAttribute;false;set_ValueName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Collections.Generic.IEnumerable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Runtime.Serialization.DataContractSerializerSettings);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.String,System.String,System.Collections.Generic.IEnumerable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.String,System.String,System.Collections.Generic.IEnumerable);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.String,System.String,System.Collections.Generic.IEnumerable);;Argument[2];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.String,System.String,System.Collections.Generic.IEnumerable);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IEnumerable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IEnumerable);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IEnumerable);;Argument[2];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;DataContractSerializer;(System.Type,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Collections.Generic.IEnumerable);;Argument[3].Element;Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;ReadObject;(System.Xml.XmlDictionaryReader,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;ReadObject;(System.Xml.XmlDictionaryReader,System.Boolean,System.Runtime.Serialization.DataContractResolver);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;get_DataContractResolver;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractSerializer;false;get_KnownTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractSerializerExtensions;false;GetSerializationSurrogateProvider;(System.Runtime.Serialization.DataContractSerializer);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataContractSerializerExtensions;false;SetSerializationSurrogateProvider;(System.Runtime.Serialization.DataContractSerializer,System.Runtime.Serialization.ISerializationSurrogateProvider);;Argument[1];Argument[0];generated:taint | +| System.Runtime.Serialization;DataMemberAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;DataMemberAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DateTimeFormat;false;DateTimeFormat;(System.String,System.IFormatProvider);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DateTimeFormat;false;DateTimeFormat;(System.String,System.IFormatProvider);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;DateTimeFormat;false;get_FormatProvider;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;DateTimeFormat;false;get_FormatString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;EnumMemberAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;EnumMemberAttribute;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;ExportOptions;false;get_KnownTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterConverter;false;Convert;(System.Object,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterConverter;false;Convert;(System.Object,System.TypeCode);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterConverter;false;ToDateTime;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterConverter;false;ToString;(System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterServices;false;GetSerializableMembers;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterServices;false;GetSerializableMembers;(System.Type,System.Runtime.Serialization.StreamingContext);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterServices;false;GetSurrogateForCyclicalReference;(System.Runtime.Serialization.ISerializationSurrogate);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterServices;false;GetTypeFromAssembly;(System.Reflection.Assembly,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;FormatterServices;false;PopulateObjectMembers;(System.Object,System.Reflection.MemberInfo[],System.Object[]);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;ObjectIDGenerator;false;GetId;(System.Object,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;ObjectManager;false;GetObject;(System.Int64);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;ObjectManager;false;ObjectManager;(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;ObjectManager;false;ObjectManager;(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationEntry;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationEntry;false;get_ObjectType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationEntry;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Byte);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Char);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.DateTime);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.DateTime);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Decimal);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Double);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Int16);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Int64);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object,System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Object,System.Type);;Argument[2];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.SByte);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.Single);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.UInt16);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.UInt32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;AddValue;(System.String,System.UInt64);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;GetDateTime;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;GetString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;GetValue;(System.String,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;SerializationInfo;(System.Type,System.Runtime.Serialization.IFormatterConverter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;SerializationInfo;(System.Type,System.Runtime.Serialization.IFormatterConverter);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;SetType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;get_AssemblyName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;get_FullTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;get_ObjectType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;set_AssemblyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfo;false;set_FullTypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SerializationInfoEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfoEnumerator;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfoEnumerator;false;get_ObjectType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationInfoEnumerator;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SerializationObjectManager;false;SerializationObjectManager;(System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;StreamingContext;false;StreamingContext;(System.Runtime.Serialization.StreamingContextStates,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;StreamingContext;false;get_Context;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SurrogateSelector;false;ChainSelector;(System.Runtime.Serialization.ISurrogateSelector);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;SurrogateSelector;false;ChainSelector;(System.Runtime.Serialization.ISurrogateSelector);;Argument[Qualifier];Argument[0];generated:taint | +| System.Runtime.Serialization;SurrogateSelector;false;GetNextSelector;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;SurrogateSelector;false;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;XPathQueryGenerator;false;CreateFromDataContractSerializer;(System.Type,System.Reflection.MemberInfo[],System.Text.StringBuilder,System.Xml.XmlNamespaceManager);;Argument[2];ReturnValue;generated:taint | +| System.Runtime.Serialization;XmlObjectSerializer;true;ReadObject;(System.Xml.XmlDictionaryReader);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;XmlObjectSerializer;true;ReadObject;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;XmlObjectSerializer;true;ReadObject;(System.Xml.XmlReader,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Serialization;XmlSerializableServices;false;WriteNodes;(System.Xml.XmlWriter,System.Xml.XmlNode[]);;Argument[1].Element;Argument[0];generated:taint | +| System.Runtime.Serialization;XsdDataContractExporter;false;XsdDataContractExporter;(System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Serialization;XsdDataContractExporter;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Serialization;XsdDataContractExporter;false;set_Options;(System.Runtime.Serialization.ExportOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;FrameworkName;false;FrameworkName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;FrameworkName;false;FrameworkName;(System.String,System.Version,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;FrameworkName;false;FrameworkName;(System.String,System.Version,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;FrameworkName;false;FrameworkName;(System.String,System.Version,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;FrameworkName;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;FrameworkName;false;get_FullName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;FrameworkName;false;get_Identifier;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;FrameworkName;false;get_Profile;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;FrameworkName;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;TargetFrameworkAttribute;false;TargetFrameworkAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;TargetFrameworkAttribute;false;get_FrameworkDisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;TargetFrameworkAttribute;false;get_FrameworkName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Runtime.Versioning;TargetFrameworkAttribute;false;set_FrameworkDisplayName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Runtime.Versioning;VersioningHelper;false;MakeVersionSafeName;(System.String,System.Runtime.Versioning.ResourceScope,System.Runtime.Versioning.ResourceScope);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Versioning;VersioningHelper;false;MakeVersionSafeName;(System.String,System.Runtime.Versioning.ResourceScope,System.Runtime.Versioning.ResourceScope,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Runtime.Versioning;VersioningHelper;false;MakeVersionSafeName;(System.String,System.Runtime.Versioning.ResourceScope,System.Runtime.Versioning.ResourceScope,System.Type);;Argument[3];ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;ExtendedProtectionPolicy;(System.Security.Authentication.ExtendedProtection.PolicyEnforcement,System.Security.Authentication.ExtendedProtection.ChannelBinding);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;ExtendedProtectionPolicy;(System.Security.Authentication.ExtendedProtection.PolicyEnforcement,System.Security.Authentication.ExtendedProtection.ProtectionScenario,System.Security.Authentication.ExtendedProtection.ServiceNameCollection);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;get_CustomChannelBinding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicy;false;get_CustomServiceNames;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ExtendedProtectionPolicyTypeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ServiceNameCollection;false;Merge;(System.Collections.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ServiceNameCollection;false;Merge;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Security.Authentication.ExtendedProtection;ServiceNameCollection;false;ServiceNameCollection;(System.Collections.ICollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Claims;Claim;false;Claim;(System.IO.BinaryReader,System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;Claim;false;Claim;(System.IO.BinaryReader,System.Security.Claims.ClaimsIdentity);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Claims;Claim;false;Claim;(System.Security.Claims.Claim,System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;Claim;false;Claim;(System.Security.Claims.Claim,System.Security.Claims.ClaimsIdentity);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Claims;Claim;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;Clone;(System.Security.Claims.ClaimsIdentity);;Argument[0];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;Clone;(System.Security.Claims.ClaimsIdentity);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;WriteTo;(System.IO.BinaryWriter,System.Byte[]);;Argument[1].Element;Argument[0];generated:taint | +| System.Security.Claims;Claim;false;get_CustomSerializationData;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_Issuer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_OriginalIssuer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_Properties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_Subject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;Claim;false;get_ValueType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;AddClaim;(System.Security.Claims.Claim);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;AddClaims;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.IO.BinaryReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;ClaimsIdentity;(System.Security.Principal.IIdentity,System.Collections.Generic.IEnumerable,System.String,System.String,System.String);;Argument[4];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;CreateClaim;(System.IO.BinaryReader);;Argument[0];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;CreateClaim;(System.IO.BinaryReader);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;FindAll;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;FindFirst;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;WriteTo;(System.IO.BinaryWriter,System.Byte[]);;Argument[1].Element;Argument[0];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_Actor;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_AuthenticationType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_BootstrapContext;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_Claims;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_CustomSerializationData;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_Label;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_NameClaimType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;get_RoleClaimType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsIdentity;false;set_Actor;(System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;set_BootstrapContext;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsIdentity;false;set_Label;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;AddIdentities;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;AddIdentity;(System.Security.Claims.ClaimsIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;ClaimsPrincipal;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;ClaimsPrincipal;(System.IO.BinaryReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;ClaimsPrincipal;(System.Security.Principal.IIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;ClaimsPrincipal;(System.Security.Principal.IPrincipal);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;CreateClaimsIdentity;(System.IO.BinaryReader);;Argument[0];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;FindAll;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;FindFirst;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;WriteTo;(System.IO.BinaryWriter,System.Byte[]);;Argument[1].Element;Argument[0];generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;get_Claims;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;get_CustomSerializationData;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;get_Identities;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Claims;ClaimsPrincipal;false;get_Identity;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.Security.Cryptography.X509Certificates.X500DistinguishedName,System.Security.Cryptography.ECDsa,System.Security.Cryptography.HashAlgorithmName);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.Security.Cryptography.X509Certificates.X500DistinguishedName,System.Security.Cryptography.RSA,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.Security.Cryptography.X509Certificates.X500DistinguishedName,System.Security.Cryptography.RSA,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding);;Argument[3];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.String,System.Security.Cryptography.ECDsa,System.Security.Cryptography.HashAlgorithmName);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.String,System.Security.Cryptography.RSA,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;CertificateRequest;false;CertificateRequest;(System.String,System.Security.Cryptography.RSA,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.RSASignaturePadding);;Argument[3];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;PublicKey;false;PublicKey;(System.Security.Cryptography.Oid,System.Security.Cryptography.AsnEncodedData,System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;PublicKey;false;get_Key;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;PublicKey;false;get_Oid;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X500DistinguishedName;false;X500DistinguishedName;(System.Security.Cryptography.X509Certificates.X500DistinguishedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X500DistinguishedName;false;X500DistinguishedName;(System.String,System.Security.Cryptography.X509Certificates.X500DistinguishedNameFlags);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X500DistinguishedName;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509BasicConstraintsExtension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;ToString;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_Extensions;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_IssuerName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_NotAfter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_NotBefore;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_PrivateKey;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_PublicKey;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_SerialNumber;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_SignatureAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_SubjectName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2;false;get_Thumbprint;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;Add;(System.Security.Cryptography.X509Certificates.X509Certificate2);;Argument[0];Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;AddRange;(System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;AddRange;(System.Security.Cryptography.X509Certificates.X509Certificate2[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;Find;(System.Security.Cryptography.X509Certificates.X509FindType,System.Object,System.Boolean);;Argument[Qualifier].Element;ReturnValue;value | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Security.Cryptography.X509Certificates.X509Certificate2Enumerator.Current];value | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;Insert;(System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate2);;Argument[1];Argument[Qualifier].Element;value | +| System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;Remove;(System.Security.Cryptography.X509Certificates.X509Certificate2);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;RemoveRange;(System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;RemoveRange;(System.Security.Cryptography.X509Certificates.X509Certificate2[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;X509Certificate2Collection;(System.Security.Cryptography.X509Certificates.X509Certificate2);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;X509Certificate2Collection;(System.Security.Cryptography.X509Certificates.X509Certificate2Collection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;X509Certificate2Collection;(System.Security.Cryptography.X509Certificates.X509Certificate2[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Security.Cryptography.X509Certificates;X509Certificate2Collection;false;set_Item;(System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate2);;Argument[1];Argument[Qualifier].Element;value | +| System.Security.Cryptography.X509Certificates;X509Certificate2Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;GetCertHashString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;GetKeyAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;GetSerialNumberString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;ToString;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;get_Issuer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Certificate;false;get_Subject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509CertificateCollection+X509CertificateEnumerator;false;X509CertificateEnumerator;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509CertificateCollection+X509CertificateEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;Add;(System.Security.Cryptography.X509Certificates.X509Certificate);;Argument[0];Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;AddRange;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;AddRange;(System.Security.Cryptography.X509Certificates.X509Certificate[]);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;CopyTo;(System.Security.Cryptography.X509Certificates.X509Certificate[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Security.Cryptography.X509Certificates.X509CertificateCollection+X509CertificateEnumerator.Current];value | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;Insert;(System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate);;Argument[1];Argument[Qualifier].Element;value | +| System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;Remove;(System.Security.Cryptography.X509Certificates.X509Certificate);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;X509CertificateCollection;(System.Security.Cryptography.X509Certificates.X509CertificateCollection);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;X509CertificateCollection;(System.Security.Cryptography.X509Certificates.X509Certificate[]);;Argument[0].Element;Argument[Qualifier];generated:taint | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Security.Cryptography.X509Certificates;X509CertificateCollection;false;set_Item;(System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate);;Argument[1];Argument[Qualifier].Element;value | +| System.Security.Cryptography.X509Certificates;X509Chain;false;get_ChainElements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Chain;false;get_ChainPolicy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Chain;false;get_ChainStatus;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Chain;false;set_ChainPolicy;(System.Security.Cryptography.X509Certificates.X509ChainPolicy);;Argument[0];Argument[Qualifier];generated:taint | | System.Security.Cryptography.X509Certificates;X509ChainElementCollection;false;CopyTo;(System.Security.Cryptography.X509Certificates.X509ChainElement[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography.X509Certificates;X509ChainElementCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Security.Cryptography.X509Certificates.X509ChainElementEnumerator.Current];value | +| System.Security.Cryptography.X509Certificates;X509ChainElementCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509ChainElementCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Security.Cryptography.X509Certificates;X509ChainElementEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509ChainStatus;false;get_StatusInformation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509ChainStatus;false;set_StatusInformation;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509EnhancedKeyUsageExtension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509EnhancedKeyUsageExtension;false;get_EnhancedKeyUsages;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509Extension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | | System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;Add;(System.Security.Cryptography.X509Certificates.X509Extension);;Argument[0];Argument[Qualifier].Element;value | | System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;CopyTo;(System.Security.Cryptography.X509Certificates.X509Extension[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Security.Cryptography.X509Certificates.X509ExtensionEnumerator.Current];value | +| System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509ExtensionCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Security.Cryptography.X509Certificates;X509ExtensionEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509KeyUsageExtension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509SignatureGenerator;false;CreateForECDsa;(System.Security.Cryptography.ECDsa);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509SignatureGenerator;false;CreateForRSA;(System.Security.Cryptography.RSA,System.Security.Cryptography.RSASignaturePadding);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509SignatureGenerator;false;CreateForRSA;(System.Security.Cryptography.RSA,System.Security.Cryptography.RSASignaturePadding);;Argument[1];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509SignatureGenerator;false;get_PublicKey;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography.X509Certificates;X509SubjectKeyIdentifierExtension;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography.X509Certificates;X509SubjectKeyIdentifierExtension;false;get_SubjectKeyIdentifier;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.Security.Cryptography.Oid,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.Security.Cryptography.Oid,System.ReadOnlySpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;AsnEncodedData;(System.String,System.ReadOnlySpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;CopyFrom;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;Format;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;get_Oid;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;get_RawData;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;AsnEncodedData;false;set_Oid;(System.Security.Cryptography.Oid);;Argument[0];Argument[Qualifier];generated:taint | | System.Security.Cryptography;AsnEncodedDataCollection;false;Add;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier].Element;value | +| System.Security.Cryptography;AsnEncodedDataCollection;false;AsnEncodedDataCollection;(System.Security.Cryptography.AsnEncodedData);;Argument[0];Argument[Qualifier];generated:taint | | System.Security.Cryptography;AsnEncodedDataCollection;false;CopyTo;(System.Security.Cryptography.AsnEncodedData[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography;AsnEncodedDataCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Security.Cryptography.AsnEncodedDataEnumerator.Current];value | +| System.Security.Cryptography;AsnEncodedDataCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;AsnEncodedDataCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Security.Cryptography;AsnEncodedDataEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;CryptoStream;false;CryptoStream;(System.IO.Stream,System.Security.Cryptography.ICryptoTransform,System.Security.Cryptography.CryptoStreamMode,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;CryptoStream;false;CryptoStream;(System.IO.Stream,System.Security.Cryptography.ICryptoTransform,System.Security.Cryptography.CryptoStreamMode,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;CryptoStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;CspParameters;false;get_ParentWindowHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;CspParameters;false;set_ParentWindowHandle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;DSASignatureDeformatter;false;DSASignatureDeformatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;DSASignatureDeformatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;DSASignatureFormatter;false;DSASignatureFormatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;DSASignatureFormatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;ECCurve;false;get_Oid;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;HMAC;false;get_HashName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;HMAC;false;set_HashName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;HashAlgorithmName;false;HashAlgorithmName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;HashAlgorithmName;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;HashAlgorithmName;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;IncrementalHash;false;CreateHMAC;(System.Security.Cryptography.HashAlgorithmName,System.Byte[]);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;IncrementalHash;false;CreateHMAC;(System.Security.Cryptography.HashAlgorithmName,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;IncrementalHash;false;CreateHash;(System.Security.Cryptography.HashAlgorithmName);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;IncrementalHash;false;get_AlgorithmName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;Oid;false;FromFriendlyName;(System.String,System.Security.Cryptography.OidGroup);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;Oid;false;FromOidValue;(System.String,System.Security.Cryptography.OidGroup);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;Oid;false;Oid;(System.Security.Cryptography.Oid);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;Oid;false;Oid;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;Oid;false;Oid;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;Oid;false;Oid;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;Oid;false;get_FriendlyName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;Oid;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;Oid;false;set_FriendlyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;Oid;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Security.Cryptography;OidCollection;false;Add;(System.Security.Cryptography.Oid);;Argument[0];Argument[Qualifier].Element;value | | System.Security.Cryptography;OidCollection;false;CopyTo;(System.Security.Cryptography.Oid[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Security.Cryptography;OidCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Security.Cryptography.OidEnumerator.Current];value | +| System.Security.Cryptography;OidCollection;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;OidCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;OidCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Security.Cryptography;OidEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;PKCS1MaskGenerationMethod;false;get_HashName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;PKCS1MaskGenerationMethod;false;set_HashName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;PasswordDeriveBytes;false;PasswordDeriveBytes;(System.Byte[],System.Byte[],System.String,System.Int32,System.Security.Cryptography.CspParameters);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security.Cryptography;PasswordDeriveBytes;false;PasswordDeriveBytes;(System.Byte[],System.Byte[],System.String,System.Int32,System.Security.Cryptography.CspParameters);;Argument[2];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;PasswordDeriveBytes;false;PasswordDeriveBytes;(System.Byte[],System.Byte[],System.String,System.Int32,System.Security.Cryptography.CspParameters);;Argument[4];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;PasswordDeriveBytes;false;get_HashName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;PasswordDeriveBytes;false;set_HashName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAEncryptionPadding;false;CreateOaep;(System.Security.Cryptography.HashAlgorithmName);;Argument[0];ReturnValue;generated:taint | +| System.Security.Cryptography;RSAEncryptionPadding;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;RSAEncryptionPadding;false;get_OaepHashAlgorithm;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;RSAOAEPKeyExchangeDeformatter;false;RSAOAEPKeyExchangeDeformatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAOAEPKeyExchangeDeformatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAOAEPKeyExchangeFormatter;false;RSAOAEPKeyExchangeFormatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAOAEPKeyExchangeFormatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAOAEPKeyExchangeFormatter;false;get_Rng;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;RSAOAEPKeyExchangeFormatter;false;set_Rng;(System.Security.Cryptography.RandomNumberGenerator);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeDeformatter;false;RSAPKCS1KeyExchangeDeformatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeDeformatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeDeformatter;false;get_RNG;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeDeformatter;false;set_RNG;(System.Security.Cryptography.RandomNumberGenerator);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeFormatter;false;RSAPKCS1KeyExchangeFormatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeFormatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeFormatter;false;get_Rng;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Cryptography;RSAPKCS1KeyExchangeFormatter;false;set_Rng;(System.Security.Cryptography.RandomNumberGenerator);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1SignatureDeformatter;false;RSAPKCS1SignatureDeformatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1SignatureDeformatter;false;SetHashAlgorithm;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1SignatureDeformatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1SignatureFormatter;false;RSAPKCS1SignatureFormatter;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1SignatureFormatter;false;SetHashAlgorithm;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Cryptography;RSAPKCS1SignatureFormatter;false;SetKey;(System.Security.Cryptography.AsymmetricAlgorithm);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Principal;GenericIdentity;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.Security.Principal.GenericIdentity);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security.Principal;GenericIdentity;false;get_AuthenticationType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Principal;GenericIdentity;false;get_Claims;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Principal;GenericIdentity;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security.Principal;GenericPrincipal;false;GenericPrincipal;(System.Security.Principal.IIdentity,System.String[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security.Principal;GenericPrincipal;false;get_Identity;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;PermissionSet;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Security;SecurityElement;false;AddAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;AddAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;AddChild;(System.Security.SecurityElement);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;Attribute;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;Copy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;Escape;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;SearchForChildByTag;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;SearchForTextOfTag;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;SecurityElement;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;SecurityElement;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;SecurityElement;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;get_Children;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;get_Tag;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Security;SecurityElement;false;set_Children;(System.Collections.ArrayList);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;set_Tag;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security;SecurityElement;false;set_Text;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Security;SecurityException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Text.Encodings.Web;TextEncoder;false;Encode;(System.IO.TextWriter,System.String);;Argument[1];Argument[0];generated:taint | +| System.Text.Encodings.Web;TextEncoder;true;Encode;(System.IO.TextWriter,System.Char[],System.Int32,System.Int32);;Argument[1].Element;Argument[0];generated:taint | +| System.Text.Encodings.Web;TextEncoder;true;Encode;(System.IO.TextWriter,System.String,System.Int32,System.Int32);;Argument[1];Argument[0];generated:taint | +| System.Text.Encodings.Web;TextEncoder;true;Encode;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json.Serialization;JsonStringEnumConverter;false;JsonStringEnumConverter;(System.Text.Json.JsonNamingPolicy,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonDocument;false;Parse;(System.Buffers.ReadOnlySequence,System.Text.Json.JsonDocumentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonDocument;false;Parse;(System.IO.Stream,System.Text.Json.JsonDocumentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonDocument;false;Parse;(System.ReadOnlyMemory,System.Text.Json.JsonDocumentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonDocument;false;ParseValue;(System.Text.Json.Utf8JsonReader);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonDocument;false;TryParseValue;(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonDocument);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonDocument;false;get_RootElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement+ArrayEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement+ArrayEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement+ObjectEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;Clone;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Text.Json;JsonElement;false;EnumerateArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;EnumerateObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;GetProperty;(System.ReadOnlySpan);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;GetProperty;(System.ReadOnlySpan);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;GetProperty;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;TryGetProperty;(System.String,System.Text.Json.JsonElement);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonElement;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonEncodedText;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Text.Json;JsonException;false;JsonException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonException;false;JsonException;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonException;false;JsonException;(System.String,System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonException;false;JsonException;(System.String,System.String,System.Nullable,System.Nullable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonException;false;JsonException;(System.String,System.String,System.Nullable,System.Nullable,System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonReaderState;false;JsonReaderState;(System.Text.Json.JsonReaderOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonReaderState;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializer;false;Deserialize;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializer;false;Deserialize<>;(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonSerializerOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializerOptions;false;JsonSerializerOptions;(System.Text.Json.JsonSerializerOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonSerializerOptions;false;get_DictionaryKeyPolicy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializerOptions;false;get_Encoder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializerOptions;false;get_PropertyNamingPolicy;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializerOptions;false;get_ReferenceHandler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;JsonSerializerOptions;false;set_DictionaryKeyPolicy;(System.Text.Json.JsonNamingPolicy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonSerializerOptions;false;set_Encoder;(System.Text.Encodings.Web.JavaScriptEncoder);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonSerializerOptions;false;set_PropertyNamingPolicy;(System.Text.Json.JsonNamingPolicy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;JsonSerializerOptions;false;set_ReferenceHandler;(System.Text.Json.Serialization.ReferenceHandler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonReader;false;Utf8JsonReader;(System.Buffers.ReadOnlySequence,System.Boolean,System.Text.Json.JsonReaderState);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonReader;false;Utf8JsonReader;(System.Buffers.ReadOnlySequence,System.Boolean,System.Text.Json.JsonReaderState);;Argument[2];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonReader;false;Utf8JsonReader;(System.ReadOnlySpan,System.Boolean,System.Text.Json.JsonReaderState);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonReader;false;Utf8JsonReader;(System.ReadOnlySpan,System.Boolean,System.Text.Json.JsonReaderState);;Argument[2];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonReader;false;get_CurrentState;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;Utf8JsonReader;false;get_Position;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.Json;Utf8JsonWriter;false;Reset;(System.Buffers.IBufferWriter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonWriter;false;Reset;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonWriter;false;Utf8JsonWriter;(System.Buffers.IBufferWriter,System.Text.Json.JsonWriterOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonWriter;false;Utf8JsonWriter;(System.Buffers.IBufferWriter,System.Text.Json.JsonWriterOptions);;Argument[1];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonWriter;false;Utf8JsonWriter;(System.IO.Stream,System.Text.Json.JsonWriterOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonWriter;false;Utf8JsonWriter;(System.IO.Stream,System.Text.Json.JsonWriterOptions);;Argument[1];Argument[Qualifier];generated:taint | +| System.Text.Json;Utf8JsonWriter;false;get_Options;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text.RegularExpressions;CaptureCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Text.RegularExpressions;CaptureCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Group;false;Synchronized;(System.Text.RegularExpressions.Group);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;GroupCollection;false;TryGetValue;(System.String,System.Text.RegularExpressions.Group);;Argument[Qualifier];ReturnValue;generated:taint | | System.Text.RegularExpressions;GroupCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Text.RegularExpressions;GroupCollection;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | +| System.Text.RegularExpressions;GroupCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;GroupCollection;false;get_Values;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Match;false;NextMatch;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Match;false;Synchronized;(System.Text.RegularExpressions.Match);;Argument[0];ReturnValue;generated:taint | | System.Text.RegularExpressions;MatchCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | +| System.Text.RegularExpressions;MatchCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Text.RegularExpressions;Regex;false;Escape;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;GroupNameFromNumber;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;IsMatch;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;IsMatch;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Match;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Match;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Match;(System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions);;Argument[1];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[1];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Matches;(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[3];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.String,System.Text.RegularExpressions.RegexOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Replace;(System.String,System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.String,System.Text.RegularExpressions.RegexOptions);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Split;(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;Unescape;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;get_CapNames;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;get_Caps;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;get_MatchTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;Regex;false;set_CapNames;(System.Collections.IDictionary);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;Regex;false;set_Caps;(System.Collections.IDictionary);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;RegexCompilationInfo;(System.String,System.Text.RegularExpressions.RegexOptions,System.String,System.String,System.Boolean,System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;RegexCompilationInfo;(System.String,System.Text.RegularExpressions.RegexOptions,System.String,System.String,System.Boolean,System.TimeSpan);;Argument[2];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;RegexCompilationInfo;(System.String,System.Text.RegularExpressions.RegexOptions,System.String,System.String,System.Boolean,System.TimeSpan);;Argument[3];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;RegexCompilationInfo;(System.String,System.Text.RegularExpressions.RegexOptions,System.String,System.String,System.Boolean,System.TimeSpan);;Argument[5];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;get_MatchTimeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;get_Pattern;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;set_MatchTimeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexCompilationInfo;false;set_Pattern;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexMatchTimeoutException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Text.RegularExpressions;RegexParseException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean,System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean,System.TimeSpan);;Argument[1];Argument[Qualifier];generated:taint | +| System.Text.RegularExpressions;RegexRunner;false;Scan;(System.Text.RegularExpressions.Regex,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean,System.TimeSpan);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Decoder;false;get_Fallback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Decoder;false;get_FallbackBuffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Decoder;false;set_Fallback;(System.Text.DecoderFallback);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;DecoderFallbackException;false;DecoderFallbackException;(System.String,System.Byte[],System.Int32);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Text;DecoderFallbackException;false;get_BytesUnknown;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;DecoderReplacementFallback;false;CreateFallbackBuffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;DecoderReplacementFallback;false;DecoderReplacementFallback;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;DecoderReplacementFallback;false;get_DefaultString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;DecoderReplacementFallbackBuffer;false;DecoderReplacementFallbackBuffer;(System.Text.DecoderReplacementFallback);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;Encoder;false;get_Fallback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Encoder;false;get_FallbackBuffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Encoder;false;set_Fallback;(System.Text.EncoderFallback);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;EncoderReplacementFallback;false;CreateFallbackBuffer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;EncoderReplacementFallback;false;EncoderReplacementFallback;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;EncoderReplacementFallback;false;get_DefaultString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;EncoderReplacementFallbackBuffer;false;EncoderReplacementFallbackBuffer;(System.Text.EncoderReplacementFallback);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;Encoding;false;Convert;(System.Text.Encoding,System.Text.Encoding,System.Byte[]);;Argument[2].Element;ReturnValue;generated:taint | +| System.Text;Encoding;false;Convert;(System.Text.Encoding,System.Text.Encoding,System.Byte[],System.Int32,System.Int32);;Argument[2].Element;ReturnValue;generated:taint | +| System.Text;Encoding;false;CreateTranscodingStream;(System.IO.Stream,System.Text.Encoding,System.Text.Encoding,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Text;Encoding;false;CreateTranscodingStream;(System.IO.Stream,System.Text.Encoding,System.Text.Encoding,System.Boolean);;Argument[1];ReturnValue;generated:taint | +| System.Text;Encoding;false;CreateTranscodingStream;(System.IO.Stream,System.Text.Encoding,System.Text.Encoding,System.Boolean);;Argument[2];ReturnValue;generated:taint | +| System.Text;Encoding;false;Encoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];Argument[Qualifier];generated:taint | +| System.Text;Encoding;false;Encoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[2];Argument[Qualifier];generated:taint | | System.Text;Encoding;false;GetBytes;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;taint | +| System.Text;Encoding;false;GetEncoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];ReturnValue;generated:taint | +| System.Text;Encoding;false;GetEncoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[2];ReturnValue;generated:taint | +| System.Text;Encoding;false;GetEncoding;(System.String,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];ReturnValue;generated:taint | +| System.Text;Encoding;false;GetEncoding;(System.String,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[2];ReturnValue;generated:taint | | System.Text;Encoding;false;GetString;(System.Byte*,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;Encoding;false;GetString;(System.ReadOnlySpan);;Argument[0].Element;ReturnValue;taint | +| System.Text;Encoding;false;get_DecoderFallback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Encoding;false;get_EncoderFallback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Encoding;false;set_DecoderFallback;(System.Text.DecoderFallback);;Argument[0];Argument[Qualifier];generated:taint | +| System.Text;Encoding;false;set_EncoderFallback;(System.Text.EncoderFallback);;Argument[0];Argument[Qualifier];generated:taint | | System.Text;Encoding;true;GetBytes;(System.Char*,System.Int32,System.Byte*,System.Int32);;Argument[0];ReturnValue;taint | | System.Text;Encoding;true;GetBytes;(System.Char[]);;Argument[0].Element;ReturnValue;taint | | System.Text;Encoding;true;GetBytes;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | @@ -1301,8 +6066,16 @@ | System.Text;Encoding;true;GetChars;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;Encoding;true;GetChars;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);;Argument[0].Element;ReturnValue;taint | | System.Text;Encoding;true;GetChars;(System.ReadOnlySpan,System.Span);;Argument[0].Element;ReturnValue;taint | +| System.Text;Encoding;true;GetDecoder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;Encoding;true;GetEncoder;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text;Encoding;true;GetString;(System.Byte[]);;Argument[0].Element;ReturnValue;taint | | System.Text;Encoding;true;GetString;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | +| System.Text;EncodingProvider;true;GetEncoding;(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];ReturnValue;generated:taint | +| System.Text;EncodingProvider;true;GetEncoding;(System.String,System.Text.EncoderFallback,System.Text.DecoderFallback);;Argument[1];ReturnValue;generated:taint | +| System.Text;SpanRuneEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;SpanRuneEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder+ChunkEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder+ChunkEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Text;StringBuilder;false;Append;(System.Boolean);;Argument[Qualifier];ReturnValue;value | | System.Text;StringBuilder;false;Append;(System.Byte);;Argument[Qualifier];ReturnValue;value | | System.Text;StringBuilder;false;Append;(System.Char);;Argument[Qualifier];ReturnValue;value | @@ -1380,11 +6153,129 @@ | System.Text;StringBuilder;false;AppendLine;();;Argument[Qualifier];ReturnValue;value | | System.Text;StringBuilder;false;AppendLine;(System.String);;Argument[0];Argument[Qualifier].Element;value | | System.Text;StringBuilder;false;AppendLine;(System.String);;Argument[Qualifier];ReturnValue;value | +| System.Text;StringBuilder;false;GetChunks;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Byte);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Char);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Char[]);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Decimal);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Double);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Int16);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Int64);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.ReadOnlySpan);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.SByte);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.Single);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.String);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.String,System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.UInt16);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.UInt32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Insert;(System.Int32,System.UInt64);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Remove;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Replace;(System.Char,System.Char);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Replace;(System.Char,System.Char,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringBuilder;false;Replace;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Text;StringBuilder;false;Replace;(System.String,System.String,System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:value | | System.Text;StringBuilder;false;StringBuilder;(System.String);;Argument[0];ReturnValue.Element;value | | System.Text;StringBuilder;false;StringBuilder;(System.String,System.Int32);;Argument[0];ReturnValue.Element;value | | System.Text;StringBuilder;false;StringBuilder;(System.String,System.Int32,System.Int32,System.Int32);;Argument[0];ReturnValue.Element;value | | System.Text;StringBuilder;false;ToString;();;Argument[Qualifier].Element;ReturnValue;taint | | System.Text;StringBuilder;false;ToString;(System.Int32,System.Int32);;Argument[Qualifier].Element;ReturnValue;taint | +| System.Text;StringRuneEnumerator;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Text;StringRuneEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchBlock<>;false;BatchBlock;(System.Int32,System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BatchBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchBlock<>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;BatchedJoinBlock;(System.Int32,System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList,System.Collections.Generic.IList>>);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;get_Target1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;get_Target2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,,>;false;get_Target3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;BatchedJoinBlock;(System.Int32,System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Collections.Generic.IList>>);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;get_Target1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BatchedJoinBlock<,>;false;get_Target2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BroadcastBlock<>;false;TryReceiveAll;(System.Collections.Generic.IList);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BufferBlock<>;false;BufferBlock;(System.Threading.Tasks.Dataflow.DataflowBlockOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;BufferBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BufferBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;BufferBlock<>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;AsObservable<>;(System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;AsObserver<>;(System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Encapsulate<,>;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Encapsulate<,>;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[1];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;LinkTo<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[0];Argument[1];generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;LinkTo<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;LinkTo<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Post<>;(System.Threading.Tasks.Dataflow.ITargetBlock,TInput);;Argument[1];Argument[0];generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Receive<>;(System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Receive<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Receive<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;Receive<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;ReceiveAsync<>;(System.Threading.Tasks.Dataflow.ISourceBlock);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;ReceiveAsync<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;ReceiveAsync<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;ReceiveAsync<>;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;SendAsync<>;(System.Threading.Tasks.Dataflow.ITargetBlock,TInput,System.Threading.CancellationToken);;Argument[1];Argument[0];generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlock;false;TryReceive<>;(System.Threading.Tasks.Dataflow.IReceivableSourceBlock,TOutput);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;get_NameFormat;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;get_TaskScheduler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;set_CancellationToken;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;set_NameFormat;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;DataflowBlockOptions;false;set_TaskScheduler;(System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;JoinBlock;(System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock>);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;get_Target1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;get_Target2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,,>;false;get_Target3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,>;false;JoinBlock;(System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock>);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,>;false;get_Target1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;JoinBlock<,>;false;get_Target2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;TransformBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;TransformBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;TransformBlock<,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;TransformManyBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;TransformManyBlock<,>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;TransformManyBlock<,>;false;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;ConsumeMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];Argument[0];generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;OfferMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,T,System.Threading.Tasks.Dataflow.ISourceBlock,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);;Argument[Qualifier];Argument[1];generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;TryReceiveAll;(System.Collections.Generic.IList);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Dataflow;WriteOnceBlock<>;false;get_Completion;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Sources;ManualResetValueTaskSourceCore<>;false;GetResult;(System.Int16);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks.Sources;ManualResetValueTaskSourceCore<>;false;SetException;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks.Sources;ManualResetValueTaskSourceCore<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ConcurrentExclusiveSchedulerPair;false;ConcurrentExclusiveSchedulerPair;(System.Threading.Tasks.TaskScheduler,System.Int32,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ConcurrentExclusiveSchedulerPair;false;get_ConcurrentScheduler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ConcurrentExclusiveSchedulerPair;false;get_ExclusiveScheduler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ParallelLoopResult;false;get_LowestBreakIteration;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ParallelOptions;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ParallelOptions;false;get_TaskScheduler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ParallelOptions;false;set_CancellationToken;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ParallelOptions;false;set_TaskScheduler;(System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;Task;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | | System.Threading.Tasks;Task;false;ContinueWith;(System.Action,System.Object);;Argument[1];Argument[0].Parameter[1];value | | System.Threading.Tasks;Task;false;ContinueWith;(System.Action,System.Object,System.Threading.CancellationToken);;Argument[1];Argument[0].Parameter[1];value | | System.Threading.Tasks;Task;false;ContinueWith;(System.Action,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[1];Argument[0].Parameter[1];value | @@ -1405,7 +6296,11 @@ | System.Threading.Tasks;Task;false;ContinueWith<>;(System.Func,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;Task;false;ContinueWith<>;(System.Func,System.Threading.Tasks.TaskContinuationOptions);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;Task;false;ContinueWith<>;(System.Func,System.Threading.Tasks.TaskScheduler);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | +| System.Threading.Tasks;Task;false;Delay;(System.Int32,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Threading.Tasks;Task;false;Delay;(System.TimeSpan,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Threading.Tasks;Task;false;FromCanceled;(System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | | System.Threading.Tasks;Task;false;FromResult<>;(TResult);;Argument[0];ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | +| System.Threading.Tasks;Task;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Threading.Tasks;Task;false;Run<>;(System.Func>);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;Task;false;Run<>;(System.Func>,System.Threading.CancellationToken);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;Task;false;Run<>;(System.Func);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | @@ -1414,12 +6309,19 @@ | System.Threading.Tasks;Task;false;Task;(System.Action,System.Object,System.Threading.CancellationToken);;Argument[1];Argument[0].Parameter[0];value | | System.Threading.Tasks;Task;false;Task;(System.Action,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions);;Argument[1];Argument[0].Parameter[0];value | | System.Threading.Tasks;Task;false;Task;(System.Action,System.Object,System.Threading.Tasks.TaskCreationOptions);;Argument[1];Argument[0].Parameter[0];value | +| System.Threading.Tasks;Task;false;WhenAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Threading.Tasks;Task;false;WhenAll;(System.Threading.Tasks.Task[]);;Argument[0].Element;ReturnValue;generated:taint | | System.Threading.Tasks;Task;false;WhenAll<>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element.Property[System.Threading.Tasks.Task<>.Result];ReturnValue.Property[System.Threading.Tasks.Task<>.Result].Element;value | | System.Threading.Tasks;Task;false;WhenAll<>;(System.Threading.Tasks.Task[]);;Argument[0].Element.Property[System.Threading.Tasks.Task<>.Result];ReturnValue.Property[System.Threading.Tasks.Task<>.Result].Element;value | +| System.Threading.Tasks;Task;false;WhenAny;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Threading.Tasks;Task;false;WhenAny;(System.Threading.Tasks.Task,System.Threading.Tasks.Task);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks;Task;false;WhenAny;(System.Threading.Tasks.Task,System.Threading.Tasks.Task);;Argument[1];ReturnValue;generated:taint | +| System.Threading.Tasks;Task;false;WhenAny;(System.Threading.Tasks.Task[]);;Argument[0].Element;ReturnValue;generated:taint | | System.Threading.Tasks;Task;false;WhenAny<>;(System.Collections.Generic.IEnumerable>);;Argument[0].Element.Property[System.Threading.Tasks.Task<>.Result];ReturnValue.Property[System.Threading.Tasks.Task<>.Result].Element;value | | System.Threading.Tasks;Task;false;WhenAny<>;(System.Threading.Tasks.Task,System.Threading.Tasks.Task);;Argument[0].Element.Property[System.Threading.Tasks.Task<>.Result];ReturnValue.Property[System.Threading.Tasks.Task<>.Result].Element;value | | System.Threading.Tasks;Task;false;WhenAny<>;(System.Threading.Tasks.Task,System.Threading.Tasks.Task);;Argument[1].Element.Property[System.Threading.Tasks.Task<>.Result];ReturnValue.Property[System.Threading.Tasks.Task<>.Result].Element;value | | System.Threading.Tasks;Task;false;WhenAny<>;(System.Threading.Tasks.Task[]);;Argument[0].Element.Property[System.Threading.Tasks.Task<>.Result];ReturnValue.Property[System.Threading.Tasks.Task<>.Result].Element;value | +| System.Threading.Tasks;Task;false;get_AsyncState;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Threading.Tasks;Task<>;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue.SyntheticField[m_configuredTaskAwaiter].SyntheticField[m_task_configured_task_awaitable];value | | System.Threading.Tasks;Task<>;false;ContinueWith;(System.Action,System.Object>,System.Object);;Argument[1];Argument[0].Parameter[1];value | | System.Threading.Tasks;Task<>;false;ContinueWith;(System.Action,System.Object>,System.Object);;Argument[Qualifier];Argument[0].Parameter[0];value | @@ -1475,6 +6377,19 @@ | System.Threading.Tasks;Task<>;false;Task;(System.Func,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;Task<>;false;Task;(System.Func,System.Threading.Tasks.TaskCreationOptions);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;Task<>;false;get_Result;();;Argument[Qualifier];ReturnValue;taint | +| System.Threading.Tasks;TaskAsyncEnumerableExtensions;false;ConfigureAwait;(System.IAsyncDisposable,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskAsyncEnumerableExtensions;false;ConfigureAwait<>;(System.Collections.Generic.IAsyncEnumerable,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskAsyncEnumerableExtensions;false;WithCancellation<>;(System.Collections.Generic.IAsyncEnumerable,System.Threading.CancellationToken);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskAsyncEnumerableExtensions;false;WithCancellation<>;(System.Collections.Generic.IAsyncEnumerable,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskCanceledException;false;TaskCanceledException;(System.Threading.Tasks.Task);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskCanceledException;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskCompletionSource;false;TaskCompletionSource;(System.Object,System.Threading.Tasks.TaskCreationOptions);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskCompletionSource;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskCompletionSource<>;false;SetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskCompletionSource<>;false;TrySetResult;(TResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskCompletionSource<>;false;get_Task;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskExtensions;false;Unwrap;(System.Threading.Tasks.Task);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskExtensions;false;Unwrap<>;(System.Threading.Tasks.Task>);;Argument[0];ReturnValue;generated:taint | | System.Threading.Tasks;TaskFactory;false;ContinueWhenAll<,>;(System.Threading.Tasks.Task[],System.Func[],TResult>);;Argument[0];Argument[1].Parameter[0];value | | System.Threading.Tasks;TaskFactory;false;ContinueWhenAll<,>;(System.Threading.Tasks.Task[],System.Func[],TResult>);;Argument[1].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory;false;ContinueWhenAll<,>;(System.Threading.Tasks.Task[],System.Func[],TResult>,System.Threading.CancellationToken);;Argument[0];Argument[1].Parameter[0];value | @@ -1523,6 +6438,12 @@ | System.Threading.Tasks;TaskFactory;false;StartNew<>;(System.Func,System.Threading.CancellationToken);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory;false;StartNew<>;(System.Func,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory;false;StartNew<>;(System.Func,System.Threading.Tasks.TaskCreationOptions);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | +| System.Threading.Tasks;TaskFactory;false;TaskFactory;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory;false;TaskFactory;(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory;false;TaskFactory;(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[3];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory;false;TaskFactory;(System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskFactory;false;get_Scheduler;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Threading.Tasks;TaskFactory<>;false;ContinueWhenAll;(System.Threading.Tasks.Task[],System.Func);;Argument[1].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory<>;false;ContinueWhenAll;(System.Threading.Tasks.Task[],System.Func,System.Threading.CancellationToken);;Argument[1].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory<>;false;ContinueWhenAll;(System.Threading.Tasks.Task[],System.Func,System.Threading.CancellationToken,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[1].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | @@ -1559,6 +6480,86 @@ | System.Threading.Tasks;TaskFactory<>;false;StartNew;(System.Func,System.Threading.CancellationToken);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory<>;false;StartNew;(System.Func,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskScheduler);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | | System.Threading.Tasks;TaskFactory<>;false;StartNew;(System.Func,System.Threading.Tasks.TaskCreationOptions);;Argument[0].ReturnValue;ReturnValue.Property[System.Threading.Tasks.Task<>.Result];value | +| System.Threading.Tasks;TaskFactory<>;false;TaskFactory;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory<>;false;TaskFactory;(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory<>;false;TaskFactory;(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler);;Argument[3];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory<>;false;TaskFactory;(System.Threading.Tasks.TaskScheduler);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;TaskFactory<>;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;TaskFactory<>;false;get_Scheduler;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;UnobservedTaskExceptionEventArgs;false;UnobservedTaskExceptionEventArgs;(System.AggregateException);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;UnobservedTaskExceptionEventArgs;false;get_Exception;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask;false;AsTask;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask;false;FromResult<>;(TResult);;Argument[0];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask;false;Preserve;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask;false;ValueTask;(System.Threading.Tasks.Sources.IValueTaskSource,System.Int16);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ValueTask;false;ValueTask;(System.Threading.Tasks.Task);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ValueTask<>;false;AsTask;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask<>;false;ConfigureAwait;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask<>;false;GetAwaiter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask<>;false;Preserve;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading.Tasks;ValueTask<>;false;ValueTask;(System.Threading.Tasks.Sources.IValueTaskSource,System.Int16);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ValueTask<>;false;ValueTask;(System.Threading.Tasks.Task);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ValueTask<>;false;ValueTask;(TResult);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading.Tasks;ValueTask<>;false;get_Result;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;AbandonedMutexException;false;AbandonedMutexException;(System.Int32,System.Threading.WaitHandle);;Argument[1];Argument[Qualifier];generated:taint | +| System.Threading;AbandonedMutexException;false;AbandonedMutexException;(System.String,System.Exception,System.Int32,System.Threading.WaitHandle);;Argument[3];Argument[Qualifier];generated:taint | +| System.Threading;AbandonedMutexException;false;AbandonedMutexException;(System.String,System.Int32,System.Threading.WaitHandle);;Argument[2];Argument[Qualifier];generated:taint | +| System.Threading;AbandonedMutexException;false;get_Mutex;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;CancellationToken;false;get_WaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;CancellationTokenSource;false;get_Token;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;CompressedStack;false;CreateCopy;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Threading;CountdownEvent;false;get_WaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;ExecutionContext;false;CreateCopy;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Threading;HostExecutionContextManager;false;SetHostExecutionContext;(System.Threading.HostExecutionContext);;Argument[0];ReturnValue;generated:taint | +| System.Threading;LazyInitializer;false;EnsureInitialized<>;(T);;Argument[0];ReturnValue;generated:taint | +| System.Threading;LazyInitializer;false;EnsureInitialized<>;(T,System.Boolean,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Threading;LazyInitializer;false;EnsureInitialized<>;(T,System.Boolean,System.Object);;Argument[2];ReturnValue;generated:taint | +| System.Threading;ManualResetEventSlim;false;get_WaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;WaitAsync;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;WaitAsync;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;WaitAsync;(System.Int32,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;WaitAsync;(System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;WaitAsync;(System.TimeSpan);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;WaitAsync;(System.TimeSpan,System.Threading.CancellationToken);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;SemaphoreSlim;false;get_AvailableWaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;Thread;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;Thread;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading;ThreadExceptionEventArgs;false;ThreadExceptionEventArgs;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading;ThreadExceptionEventArgs;false;get_Exception;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;WaitHandle;false;set_SafeWaitHandle;(Microsoft.Win32.SafeHandles.SafeWaitHandle);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading;WaitHandle;true;get_Handle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Threading;WaitHandle;true;set_Handle;(System.IntPtr);;Argument[0];Argument[Qualifier];generated:taint | +| System.Threading;WaitHandleExtensions;false;SetSafeWaitHandle;(System.Threading.WaitHandle,Microsoft.Win32.SafeHandles.SafeWaitHandle);;Argument[1];Argument[0];generated:taint | +| System.Timers;Timer;false;get_Site;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Timers;Timer;false;get_SynchronizingObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Timers;Timer;false;set_Site;(System.ComponentModel.ISite);;Argument[0];Argument[Qualifier];generated:taint | +| System.Timers;Timer;false;set_SynchronizingObject;(System.ComponentModel.ISynchronizeInvoke);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;CommittableTransaction;false;get_AsyncState;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;CommittableTransaction;false;get_AsyncWaitHandle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;EnlistDurable;(System.Guid,System.Transactions.ISinglePhaseNotification,System.Transactions.EnlistmentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;EnlistPromotableSinglePhase;(System.Transactions.IPromotableSinglePhaseNotification);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;Transaction;false;EnlistPromotableSinglePhase;(System.Transactions.IPromotableSinglePhaseNotification,System.Guid);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;Transaction;false;EnlistPromotableSinglePhase;(System.Transactions.IPromotableSinglePhaseNotification,System.Guid);;Argument[1];Argument[Qualifier];generated:taint | +| System.Transactions;Transaction;false;EnlistVolatile;(System.Transactions.IEnlistmentNotification,System.Transactions.EnlistmentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;EnlistVolatile;(System.Transactions.IEnlistmentNotification,System.Transactions.EnlistmentOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;EnlistVolatile;(System.Transactions.ISinglePhaseNotification,System.Transactions.EnlistmentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;EnlistVolatile;(System.Transactions.ISinglePhaseNotification,System.Transactions.EnlistmentOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;PromoteAndEnlistDurable;(System.Guid,System.Transactions.IPromotableSinglePhaseNotification,System.Transactions.ISinglePhaseNotification,System.Transactions.EnlistmentOptions);;Argument[0];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;Rollback;(System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;Transaction;false;SetDistributedTransactionIdentifier;(System.Transactions.IPromotableSinglePhaseNotification,System.Guid);;Argument[1];Argument[Qualifier];generated:taint | +| System.Transactions;Transaction;false;get_PromoterType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;Transaction;false;get_TransactionInformation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;TransactionEventArgs;false;get_Transaction;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;TransactionInformation;false;get_DistributedIdentifier;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;TransactionOptions;false;get_Timeout;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Transactions;TransactionOptions;false;set_Timeout;(System.TimeSpan);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;TransactionScope;false;TransactionScope;(System.Transactions.Transaction,System.TimeSpan,System.Transactions.EnterpriseServicesInteropOption);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;TransactionScope;false;TransactionScope;(System.Transactions.Transaction,System.TimeSpan,System.Transactions.TransactionScopeAsyncFlowOption);;Argument[0];Argument[Qualifier];generated:taint | +| System.Transactions;TransactionScope;false;TransactionScope;(System.Transactions.Transaction,System.Transactions.TransactionScopeAsyncFlowOption);;Argument[0];Argument[Qualifier];generated:taint | | System.Web.UI.WebControls;TextBox;false;get_Text;();;Argument[Qualifier];ReturnValue;taint | | System.Web;HttpCookie;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | | System.Web;HttpCookie;false;get_Values;();;Argument[Qualifier];ReturnValue;taint | @@ -1566,6 +6567,8 @@ | System.Web;HttpServerUtility;false;UrlEncode;(System.String);;Argument[0];ReturnValue;taint | | System.Web;HttpUtility;false;HtmlAttributeEncode;(System.String);;Argument[0];ReturnValue;taint | | System.Web;HttpUtility;false;HtmlAttributeEncode;(System.String,System.IO.TextWriter);;Argument[0];ReturnValue;taint | +| System.Web;HttpUtility;false;HtmlDecode;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Web;HttpUtility;false;HtmlDecode;(System.String,System.IO.TextWriter);;Argument[0];Argument[1];generated:taint | | System.Web;HttpUtility;false;HtmlEncode;(System.Object);;Argument[0];ReturnValue;taint | | System.Web;HttpUtility;false;HtmlEncode;(System.String);;Argument[0];ReturnValue;taint | | System.Web;HttpUtility;false;HtmlEncode;(System.String,System.IO.TextWriter);;Argument[0];ReturnValue;taint | @@ -1575,51 +6578,1302 @@ | System.Web;HttpUtility;false;UrlEncode;(System.Byte[],System.Int32,System.Int32);;Argument[0];ReturnValue;taint | | System.Web;HttpUtility;false;UrlEncode;(System.String);;Argument[0];ReturnValue;taint | | System.Web;HttpUtility;false;UrlEncode;(System.String,System.Text.Encoding);;Argument[0];ReturnValue;taint | +| System.Web;HttpUtility;false;UrlEncodeToBytes;(System.Byte[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Web;HttpUtility;false;UrlEncodeToBytes;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Web;HttpUtility;false;UrlEncodeToBytes;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Web;HttpUtility;false;UrlEncodeToBytes;(System.String,System.Text.Encoding);;Argument[0];ReturnValue;generated:taint | +| System.Web;HttpUtility;false;UrlPathEncode;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Windows.Markup;ValueSerializerAttribute;false;ValueSerializerAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Windows.Markup;ValueSerializerAttribute;false;ValueSerializerAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Windows.Markup;ValueSerializerAttribute;false;get_ValueSerializerType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Windows.Markup;ValueSerializerAttribute;false;get_ValueSerializerTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Ancestors<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Ancestors<>;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;AncestorsAndSelf;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;AncestorsAndSelf;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Attributes;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Attributes;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;DescendantNodes<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;DescendantNodesAndSelf;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Descendants<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Descendants<>;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;DescendantsAndSelf;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;DescendantsAndSelf;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Elements<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Elements<>;(System.Collections.Generic.IEnumerable,System.Xml.Linq.XName);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;InDocumentOrder<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;Extensions;false;Nodes<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Linq;XAttribute;false;SetValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XAttribute;false;XAttribute;(System.Xml.Linq.XAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XAttribute;false;XAttribute;(System.Xml.Linq.XName,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XAttribute;false;XAttribute;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XAttribute;false;get_NextAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XAttribute;false;get_PreviousAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XAttribute;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XAttribute;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XCData;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XCData;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XComment;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XComment;false;XComment;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XComment;false;XComment;(System.Xml.Linq.XComment);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XComment;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XComment;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XContainer;false;Add;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XContainer;false;Add;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XContainer;false;Add;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Linq;XContainer;false;Add;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XContainer;false;AddFirst;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XContainer;false;AddFirst;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XContainer;false;CreateWriter;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;DescendantNodes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;Descendants;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;Descendants;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;Element;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;Elements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;Elements;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;Nodes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;ReplaceNodes;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XContainer;false;ReplaceNodes;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XContainer;false;ReplaceNodes;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Linq;XContainer;false;ReplaceNodes;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XContainer;false;get_FirstNode;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XContainer;false;get_LastNode;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDeclaration;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDeclaration;false;XDeclaration;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDeclaration;false;XDeclaration;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDeclaration;false;XDeclaration;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDeclaration;false;XDeclaration;(System.Xml.Linq.XDeclaration);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDeclaration;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDeclaration;false;get_Standalone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDeclaration;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDeclaration;false;set_Encoding;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDeclaration;false;set_Standalone;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDeclaration;false;set_Version;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.IO.Stream,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.IO.TextReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.IO.TextReader,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.String,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Load;(System.Xml.XmlReader,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Parse;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Parse;(System.String,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;Save;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XDocument;false;SaveAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XDocument;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;XDocument;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocument;false;XDocument;(System.Xml.Linq.XDeclaration,System.Object[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocument;false;XDocument;(System.Xml.Linq.XDocument);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocument;false;get_Declaration;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;get_DocumentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;get_Root;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocument;false;set_Declaration;(System.Xml.Linq.XDeclaration);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XDocumentType;false;XDocumentType;(System.String,System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;XDocumentType;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;XDocumentType;(System.String,System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;XDocumentType;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;XDocumentType;(System.Xml.Linq.XDocumentType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;get_InternalSubset;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocumentType;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocumentType;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocumentType;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XDocumentType;false;set_InternalSubset;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;set_PublicId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XDocumentType;false;set_SystemId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;AncestorsAndSelf;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;AncestorsAndSelf;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Attribute;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Attributes;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;DescendantNodesAndSelf;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;DescendantsAndSelf;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;DescendantsAndSelf;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.IO.Stream,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.IO.TextReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.IO.TextReader,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.String,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Load;(System.Xml.XmlReader,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Parse;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;Parse;(System.String,System.Xml.Linq.LoadOptions);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;ReadXml;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAll;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAll;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAll;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAll;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAttributes;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAttributes;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAttributes;(System.Object[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;ReplaceAttributes;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XElement;false;SaveAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;SetAttributeValue;(System.Xml.Linq.XName,System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;SetAttributeValue;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;SetElementValue;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;SetValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XElement);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XName,System.Object);;Argument[Qualifier];Argument[1];generated:taint | +| System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XStreamingElement);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;XElement;(System.Xml.Linq.XStreamingElement);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XElement;false;get_FirstAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;get_LastAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XElement;false;set_Name;(System.Xml.Linq.XName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XElement;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XName;false;Get;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XName;false;Get;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XName;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XName;false;get_LocalName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XName;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XName;false;get_NamespaceName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNamespace;false;GetName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XNamespace;false;GetName;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNamespace;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNamespace;false;get_NamespaceName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;AddAfterSelf;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XNode;false;AddAfterSelf;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XNode;false;AddBeforeSelf;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XNode;false;AddBeforeSelf;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XNode;false;Ancestors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;Ancestors;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;CreateReader;(System.Xml.Linq.ReaderOptions);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;ElementsAfterSelf;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;ElementsAfterSelf;(System.Xml.Linq.XName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;NodesAfterSelf;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;ReadFrom;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Linq;XNode;false;ReplaceWith;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XNode;false;ReplaceWith;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Linq;XNode;false;get_NextNode;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;AddAnnotation;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XObject;false;Annotation;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;Annotation<>;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;Annotations;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;Annotations<>;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;get_BaseUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;get_Document;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XObject;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;XProcessingInstruction;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;XProcessingInstruction;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;XProcessingInstruction;(System.Xml.Linq.XProcessingInstruction);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;set_Data;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XProcessingInstruction;false;set_Target;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XStreamingElement;false;XStreamingElement;(System.Xml.Linq.XName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XStreamingElement;false;XStreamingElement;(System.Xml.Linq.XName,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XStreamingElement;false;XStreamingElement;(System.Xml.Linq.XName,System.Object[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml.Linq;XStreamingElement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XStreamingElement;false;set_Name;(System.Xml.Linq.XName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XText;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Linq;XText;false;WriteToAsync;(System.Xml.XmlWriter,System.Threading.CancellationToken);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Linq;XText;false;XText;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XText;false;XText;(System.Xml.Linq.XText);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Linq;XText;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Linq;XText;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Resolvers;XmlPreloadedResolver;false;XmlPreloadedResolver;(System.Xml.XmlResolver,System.Xml.Resolvers.XmlKnownDtds,System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Resolvers;XmlPreloadedResolver;false;XmlPreloadedResolver;(System.Xml.XmlResolver,System.Xml.Resolvers.XmlKnownDtds,System.Collections.Generic.IEqualityComparer);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Resolvers;XmlPreloadedResolver;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;Extensions;false;GetSchemaInfo;(System.Xml.Linq.XAttribute);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;Extensions;false;GetSchemaInfo;(System.Xml.Linq.XElement);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;ValidationEventArgs;false;get_Exception;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;ValidationEventArgs;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlAtomicValue;false;Clone;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Xml.Schema;XmlAtomicValue;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlAtomicValue;false;ValueAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:value | +| System.Xml.Schema;XmlAtomicValue;false;get_TypedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlAtomicValue;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlAtomicValue;false;get_ValueAsDateTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlAtomicValue;false;get_XmlType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_AttributeGroups;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Elements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Groups;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Includes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Notations;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_SchemaTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_TargetNamespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_UnhandledAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchema;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchema;false;set_TargetNamespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchema;false;set_UnhandledAttributes;(System.Xml.XmlAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchema;false;set_Version;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAll;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotated;false;get_Annotation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotated;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotated;false;get_UnhandledAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotated;false;set_Annotation;(System.Xml.Schema.XmlSchemaAnnotation);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAnnotated;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAnnotated;false;set_UnhandledAttributes;(System.Xml.XmlAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAnnotation;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotation;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotation;false;get_UnhandledAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnnotation;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAnnotation;false;set_UnhandledAttributes;(System.Xml.XmlAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAny;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAny;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAnyAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAnyAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAppInfo;false;get_Markup;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAppInfo;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAppInfo;false;set_Markup;(System.Xml.XmlNode[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAppInfo;false;set_Source;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_AttributeSchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_AttributeType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_DefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_FixedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_RefName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_SchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;get_SchemaTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;set_DefaultValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;set_FixedValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;set_RefName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;set_SchemaType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttribute;false;set_SchemaTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;get_RedefinedAttributeGroup;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroup;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroupRef;false;get_RefName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaAttributeGroupRef;false;set_RefName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaChoice;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml.Schema;XmlSchemaCollection;false;Add;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier].Element;value | +| System.Xml.Schema;XmlSchemaCollection;false;Add;(System.Xml.Schema.XmlSchema,System.Xml.XmlResolver);;Argument[0];ReturnValue;generated:taint | | System.Xml.Schema;XmlSchemaCollection;false;Add;(System.Xml.Schema.XmlSchemaCollection);;Argument[0];Argument[Qualifier].Element;value | | System.Xml.Schema;XmlSchemaCollection;false;CopyTo;(System.Xml.Schema.XmlSchema[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Schema;XmlSchemaCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Xml.Schema.XmlSchemaCollectionEnumerator.Current];value | +| System.Xml.Schema;XmlSchemaCollection;false;XmlSchemaCollection;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaCollection;false;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaCollection;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Xml.Schema;XmlSchemaComplexContent;false;get_Content;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContent;false;set_Content;(System.Xml.Schema.XmlSchemaContent);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentExtension;false;set_Particle;(System.Xml.Schema.XmlSchemaParticle);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexContentRestriction;false;set_Particle;(System.Xml.Schema.XmlSchemaParticle);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_AttributeUses;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_AttributeWildcard;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_ContentModel;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_ContentTypeParticle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;set_ContentModel;(System.Xml.Schema.XmlSchemaContentModel);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaComplexType;false;set_Particle;(System.Xml.Schema.XmlSchemaParticle);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type,System.Xml.IXmlNamespaceResolver);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type,System.Xml.IXmlNamespaceResolver);;Argument[2];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDatatype;true;ChangeType;(System.Object,System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDocumentation;false;get_Language;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDocumentation;false;get_Markup;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDocumentation;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaDocumentation;false;set_Language;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaDocumentation;false;set_Markup;(System.Xml.XmlNode[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaDocumentation;false;set_Source;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_Constraints;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_DefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_ElementSchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_ElementType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_FixedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_RefName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_SchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_SchemaTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;get_SubstitutionGroup;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_DefaultValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_FixedValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_RefName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_SchemaType;(System.Xml.Schema.XmlSchemaType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_SchemaTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaElement;false;set_SubstitutionGroup;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaException;false;XmlSchemaException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaException;false;get_SourceSchemaObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaException;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;get_Schema;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;get_SchemaLocation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;get_UnhandledAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;set_Id;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;set_Schema;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;set_SchemaLocation;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaExternal;false;set_UnhandledAttributes;(System.Xml.XmlAttribute[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaFacet;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaFacet;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaGroup;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaGroup;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaGroup;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaGroup;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaGroup;false;set_Particle;(System.Xml.Schema.XmlSchemaGroupBase);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaGroupRef;false;get_Particle;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaGroupRef;false;get_RefName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaGroupRef;false;set_RefName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaIdentityConstraint;false;get_Fields;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaIdentityConstraint;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaIdentityConstraint;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaIdentityConstraint;false;get_Selector;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaIdentityConstraint;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaIdentityConstraint;false;set_Selector;(System.Xml.Schema.XmlSchemaXPath);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaImport;false;get_Annotation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaImport;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaImport;false;set_Annotation;(System.Xml.Schema.XmlSchemaAnnotation);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaImport;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInclude;false;get_Annotation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInclude;false;set_Annotation;(System.Xml.Schema.XmlSchemaAnnotation);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[Qualifier];Argument[1];generated:taint | +| System.Xml.Schema;XmlSchemaInference;false;InferSchema;(System.Xml.XmlReader,System.Xml.Schema.XmlSchemaSet);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInferenceException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;get_MemberType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;get_SchemaAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;get_SchemaElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;get_SchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;set_MemberType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;set_SchemaAttribute;(System.Xml.Schema.XmlSchemaAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;set_SchemaElement;(System.Xml.Schema.XmlSchemaElement);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaInfo;false;set_SchemaType;(System.Xml.Schema.XmlSchemaType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaKeyref;false;get_Refer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaKeyref;false;set_Refer;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaNotation;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaNotation;false;get_Public;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaNotation;false;get_System;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaNotation;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaNotation;false;set_Public;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaNotation;false;set_System;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaObject;false;get_Namespaces;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaObject;false;get_Parent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaObject;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaObject;false;set_Namespaces;(System.Xml.Serialization.XmlSerializerNamespaces);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaObject;false;set_Parent;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaObject;false;set_SourceUri;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Schema;XmlSchemaObjectCollection;false;Add;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier].Element;value | | System.Xml.Schema;XmlSchemaObjectCollection;false;CopyTo;(System.Xml.Schema.XmlSchemaObject[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Schema;XmlSchemaObjectCollection;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Xml.Schema.XmlSchemaObjectEnumerator.Current];value | | System.Xml.Schema;XmlSchemaObjectCollection;false;Insert;(System.Int32,System.Xml.Schema.XmlSchemaObject);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Schema;XmlSchemaObjectCollection;false;Remove;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaObjectCollection;false;XmlSchemaObjectCollection;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Schema;XmlSchemaObjectCollection;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Schema;XmlSchemaObjectCollection;false;set_Item;(System.Int32,System.Xml.Schema.XmlSchemaObject);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Schema;XmlSchemaObjectEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaObjectTable;false;get_Names;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaObjectTable;false;get_Values;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaRedefine;false;get_AttributeGroups;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaRedefine;false;get_Groups;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaRedefine;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaRedefine;false;get_SchemaTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSequence;false;get_Items;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.String,System.Xml.XmlReader);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.Xml.Schema.XmlSchema);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Add;(System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;CopyTo;(System.Xml.Schema.XmlSchema[],System.Int32);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Remove;(System.Xml.Schema.XmlSchema);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Reprocess;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Reprocess;(System.Xml.Schema.XmlSchema);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;Schemas;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;XmlSchemaSet;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;get_CompilationSettings;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;get_GlobalAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;get_GlobalElements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;get_GlobalTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;set_CompilationSettings;(System.Xml.Schema.XmlSchemaCompilationSettings);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSet;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContent;false;get_Content;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContent;false;set_Content;(System.Xml.Schema.XmlSchemaContent);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentExtension;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentExtension;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentExtension;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentExtension;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentExtension;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_AnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_Attributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;get_Facets;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;set_AnyAttribute;(System.Xml.Schema.XmlSchemaAnyAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;set_BaseType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleContentRestriction;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleType;false;get_Content;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleType;false;set_Content;(System.Xml.Schema.XmlSchemaSimpleTypeContent);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeList;false;get_BaseItemType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeList;false;get_ItemType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeList;false;get_ItemTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeList;false;set_BaseItemType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeList;false;set_ItemType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeList;false;set_ItemTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;get_BaseType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;get_BaseTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;get_Facets;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;set_BaseType;(System.Xml.Schema.XmlSchemaSimpleType);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeRestriction;false;set_BaseTypeName;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeUnion;false;get_BaseMemberTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeUnion;false;get_BaseTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeUnion;false;get_MemberTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaSimpleTypeUnion;false;set_MemberTypes;(System.Xml.XmlQualifiedName[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaType;false;get_BaseSchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaType;false;get_BaseXmlSchemaType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaType;false;get_Datatype;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaType;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaType;false;get_QualifiedName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaType;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidationException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaValidationException;false;SetSourceObject;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidationException;false;get_SourceObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;AddSchema;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;GetExpectedAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;GetExpectedParticles;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;Initialize;(System.Xml.Schema.XmlSchemaObject);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;SkipToEndElement;(System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateAttribute;(System.String,System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[2];Argument[3];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateAttribute;(System.String,System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateAttribute;(System.String,System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[2];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateAttribute;(System.String,System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo,System.String,System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo,System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateElement;(System.String,System.String,System.Xml.Schema.XmlSchemaInfo,System.String,System.String,System.String,System.String);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[1];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateEndElement;(System.Xml.Schema.XmlSchemaInfo,System.Object);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateText;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;ValidateWhitespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;XmlSchemaValidator;(System.Xml.XmlNameTable,System.Xml.Schema.XmlSchemaSet,System.Xml.IXmlNamespaceResolver,System.Xml.Schema.XmlSchemaValidationFlags);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;XmlSchemaValidator;(System.Xml.XmlNameTable,System.Xml.Schema.XmlSchemaSet,System.Xml.IXmlNamespaceResolver,System.Xml.Schema.XmlSchemaValidationFlags);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;XmlSchemaValidator;(System.Xml.XmlNameTable,System.Xml.Schema.XmlSchemaSet,System.Xml.IXmlNamespaceResolver,System.Xml.Schema.XmlSchemaValidationFlags);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;get_LineInfoProvider;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;get_ValidationEventSender;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;set_LineInfoProvider;(System.Xml.IXmlLineInfo);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;set_SourceUri;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;set_ValidationEventSender;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaValidator;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Schema;XmlSchemaXPath;false;get_XPath;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Schema;XmlSchemaXPath;false;set_XPath;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;Add;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;Add;(System.String,System.Object);;Argument[Qualifier];Argument[1];generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;AddUnique;(System.String,System.Object);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;AddUnique;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;AddUnique;(System.String,System.Object);;Argument[Qualifier];Argument[1];generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;MakeUnique;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;CodeIdentifiers;false;ToArray;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;ImportContext;false;ImportContext;(System.Xml.Serialization.CodeIdentifiers,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;ImportContext;false;get_TypeIdentifiers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;ImportContext;false;get_Warnings;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;SoapAttributeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;get_AttributeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;set_AttributeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributeAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributeOverrides;false;get_Item;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributeOverrides;false;get_Item;(System.Type,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributes;false;get_SoapAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributes;false;get_SoapDefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributes;false;get_SoapElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributes;false;get_SoapEnum;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributes;false;get_SoapType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapAttributes;false;set_SoapAttribute;(System.Xml.Serialization.SoapAttributeAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributes;false;set_SoapDefaultValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributes;false;set_SoapElement;(System.Xml.Serialization.SoapElementAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributes;false;set_SoapEnum;(System.Xml.Serialization.SoapEnumAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapAttributes;false;set_SoapType;(System.Xml.Serialization.SoapTypeAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapElementAttribute;false;SoapElementAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapElementAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapElementAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapElementAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapElementAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapEnumAttribute;false;SoapEnumAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapEnumAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapEnumAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapIncludeAttribute;false;SoapIncludeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapIncludeAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapIncludeAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[]);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean,System.Xml.Serialization.XmlMappingAccess);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportTypeMapping;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportTypeMapping;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;ImportTypeMapping;(System.Type,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;SoapReflectionImporter;(System.Xml.Serialization.SoapAttributeOverrides,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapReflectionImporter;false;SoapReflectionImporter;(System.Xml.Serialization.SoapAttributeOverrides,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapSchemaMember;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapSchemaMember;false;get_MemberType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapSchemaMember;false;set_MemberName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapSchemaMember;false;set_MemberType;(System.Xml.XmlQualifiedName);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;SoapTypeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;SoapTypeAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;SoapTypeAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;SoapTypeAttribute;false;set_TypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;UnreferencedObjectEventArgs;false;UnreferencedObjectEventArgs;(System.Object,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;UnreferencedObjectEventArgs;false;UnreferencedObjectEventArgs;(System.Object,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;UnreferencedObjectEventArgs;false;get_UnreferencedId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;UnreferencedObjectEventArgs;false;get_UnreferencedObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;XmlAnyElementAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;XmlAnyElementAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;XmlAnyElementAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAnyElementAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlAnyElementAttributes;false;Add;(System.Xml.Serialization.XmlAnyElementAttribute);;Argument[0];Argument[Qualifier].Element;value | | System.Xml.Serialization;XmlAnyElementAttributes;false;CopyTo;(System.Xml.Serialization.XmlAnyElementAttribute[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Serialization;XmlAnyElementAttributes;false;Insert;(System.Int32,System.Xml.Serialization.XmlAnyElementAttribute);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlAnyElementAttributes;false;Remove;(System.Xml.Serialization.XmlAnyElementAttribute);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlAnyElementAttributes;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Serialization;XmlAnyElementAttributes;false;set_Item;(System.Int32,System.Xml.Serialization.XmlAnyElementAttribute);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlArrayAttribute;false;XmlArrayAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlArrayAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlArrayAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;XmlArrayItemAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;XmlArrayItemAttribute;(System.String,System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;XmlArrayItemAttribute;(System.String,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;XmlArrayItemAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlArrayItemAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlArrayItemAttributes;false;Add;(System.Xml.Serialization.XmlArrayItemAttribute);;Argument[0];Argument[Qualifier].Element;value | | System.Xml.Serialization;XmlArrayItemAttributes;false;CopyTo;(System.Xml.Serialization.XmlArrayItemAttribute[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Serialization;XmlArrayItemAttributes;false;Insert;(System.Int32,System.Xml.Serialization.XmlArrayItemAttribute);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlArrayItemAttributes;false;Remove;(System.Xml.Serialization.XmlArrayItemAttribute);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlArrayItemAttributes;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Serialization;XmlArrayItemAttributes;false;set_Item;(System.Int32,System.Xml.Serialization.XmlArrayItemAttribute);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlAttributeAttribute;false;XmlAttributeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;XmlAttributeAttribute;(System.String,System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;XmlAttributeAttribute;(System.String,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;XmlAttributeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;get_AttributeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;set_AttributeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributeEventArgs;false;get_Attr;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeEventArgs;false;get_ExpectedAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeEventArgs;false;get_ObjectBeingDeserialized;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributeOverrides;false;get_Item;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlAnyAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlAnyElements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlArray;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlArrayItems;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlChoiceIdentifier;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlDefaultValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlElements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlEnum;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlRoot;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlText;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;get_XmlType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlAnyAttribute;(System.Xml.Serialization.XmlAnyAttributeAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlArray;(System.Xml.Serialization.XmlArrayAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlAttribute;(System.Xml.Serialization.XmlAttributeAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlDefaultValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlEnum;(System.Xml.Serialization.XmlEnumAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlRoot;(System.Xml.Serialization.XmlRootAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlText;(System.Xml.Serialization.XmlTextAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlAttributes;false;set_XmlType;(System.Xml.Serialization.XmlTypeAttribute);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlChoiceIdentifierAttribute;false;XmlChoiceIdentifierAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlChoiceIdentifierAttribute;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlChoiceIdentifierAttribute;false;set_MemberName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlDeserializationEvents;false;get_OnUnknownAttribute;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlDeserializationEvents;false;get_OnUnknownElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlDeserializationEvents;false;get_OnUnknownNode;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlDeserializationEvents;false;get_OnUnreferencedObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;XmlElementAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;XmlElementAttribute;(System.String,System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;XmlElementAttribute;(System.String,System.Type);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;XmlElementAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlElementAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlElementAttributes;false;Add;(System.Xml.Serialization.XmlElementAttribute);;Argument[0];Argument[Qualifier].Element;value | | System.Xml.Serialization;XmlElementAttributes;false;CopyTo;(System.Xml.Serialization.XmlElementAttribute[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Serialization;XmlElementAttributes;false;Insert;(System.Int32,System.Xml.Serialization.XmlElementAttribute);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlElementAttributes;false;Remove;(System.Xml.Serialization.XmlElementAttribute);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlElementAttributes;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Serialization;XmlElementAttributes;false;set_Item;(System.Int32,System.Xml.Serialization.XmlElementAttribute);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlElementEventArgs;false;get_Element;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementEventArgs;false;get_ExpectedElements;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlElementEventArgs;false;get_ObjectBeingDeserialized;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlEnumAttribute;false;XmlEnumAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlEnumAttribute;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlEnumAttribute;false;set_Name;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlIncludeAttribute;false;XmlIncludeAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlIncludeAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlIncludeAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlMapping;false;SetKey;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlMapping;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlMapping;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlMapping;false;get_XsdElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlMemberMapping;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlMembersMapping;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlNodeEventArgs;false;get_LocalName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlNodeEventArgs;false;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlNodeEventArgs;false;get_NamespaceURI;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlNodeEventArgs;false;get_ObjectBeingDeserialized;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlNodeEventArgs;false;get_Text;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean,System.Xml.Serialization.XmlMappingAccess);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportMembersMapping;(System.String,System.String,System.Xml.Serialization.XmlReflectionMember[],System.Boolean,System.Boolean,System.Boolean,System.Xml.Serialization.XmlMappingAccess);;Argument[2].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;ImportTypeMapping;(System.Type,System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;XmlReflectionImporter;(System.Xml.Serialization.XmlAttributeOverrides,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionImporter;false;XmlReflectionImporter;(System.Xml.Serialization.XmlAttributeOverrides,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;get_MemberName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;get_MemberType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;get_SoapAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;get_XmlAttributes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;set_MemberName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;set_MemberType;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;set_SoapAttributes;(System.Xml.Serialization.SoapAttributes);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlReflectionMember;false;set_XmlAttributes;(System.Xml.Serialization.XmlAttributes);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;XmlRootAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;get_ElementName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;set_ElementName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlRootAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaEnumerator;false;XmlSchemaEnumerator;(System.Xml.Serialization.XmlSchemas);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaEnumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSchemaExporter;false;ExportMembersMapping;(System.Xml.Serialization.XmlMembersMapping);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaExporter;false;ExportMembersMapping;(System.Xml.Serialization.XmlMembersMapping,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaExporter;false;ExportTypeMapping;(System.Xml.Serialization.XmlMembersMapping);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaExporter;false;ExportTypeMapping;(System.Xml.Serialization.XmlTypeMapping);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaExporter;false;XmlSchemaExporter;(System.Xml.Serialization.XmlSchemas);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaProviderAttribute;false;XmlSchemaProviderAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemaProviderAttribute;false;get_MethodName;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Schema.XmlSchema,System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Schema.XmlSchema,System.Uri);;Argument[1];Argument[0];generated:taint | +| System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Schema.XmlSchema,System.Uri);;Argument[1];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlSchemas;false;Add;(System.Xml.Serialization.XmlSchemas);;Argument[0];Argument[Qualifier].Element;value | | System.Xml.Serialization;XmlSchemas;false;CopyTo;(System.Xml.Schema.XmlSchema[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | | System.Xml.Serialization;XmlSchemas;false;Find;(System.Xml.XmlQualifiedName,System.Type);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Serialization;XmlSchemas;false;Insert;(System.Int32,System.Xml.Schema.XmlSchema);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlSchemas;false;OnInsert;(System.Int32,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemas;false;OnSet;(System.Int32,System.Object,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSchemas;false;Remove;(System.Xml.Schema.XmlSchema);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml.Serialization;XmlSchemas;false;get_Item;(System.Int32);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Serialization;XmlSchemas;false;get_Item;(System.String);;Argument[Qualifier].Element;ReturnValue;value | | System.Xml.Serialization;XmlSchemas;false;set_Item;(System.Int32,System.Xml.Schema.XmlSchema);;Argument[1];Argument[Qualifier].Element;value | +| System.Xml.Serialization;XmlSerializationReader+CollectionFixup;false;get_Callback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader+CollectionFixup;false;get_Collection;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader+CollectionFixup;false;get_CollectionItems;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader+Fixup;false;get_Callback;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader+Fixup;false;get_Ids;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader+Fixup;false;get_Source;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader+Fixup;false;set_Source;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;AddFixup;(System.Xml.Serialization.XmlSerializationReader+CollectionFixup);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;AddFixup;(System.Xml.Serialization.XmlSerializationReader+Fixup);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;AddTarget;(System.String,System.Object);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;CollapseWhitespace;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;EnsureArrayIndex;(System.Array,System.Int32,System.Type);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;GetTarget;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadNullableString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadReference;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadReferencedElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadReferencedElement;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadReferencingElement;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadReferencingElement;(System.String,System.String,System.Boolean,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadReferencingElement;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable,System.Boolean);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadSerializable;(System.Xml.Serialization.IXmlSerializable,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadString;(System.String,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadString;(System.String,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ReadTypedPrimitive;(System.Xml.XmlQualifiedName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ShrinkArray;(System.Array,System.Int32,System.Type,System.Boolean);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ToByteArrayBase64;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ToXmlNCName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ToXmlName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ToXmlNmToken;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;ToXmlNmTokens;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;get_Document;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationReader;false;get_Reader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromByteArrayBase64;(System.Byte[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromByteArrayHex;(System.Byte[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromEnum;(System.Int64,System.String[],System.Int64[]);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromEnum;(System.Int64,System.String[],System.Int64[],System.String);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromXmlNCName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromXmlName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromXmlNmToken;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromXmlNmTokens;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromXmlQualifiedName;(System.Xml.XmlQualifiedName);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;FromXmlQualifiedName;(System.Xml.XmlQualifiedName,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.Byte[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.Byte[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.Byte[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteAttribute;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementEncoded;(System.Xml.XmlNode,System.String,System.String,System.Boolean,System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementLiteral;(System.Xml.XmlNode,System.String,System.String,System.Boolean,System.Boolean);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementString;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementString;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementString;(System.String,System.String,System.String,System.Xml.XmlQualifiedName);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementString;(System.String,System.String,System.Xml.XmlQualifiedName);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.Byte[]);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.Byte[],System.Xml.XmlQualifiedName);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.Byte[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.Byte[],System.Xml.XmlQualifiedName);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.String,System.Xml.XmlQualifiedName);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteElementStringRaw;(System.String,System.String,System.Xml.XmlQualifiedName);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteId;(System.Object);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringEncoded;(System.String,System.String,System.String,System.Xml.XmlQualifiedName);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringEncodedRaw;(System.String,System.String,System.Byte[],System.Xml.XmlQualifiedName);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringEncodedRaw;(System.String,System.String,System.String,System.Xml.XmlQualifiedName);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringLiteral;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringLiteralRaw;(System.String,System.String,System.Byte[]);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteNullableStringLiteralRaw;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type,System.Boolean);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type,System.Boolean,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WritePotentiallyReferencingElement;(System.String,System.String,System.Object,System.Type,System.Boolean,System.Boolean);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteReferencingElement;(System.String,System.String,System.Object);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteReferencingElement;(System.String,System.String,System.Object,System.Boolean);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteRpcResult;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteRpcResult;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteSerializable;(System.Xml.Serialization.IXmlSerializable,System.String,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteSerializable;(System.Xml.Serialization.IXmlSerializable,System.String,System.String,System.Boolean,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteTypedPrimitive;(System.String,System.String,System.Object,System.Boolean);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteValue;(System.Byte[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteXmlAttribute;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteXmlAttribute;(System.Xml.XmlNode,System.Object);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteXsiType;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;WriteXsiType;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;get_Writer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializationWriter;false;set_Writer;(System.Xml.XmlWriter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader,System.String,System.Xml.Serialization.XmlDeserializationEvents);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader,System.String,System.Xml.Serialization.XmlDeserializationEvents);;Argument[Qualifier];Argument[2];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;Deserialize;(System.Xml.XmlReader,System.Xml.Serialization.XmlDeserializationEvents);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;FromMappings;(System.Xml.Serialization.XmlMapping[]);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;FromMappings;(System.Xml.Serialization.XmlMapping[],System.Type);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;FromMappings;(System.Xml.Serialization.XmlMapping[],System.Type);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[4];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializer;false;XmlSerializer;(System.Xml.Serialization.XmlTypeMapping);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;XmlSerializerAssemblyAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;XmlSerializerAssemblyAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;get_AssemblyName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;get_CodeBase;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;set_AssemblyName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerAssemblyAttribute;false;set_CodeBase;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[3];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String);;Argument[4];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[3];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlAttributeOverrides,System.Type[],System.Xml.Serialization.XmlRootAttribute,System.String,System.String);;Argument[4];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlRootAttribute);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Type,System.Xml.Serialization.XmlRootAttribute);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerFactory;false;CreateSerializer;(System.Xml.Serialization.XmlTypeMapping);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;XmlSerializerVersionAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;get_ParentAssemblyId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;set_ParentAssemblyId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlSerializerVersionAttribute;false;set_Version;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlTextAttribute;false;XmlTextAttribute;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlTextAttribute;false;get_DataType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlTextAttribute;false;get_Type;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlTextAttribute;false;set_DataType;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlTextAttribute;false;set_Type;(System.Type);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlTypeAttribute;false;XmlTypeAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlTypeAttribute;false;get_Namespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlTypeAttribute;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Serialization;XmlTypeAttribute;false;set_Namespace;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Serialization;XmlTypeAttribute;false;set_TypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.XPath;Extensions;false;CreateNavigator;(System.Xml.Linq.XNode);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;Extensions;false;CreateNavigator;(System.Xml.Linq.XNode,System.Xml.XmlNameTable);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;Extensions;false;CreateNavigator;(System.Xml.Linq.XNode,System.Xml.XmlNameTable);;Argument[1];ReturnValue;generated:taint | +| System.Xml.XPath;XDocumentExtensions;false;ToXPathNavigable;(System.Xml.Linq.XNode);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathDocument;false;CreateNavigator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathDocument;false;XPathDocument;(System.Xml.XmlReader,System.Xml.XmlSpace);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.XPath;XPathException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.XPath;XPathException;false;XPathException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.XPath;XPathException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathExpression;false;Compile;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathExpression;false;Compile;(System.String,System.Xml.IXmlNamespaceResolver);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathExpression;false;Compile;(System.String,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml.XPath;XPathItem;true;ValueAs;(System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;ValueAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;ValueAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;get_TypedValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;get_ValueAsDateTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;false;get_XmlType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;Compile;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;CreateNavigator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;Evaluate;(System.Xml.XPath.XPathExpression);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;Evaluate;(System.Xml.XPath.XPathExpression,System.Xml.XPath.XPathNodeIterator);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;Evaluate;(System.Xml.XPath.XPathExpression,System.Xml.XPath.XPathNodeIterator);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;GetAttribute;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;GetNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;LookupNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;LookupPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;ReadSubtree;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;Select;(System.Xml.XPath.XPathExpression);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;SelectSingleNode;(System.Xml.XPath.XPathExpression);;Argument[0];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;WriteSubtree;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.XPath;XPathNavigator;true;get_InnerXml;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;get_OuterXml;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNavigator;true;get_XmlLang;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNodeIterator;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.XPath;XPathNodeIterator;true;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XslCompiledTransform;false;Load;(System.Reflection.MethodInfo,System.Byte[],System.Type[]);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[2];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[0];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[2];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;Transform;(System.Xml.XPath.XPathNavigator,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XslTransform;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Xsl;XsltArgumentList;false;GetExtensionObject;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XsltArgumentList;false;GetParam;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XsltArgumentList;false;RemoveExtensionObject;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XsltArgumentList;false;RemoveParam;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XsltCompileException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Xsl;XsltException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml.Xsl;XsltException;false;XsltException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml.Xsl;XsltException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml.Xsl;XsltException;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;NameTable;false;Add;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;NameTable;false;Add;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;NameTable;false;Add;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;NameTable;false;Add;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;NameTable;false;Get;(System.Char[],System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;NameTable;false;Get;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;UniqueId;false;UniqueId;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;UniqueId;false;UniqueId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlAttribute;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlAttribute;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlAttribute;false;get_OwnerElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttribute;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlAttributeCollection;false;Append;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;Append;(System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttributeCollection;false;Append;(System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlAttributeCollection;false;CopyTo;(System.Xml.XmlAttribute[],System.Int32);;Argument[Qualifier].Element;Argument[0].Element;value | +| System.Xml;XmlAttributeCollection;false;InsertAfter;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;InsertAfter;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttributeCollection;false;InsertAfter;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;InsertBefore;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;InsertBefore;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttributeCollection;false;InsertBefore;(System.Xml.XmlAttribute,System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;Prepend;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;Prepend;(System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttributeCollection;false;Prepend;(System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;Remove;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;RemoveAt;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;SetNamedItem;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;SetNamedItem;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlAttributeCollection;false;SetNamedItem;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;get_ItemOf;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;get_ItemOf;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;get_ItemOf;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlAttributeCollection;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System.Xml;XmlBinaryReaderSession;false;Add;(System.Int32,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlBinaryReaderSession;false;Add;(System.Int32,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlBinaryReaderSession;false;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlBinaryReaderSession;false;TryLookup;(System.String,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlBinaryReaderSession;false;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlCDataSection;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlCDataSection;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlCharacterData;false;XmlCharacterData;(System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlCharacterData;false;set_InnerText;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlCharacterData;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlCharacterData;true;AppendData;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlCharacterData;true;Substring;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlCharacterData;true;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlCharacterData;true;set_Data;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlComment;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;DecodeName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;EncodeLocalName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;EncodeName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;EncodeNmToken;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyNCName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyNMTOKEN;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyPublicId;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyTOKEN;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyWhitespace;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlConvert;false;VerifyXmlChars;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;CreateNavigator;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;GetElementFromRow;(System.Data.DataRow);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;GetElementsByTagName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;GetRowFromElement;(System.Xml.XmlElement);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDataDocument;false;Load;(System.IO.Stream);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDataDocument;false;Load;(System.IO.TextReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDataDocument;false;Load;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDataDocument;false;Load;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDataDocument;false;XmlDataDocument;(System.Data.DataSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDataDocument;false;get_DataSet;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDeclaration;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDeclaration;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlDeclaration;false;XmlDeclaration;(System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDeclaration;false;XmlDeclaration;(System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDeclaration;false;XmlDeclaration;(System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlDeclaration;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDeclaration;false;get_Standalone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDeclaration;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDeclaration;false;set_Encoding;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDeclaration;false;set_Standalone;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionary;false;Add;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionary;false;Add;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionary;false;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionary;false;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);;Argument[3];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[3];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[5];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);;Argument[3];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateBinaryReader;(System.IO.Stream,System.Xml.XmlDictionaryReaderQuotas);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateDictionaryReader;(System.Xml.XmlReader);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;CreateTextReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;ReadContentAsString;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;false;ReadString;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;GetAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;GetNonAtomizedNames;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadArray;(System.String,System.String,System.DateTime[],System.Int32,System.Int32);;Argument[Qualifier];Argument[2].Element;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadArray;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.DateTime[],System.Int32,System.Int32);;Argument[Qualifier];Argument[2].Element;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadContentAsQualifiedName;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadContentAsString;(System.String[],System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadContentAsString;(System.String[],System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadContentAsString;(System.Xml.XmlDictionaryString[],System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadContentAsString;(System.Xml.XmlDictionaryString[],System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadContentAsUniqueId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadDateTimeArray;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadDateTimeArray;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryReader;true;ReadElementContentAsUniqueId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryString;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryString;false;XmlDictionaryString;(System.Xml.IXmlDictionary,System.String,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryString;false;XmlDictionaryString;(System.Xml.IXmlDictionary,System.String,System.Int32);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryString;false;get_Dictionary;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryString;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateBinaryWriter;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;CreateDictionaryWriter;(System.Xml.XmlWriter);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteAttributeString;(System.String,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteAttributeString;(System.String,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteAttributeString;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteAttributeString;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteBase64Async;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteElementString;(System.String,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteElementString;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;false;WriteStartAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteNode;(System.Xml.XmlDictionaryReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteQualifiedName;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteStartAttribute;(System.String,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteString;(System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteTextNode;(System.Xml.XmlDictionaryReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteValue;(System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlnsAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlnsAttribute;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlnsAttribute;(System.String,System.Xml.XmlDictionaryString);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDictionaryWriter;true;WriteXmlnsAttribute;(System.String,System.Xml.XmlDictionaryString);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocument;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateDocumentFragment;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateDocumentType;(System.String,System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateDocumentType;(System.String,System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateDocumentType;(System.String,System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateDocumentType;(System.String,System.String,System.String,System.String);;Argument[3];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateEntityReference;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNavigator;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNavigator;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String,System.String);;Argument[3];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateNode;(System.Xml.XmlNodeType,System.String,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateProcessingInstruction;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateProcessingInstruction;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateXmlDeclaration;(System.String,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateXmlDeclaration;(System.String,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;CreateXmlDeclaration;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;GetElementsByTagName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;GetElementsByTagName;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;GetElementsByTagName;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;ImportNode;(System.Xml.XmlNode,System.Boolean);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;ImportNode;(System.Xml.XmlNode,System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlDocument;false;Load;(System.IO.Stream);;Argument[0];Argument[Qualifier];taint | | System.Xml;XmlDocument;false;Load;(System.IO.TextReader);;Argument[0];Argument[Qualifier];taint | | System.Xml;XmlDocument;false;Load;(System.String);;Argument[0];Argument[Qualifier];taint | | System.Xml;XmlDocument;false;Load;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];taint | +| System.Xml;XmlDocument;false;Save;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlDocument;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlDocument;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlDocument;false;XmlDocument;(System.Xml.XmlImplementation);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocument;false;get_DocumentElement;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;get_DocumentType;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;get_Implementation;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;get_Schemas;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocument;false;set_Schemas;(System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocument;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocumentFragment;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocumentFragment;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlDocumentFragment;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlDocumentFragment;false;XmlDocumentFragment;(System.Xml.XmlDocument);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlDocumentType;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocumentType;false;XmlDocumentType;(System.String,System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocumentType;false;XmlDocumentType;(System.String,System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocumentType;false;XmlDocumentType;(System.String,System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocumentType;false;XmlDocumentType;(System.String,System.String,System.String,System.String,System.Xml.XmlDocument);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlDocumentType;false;get_Entities;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocumentType;false;get_InternalSubset;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocumentType;false;get_Notations;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocumentType;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlDocumentType;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetAttribute;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetAttribute;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetAttributeNode;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetAttributeNode;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetElementsByTagName;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetElementsByTagName;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;GetElementsByTagName;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;RemoveAttributeAt;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;RemoveAttributeNode;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;RemoveAttributeNode;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlElement;false;SetAttribute;(System.String,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;SetAttributeNode;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;SetAttributeNode;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;SetAttributeNode;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;SetAttributeNode;(System.Xml.XmlAttribute);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlElement;false;SetAttributeNode;(System.Xml.XmlAttribute);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlElement;false;SetAttributeNode;(System.Xml.XmlAttribute);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlElement;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlElement;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlElement;false;set_Prefix;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlEntity;false;get_NotationName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlEntity;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlEntity;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlEntityReference;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlEntityReference;false;WriteContentTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlEntityReference;false;XmlEntityReference;(System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlException;false;XmlException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlException;false;get_SourceUri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlImplementation;false;CreateDocument;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlImplementation;false;XmlImplementation;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | | System.Xml;XmlNamedNodeMap;false;GetNamedItem;(System.String);;Argument[Qualifier];ReturnValue;value | | System.Xml;XmlNamedNodeMap;false;GetNamedItem;(System.String,System.String);;Argument[Qualifier];ReturnValue;value | +| System.Xml;XmlNamedNodeMap;false;Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamedNodeMap;false;RemoveNamedItem;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamedNodeMap;false;RemoveNamedItem;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamedNodeMap;false;SetNamedItem;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlNamedNodeMap;false;SetNamedItem;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamespaceManager;false;LookupNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamespaceManager;false;LookupPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamespaceManager;false;XmlNamespaceManager;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlNamespaceManager;false;get_DefaultNamespace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNamespaceManager;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlNode;false;GetEnumerator;();;Argument[Qualifier].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value | | System.Xml;XmlNode;false;SelectNodes;(System.String);;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;false;SelectNodes;(System.String,System.Xml.XmlNamespaceManager);;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;false;SelectSingleNode;(System.String);;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;false;SelectSingleNode;(System.String,System.Xml.XmlNamespaceManager);;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlNode;true;AppendChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;AppendChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;AppendChild;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;AppendChild;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;CreateNavigator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;GetNamespaceOfPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;GetPrefixOfNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[1].Element;generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;InsertAfter;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[1].Element;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[1].Element;generated:taint | +| System.Xml;XmlNode;true;InsertBefore;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;PrependChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;PrependChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;PrependChild;(System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;PrependChild;(System.Xml.XmlNode);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;RemoveChild;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;RemoveChild;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[0].Element;generated:taint | +| System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[1].Element;ReturnValue;generated:taint | +| System.Xml;XmlNode;true;ReplaceChild;(System.Xml.XmlNode,System.Xml.XmlNode);;Argument[Qualifier];Argument[0].Element;generated:taint | | System.Xml;XmlNode;true;get_Attributes;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_BaseURI;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_ChildNodes;();;Argument[Qualifier];ReturnValue;taint | @@ -1628,6 +7882,8 @@ | System.Xml;XmlNode;true;get_InnerText;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_InnerXml;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_IsReadOnly;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlNode;true;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNode;true;get_Item;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | | System.Xml;XmlNode;true;get_LastChild;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_LocalName;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_Name;();;Argument[Qualifier];ReturnValue;taint | @@ -1642,6 +7898,69 @@ | System.Xml;XmlNode;true;get_PreviousText;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_SchemaInfo;();;Argument[Qualifier];ReturnValue;taint | | System.Xml;XmlNode;true;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[2].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;XmlNodeChangedEventArgs;(System.Xml.XmlNode,System.Xml.XmlNode,System.Xml.XmlNode,System.String,System.String,System.Xml.XmlNodeChangedAction);;Argument[4];Argument[Qualifier];generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;get_NewParent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;get_NewValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;get_Node;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;get_OldParent;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeChangedEventArgs;false;get_OldValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeList;true;get_ItemOf;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;GetAttribute;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;GetAttribute;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;LookupNamespace;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;LookupPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;XmlNodeReader;(System.Xml.XmlNode);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlNodeReader;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_LocalName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_NamespaceURI;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_Prefix;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNodeReader;false;get_XmlLang;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNotation;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlNotation;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[1].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[4];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[5];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[6];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[7];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;XmlParserContext;(System.Xml.XmlNameTable,System.Xml.XmlNamespaceManager,System.String,System.String,System.String,System.String,System.String,System.String,System.Xml.XmlSpace,System.Text.Encoding);;Argument[9];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_DocTypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_InternalSubset;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_NamespaceManager;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_PublicId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_SystemId;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;get_XmlLang;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlParserContext;false;set_BaseURI;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_DocTypeName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_Encoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_InternalSubset;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_NameTable;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_NamespaceManager;(System.Xml.XmlNamespaceManager);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_PublicId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_SystemId;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlParserContext;false;set_XmlLang;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlProcessingInstruction;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlProcessingInstruction;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlProcessingInstruction;false;XmlProcessingInstruction;(System.String,System.String,System.Xml.XmlDocument);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlProcessingInstruction;false;XmlProcessingInstruction;(System.String,System.String,System.Xml.XmlDocument);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlProcessingInstruction;false;get_Data;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlProcessingInstruction;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlProcessingInstruction;false;set_Data;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlProcessingInstruction;false;set_InnerText;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlProcessingInstruction;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlQualifiedName;false;ToString;(System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlQualifiedName;false;ToString;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | | System.Xml;XmlReader;false;Create;(System.IO.Stream);;Argument[0];ReturnValue;taint | | System.Xml;XmlReader;false;Create;(System.IO.Stream,System.Xml.XmlReaderSettings);;Argument[0];ReturnValue;taint | | System.Xml;XmlReader;false;Create;(System.IO.Stream,System.Xml.XmlReaderSettings,System.String);;Argument[0];ReturnValue;taint | @@ -1654,9 +7973,137 @@ | System.Xml;XmlReader;false;Create;(System.String,System.Xml.XmlReaderSettings);;Argument[0];ReturnValue;taint | | System.Xml;XmlReader;false;Create;(System.String,System.Xml.XmlReaderSettings,System.Xml.XmlParserContext);;Argument[0];ReturnValue;taint | | System.Xml;XmlReader;false;Create;(System.Xml.XmlReader,System.Xml.XmlReaderSettings);;Argument[0];ReturnValue;taint | +| System.Xml;XmlReader;true;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadContentAsObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadContentAsString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAsDateTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAsDateTime;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAsObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAsObject;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAsString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementContentAsString;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementString;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadElementString;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;ReadSubtree;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;get_Item;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;get_Item;(System.String,System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;get_Name;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReader;true;get_SchemaInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReaderSettings;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlReaderSettings;false;set_NameTable;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlReaderSettings;false;set_Schemas;(System.Xml.Schema.XmlSchemaSet);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlReaderSettings;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlResolver;true;ResolveUri;(System.Uri,System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlResolver;true;ResolveUri;(System.Uri,System.String);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlSecureResolver;false;XmlSecureResolver;(System.Xml.XmlResolver,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlSecureResolver;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlSignificantWhitespace;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlSignificantWhitespace;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlSignificantWhitespace;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlText;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlText;false;SplitText;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlText;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlText;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;GetRemainder;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextReader;false;LookupNamespace;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlTextReader;false;XmlTextReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;XmlTextReader;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;XmlTextReader;(System.String,System.IO.TextReader,System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;XmlTextReader;(System.String,System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;XmlTextReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;XmlTextReader;(System.Xml.XmlNameTable);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextReader;false;get_BaseURI;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextReader;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextReader;false;get_NameTable;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextReader;false;set_XmlResolver;(System.Xml.XmlResolver);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextWriter;false;LookupPrefix;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextWriter;false;WriteStartAttribute;(System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextWriter;false;XmlTextWriter;(System.IO.Stream,System.Text.Encoding);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextWriter;false;XmlTextWriter;(System.IO.TextWriter);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlTextWriter;false;get_BaseStream;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlTextWriter;false;get_XmlLang;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlUrlResolver;false;set_Credentials;(System.Net.ICredentials);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlUrlResolver;false;set_Proxy;(System.Net.IWebProxy);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlValidatingReader;false;LookupNamespace;(System.String);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlValidatingReader;false;XmlValidatingReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlValidatingReader;false;XmlValidatingReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlValidatingReader;false;XmlValidatingReader;(System.Xml.XmlReader);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlValidatingReader;false;get_Reader;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlValidatingReader;false;get_Schemas;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlWhitespace;false;CloneNode;(System.Boolean);;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlWhitespace;false;WriteTo;(System.Xml.XmlWriter);;Argument[Qualifier];Argument[0];generated:taint | +| System.Xml;XmlWhitespace;false;set_Value;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;Create;(System.IO.Stream);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.IO.Stream,System.Xml.XmlWriterSettings);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.IO.Stream,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.IO.TextWriter);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.IO.TextWriter,System.Xml.XmlWriterSettings);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.IO.TextWriter,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.String,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.Text.StringBuilder,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.Xml.XmlWriter);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.Xml.XmlWriter,System.Xml.XmlWriterSettings);;Argument[0];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;Create;(System.Xml.XmlWriter,System.Xml.XmlWriterSettings);;Argument[1];ReturnValue;generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeString;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteAttributeStringAsync;(System.String,System.String,System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteElementString;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteElementString;(System.String,System.String,System.String);;Argument[2];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteElementString;(System.String,System.String,System.String,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteStartAttribute;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;false;WriteStartAttribute;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteAttributes;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteAttributesAsync;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteNmToken;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteNode;(System.Xml.XPath.XPathNavigator,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteNode;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteNodeAsync;(System.Xml.XPath.XPathNavigator,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteNodeAsync;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteQualifiedName;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteValue;(System.Object);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriter;true;WriteValue;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriterSettings;false;get_Encoding;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlWriterSettings;false;get_IndentChars;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlWriterSettings;false;get_NewLineChars;();;Argument[Qualifier];ReturnValue;generated:taint | +| System.Xml;XmlWriterSettings;false;set_Encoding;(System.Text.Encoding);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriterSettings;false;set_IndentChars;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System.Xml;XmlWriterSettings;false;set_NewLineChars;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;AggregateException;false;AggregateException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;AggregateException;false;AggregateException;(System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System;AggregateException;false;GetBaseException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;AggregateException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;AggregateException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;AggregateException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;AppDomain;false;ApplyPolicy;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;ArgumentException;false;ArgumentException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;ArgumentException;false;ArgumentException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;ArgumentException;false;ArgumentException;(System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System;ArgumentException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;ArgumentException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArgumentException;false;get_ParamName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArgumentOutOfRangeException;false;ArgumentOutOfRangeException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;ArgumentOutOfRangeException;false;ArgumentOutOfRangeException;(System.String,System.Object,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;ArgumentOutOfRangeException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;ArgumentOutOfRangeException;false;get_ActualValue;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArgumentOutOfRangeException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Array;false;AsReadOnly<>;(T[]);;Argument[0].Element;ReturnValue.Element;value | | System;Array;false;Clone;();;Argument[0].Element;ReturnValue.Element;value | | System;Array;false;CopyTo;(System.Array,System.Int64);;Argument[Qualifier].Element;Argument[0].Element;value | +| System;Array;false;Fill<>;(T[],T);;Argument[1];Argument[0].Element;generated:taint | +| System;Array;false;Fill<>;(T[],T,System.Int32,System.Int32);;Argument[1];Argument[0].Element;generated:taint | | System;Array;false;Find<>;(T[],System.Predicate);;Argument[0].Element;Argument[1].Parameter[0];value | | System;Array;false;Find<>;(T[],System.Predicate);;Argument[0].Element;ReturnValue;value | | System;Array;false;FindAll<>;(T[],System.Predicate);;Argument[0].Element;Argument[1].Parameter[0];value | @@ -1667,6 +8114,23 @@ | System;Array;false;Reverse;(System.Array,System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | | System;Array;false;Reverse<>;(T[]);;Argument[0].Element;ReturnValue.Element;value | | System;Array;false;Reverse<>;(T[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value | +| System;Array;false;get_SyncRoot;();;Argument[Qualifier];ReturnValue;generated:value | +| System;ArraySegment<>+Enumerator;false;get_Current;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArraySegment<>;false;ArraySegment;(T[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System;ArraySegment<>;false;ArraySegment;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System;ArraySegment<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArraySegment<>;false;Slice;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArraySegment<>;false;Slice;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArraySegment<>;false;get_Array;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ArraySegment<>;false;get_Item;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;BadImageFormatException;false;BadImageFormatException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;BadImageFormatException;false;BadImageFormatException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;BadImageFormatException;false;BadImageFormatException;(System.String,System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System;BadImageFormatException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;BadImageFormatException;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;BadImageFormatException;false;get_FileName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;BadImageFormatException;false;get_FusionLog;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;BadImageFormatException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Boolean;false;Parse;(System.String);;Argument[0];ReturnValue;taint | | System;Boolean;false;TryParse;(System.ReadOnlySpan,System.Boolean);;Argument[0].Element;Argument[1];taint | | System;Boolean;false;TryParse;(System.ReadOnlySpan,System.Boolean);;Argument[0].Element;ReturnValue;taint | @@ -1999,6 +8463,61 @@ | System;Convert;false;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);;Argument[0].Element;Argument[1].Element;taint | | System;Convert;false;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);;Argument[0].Element;Argument[2];taint | | System;Convert;false;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);;Argument[0].Element;ReturnValue;taint | +| System;DBNull;false;ToType;(System.Type,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint | +| System;DateTime;false;GetDateTimeFormats;(System.Char,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;DateTime;false;ToDateTime;(System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:value | +| System;DateTime;false;ToLocalTime;();;Argument[Qualifier];ReturnValue;generated:value | +| System;DateTime;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System;DateTime;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;DateTime;false;ToType;(System.Type,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;DateTime;false;ToType;(System.Type,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint | +| System;DateTime;false;ToUniversalTime;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;DateTimeOffset;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;DateTimeOffset;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System;DateTimeOffset;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;Decimal;false;ToDecimal;(System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:value | +| System;Delegate;false;Combine;(System.Delegate,System.Delegate);;Argument[0];ReturnValue;generated:taint | +| System;Delegate;false;Combine;(System.Delegate,System.Delegate);;Argument[1];ReturnValue;generated:taint | +| System;Delegate;false;Combine;(System.Delegate[]);;Argument[0].Element;ReturnValue;generated:taint | +| System;Delegate;false;CreateDelegate;(System.Type,System.Reflection.MethodInfo,System.Boolean);;Argument[1];ReturnValue;generated:taint | +| System;Delegate;false;Delegate;(System.Object,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;Delegate;false;Delegate;(System.Object,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;Delegate;false;Delegate;(System.Type,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;Delegate;false;Delegate;(System.Type,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;Delegate;false;DynamicInvoke;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System;Delegate;false;Remove;(System.Delegate,System.Delegate);;Argument[0];ReturnValue;generated:taint | +| System;Delegate;false;RemoveAll;(System.Delegate,System.Delegate);;Argument[0];ReturnValue;generated:taint | +| System;Delegate;false;get_Method;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Delegate;false;get_Target;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Delegate;true;DynamicInvokeImpl;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | +| System;Delegate;true;GetInvocationList;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Delegate;true;GetMethodImpl;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Delegate;true;RemoveImpl;(System.Delegate);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Double;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System;Double;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;Double;false;ToType;(System.Type,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;Enum;false;GetUnderlyingType;(System.Type);;Argument[0];ReturnValue;generated:taint | +| System;Enum;false;ToType;(System.Type,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Environment;false;ExpandEnvironmentVariables;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;Exception;false;Exception;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;Exception;false;Exception;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;Exception;false;Exception;(System.String,System.Exception);;Argument[0];Argument[Qualifier];generated:taint | +| System;Exception;false;Exception;(System.String,System.Exception);;Argument[1];Argument[Qualifier];generated:taint | +| System;Exception;false;GetBaseException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Exception;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;Exception;false;get_HelpLink;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Exception;false;get_InnerException;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Exception;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Exception;false;get_StackTrace;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Exception;false;get_TargetSite;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Exception;false;set_HelpLink;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;Exception;false;set_Source;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;FormattableString;false;CurrentCulture;(System.FormattableString);;Argument[0];ReturnValue;generated:taint | +| System;FormattableString;false;Invariant;(System.FormattableString);;Argument[0];ReturnValue;generated:taint | +| System;FormattableString;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;FormattableString;false;ToString;(System.String,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Half;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System;Half;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | | System;Int32;false;Parse;(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider);;Argument[0].Element;ReturnValue;taint | | System;Int32;false;Parse;(System.String);;Argument[0];ReturnValue;taint | | System;Int32;false;Parse;(System.String,System.Globalization.NumberStyles);;Argument[0];ReturnValue;taint | @@ -2012,16 +8531,112 @@ | System;Int32;false;TryParse;(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Int32);;Argument[0];ReturnValue;taint | | System;Int32;false;TryParse;(System.String,System.Int32);;Argument[0];Argument[1];taint | | System;Int32;false;TryParse;(System.String,System.Int32);;Argument[0];ReturnValue;taint | +| System;IntPtr;false;IntPtr;(System.Void*);;Argument[0];Argument[Qualifier];generated:taint | +| System;IntPtr;false;ToPointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Lazy<,>;false;Lazy;(TMetadata);;Argument[0];Argument[Qualifier];generated:taint | +| System;Lazy<,>;false;Lazy;(TMetadata,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System;Lazy<,>;false;Lazy;(TMetadata,System.Threading.LazyThreadSafetyMode);;Argument[0];Argument[Qualifier];generated:taint | +| System;Lazy<,>;false;get_Metadata;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Lazy<>;false;Lazy;(System.Func);;Argument[0].ReturnValue;ReturnValue.Property[System.Lazy<>.Value];value | | System;Lazy<>;false;Lazy;(System.Func,System.Boolean);;Argument[0].ReturnValue;ReturnValue.Property[System.Lazy<>.Value];value | | System;Lazy<>;false;Lazy;(System.Func,System.Threading.LazyThreadSafetyMode);;Argument[0].ReturnValue;ReturnValue.Property[System.Lazy<>.Value];value | +| System;Lazy<>;false;Lazy;(T);;Argument[0];Argument[Qualifier];generated:taint | +| System;Lazy<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Lazy<>;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System;Memory<>;false;Memory;(T[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System;Memory<>;false;Memory;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System;Memory<>;false;Slice;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Memory<>;false;Slice;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Memory<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory;(System.String,System.Index);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory;(System.String,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory;(System.String,System.Range);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(System.ArraySegment);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(System.ArraySegment,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(System.ArraySegment,System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(T[]);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(T[],System.Index);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(T[],System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(T[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;AsMemory<>;(T[],System.Range);;Argument[0].Element;ReturnValue;generated:taint | +| System;MemoryExtensions;false;EnumerateRunes;(System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim;(System.Memory);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim;(System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim<>;(System.Memory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim<>;(System.Memory,T);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim<>;(System.ReadOnlyMemory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim<>;(System.ReadOnlyMemory,T);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim<>;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;Trim<>;(System.Span,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd;(System.Memory);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd;(System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd<>;(System.Memory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd<>;(System.Memory,T);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd<>;(System.ReadOnlyMemory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd<>;(System.ReadOnlyMemory,T);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd<>;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimEnd<>;(System.Span,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart;(System.Memory);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart;(System.ReadOnlyMemory);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart<>;(System.Memory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart<>;(System.Memory,T);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart<>;(System.ReadOnlyMemory,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart<>;(System.ReadOnlyMemory,T);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart<>;(System.ReadOnlySpan,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MemoryExtensions;false;TrimStart<>;(System.Span,System.ReadOnlySpan);;Argument[0];ReturnValue;generated:taint | +| System;MissingFieldException;false;MissingFieldException;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;MissingFieldException;false;MissingFieldException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;MissingFieldException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;MissingMemberException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;MissingMemberException;false;MissingMemberException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;MissingMemberException;false;MissingMemberException;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;MissingMemberException;false;MissingMemberException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;MissingMemberException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;MissingMethodException;false;MissingMethodException;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;MissingMethodException;false;MissingMethodException;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;MissingMethodException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;MulticastDelegate;false;CombineImpl;(System.Delegate);;Argument[Qualifier];ReturnValue;generated:value | +| System;MulticastDelegate;false;RemoveImpl;(System.Delegate);;Argument[Qualifier];ReturnValue;generated:value | +| System;NotFiniteNumberException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;Nullable;false;GetUnderlyingType;(System.Type);;Argument[0];ReturnValue;generated:taint | | System;Nullable<>;false;GetValueOrDefault;();;Argument[Qualifier].Property[System.Nullable<>.Value];ReturnValue;value | | System;Nullable<>;false;GetValueOrDefault;(T);;Argument[0];ReturnValue;value | | System;Nullable<>;false;GetValueOrDefault;(T);;Argument[Qualifier].Property[System.Nullable<>.Value];ReturnValue;value | | System;Nullable<>;false;Nullable;(T);;Argument[0];ReturnValue.Property[System.Nullable<>.Value];value | +| System;Nullable<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Nullable<>;false;get_HasValue;();;Argument[Qualifier].Property[System.Nullable<>.Value];ReturnValue;taint | | System;Nullable<>;false;get_Value;();;Argument[Qualifier];ReturnValue;taint | +| System;ObjectDisposedException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;ObjectDisposedException;false;ObjectDisposedException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;ObjectDisposedException;false;ObjectDisposedException;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;ObjectDisposedException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ObjectDisposedException;false;get_ObjectName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;OperatingSystem;false;Clone;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;OperatingSystem;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;OperatingSystem;false;get_ServicePack;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;OperatingSystem;false;get_Version;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;OperatingSystem;false;get_VersionString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;OperationCanceledException;false;OperationCanceledException;(System.String,System.Exception,System.Threading.CancellationToken);;Argument[2];Argument[Qualifier];generated:taint | +| System;OperationCanceledException;false;OperationCanceledException;(System.String,System.Threading.CancellationToken);;Argument[1];Argument[Qualifier];generated:taint | +| System;OperationCanceledException;false;OperationCanceledException;(System.Threading.CancellationToken);;Argument[0];Argument[Qualifier];generated:taint | +| System;OperationCanceledException;false;get_CancellationToken;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ReadOnlyMemory<>;false;ReadOnlyMemory;(T[]);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System;ReadOnlyMemory<>;false;ReadOnlyMemory;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[Qualifier];generated:taint | +| System;ReadOnlyMemory<>;false;Slice;(System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;ReadOnlyMemory<>;false;Slice;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;generated:taint | +| System;ReadOnlyMemory<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;ReadOnlySpan<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;RuntimeFieldHandle;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;RuntimeMethodHandle;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;RuntimeTypeHandle;false;get_Value;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;SequencePosition;false;GetObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;SequencePosition;false;SequencePosition;(System.Object,System.Int32);;Argument[0];Argument[Qualifier];generated:taint | +| System;Single;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;generated:taint | +| System;Single;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;Single;false;ToType;(System.Type,System.IFormatProvider);;Argument[1];ReturnValue;generated:taint | +| System;Span<>;false;GetEnumerator;();;Argument[Qualifier];ReturnValue;generated:taint | | System;String;false;Clone;();;Argument[Qualifier];ReturnValue;value | | System;String;false;Concat;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint | | System;String;false;Concat;(System.Object);;Argument[0];ReturnValue;taint | @@ -2052,6 +8667,7 @@ | System;String;false;Concat;(System.String[]);;Argument[0].Element;ReturnValue;taint | | System;String;false;Concat<>;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint | | System;String;false;Copy;(System.String);;Argument[0];ReturnValue;value | +| System;String;false;EnumerateRunes;();;Argument[Qualifier];ReturnValue;generated:taint | | System;String;false;Format;(System.IFormatProvider,System.String,System.Object);;Argument[1];ReturnValue;taint | | System;String;false;Format;(System.IFormatProvider,System.String,System.Object);;Argument[2];ReturnValue;taint | | System;String;false;Format;(System.IFormatProvider,System.String,System.Object,System.Object);;Argument[1];ReturnValue;taint | @@ -2108,6 +8724,9 @@ | System;String;false;Replace;(System.Char,System.Char);;Argument[Qualifier];ReturnValue;taint | | System;String;false;Replace;(System.String,System.String);;Argument[1];ReturnValue;taint | | System;String;false;Replace;(System.String,System.String);;Argument[Qualifier];ReturnValue;taint | +| System;String;false;Replace;(System.String,System.String,System.Boolean,System.Globalization.CultureInfo);;Argument[Qualifier];ReturnValue;generated:taint | +| System;String;false;Replace;(System.String,System.String,System.StringComparison);;Argument[1];ReturnValue;generated:taint | +| System;String;false;Replace;(System.String,System.String,System.StringComparison);;Argument[Qualifier];ReturnValue;generated:taint | | System;String;false;Split;(System.Char,System.Int32,System.StringSplitOptions);;Argument[Qualifier];ReturnValue.Element;taint | | System;String;false;Split;(System.Char,System.StringSplitOptions);;Argument[Qualifier];ReturnValue.Element;taint | | System;String;false;Split;(System.Char[]);;Argument[Qualifier];ReturnValue.Element;taint | @@ -2122,11 +8741,13 @@ | System;String;false;String;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;ReturnValue;taint | | System;String;false;Substring;(System.Int32);;Argument[Qualifier];ReturnValue;taint | | System;String;false;Substring;(System.Int32,System.Int32);;Argument[Qualifier];ReturnValue;taint | +| System;String;false;ToDateTime;(System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint | | System;String;false;ToLower;();;Argument[Qualifier];ReturnValue;taint | | System;String;false;ToLower;(System.Globalization.CultureInfo);;Argument[Qualifier];ReturnValue;taint | | System;String;false;ToLowerInvariant;();;Argument[Qualifier];ReturnValue;taint | | System;String;false;ToString;();;Argument[Qualifier];ReturnValue;value | | System;String;false;ToString;(System.IFormatProvider);;Argument[Qualifier];ReturnValue;value | +| System;String;false;ToType;(System.Type,System.IFormatProvider);;Argument[Qualifier];ReturnValue;generated:taint | | System;String;false;ToUpper;();;Argument[Qualifier];ReturnValue;taint | | System;String;false;ToUpper;(System.Globalization.CultureInfo);;Argument[Qualifier];ReturnValue;taint | | System;String;false;ToUpperInvariant;();;Argument[Qualifier];ReturnValue;taint | @@ -2139,6 +8760,58 @@ | System;String;false;TrimStart;();;Argument[Qualifier];ReturnValue;taint | | System;String;false;TrimStart;(System.Char);;Argument[Qualifier];ReturnValue;taint | | System;String;false;TrimStart;(System.Char[]);;Argument[Qualifier];ReturnValue;taint | +| System;StringNormalizationExtensions;false;Normalize;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;StringNormalizationExtensions;false;Normalize;(System.String,System.Text.NormalizationForm);;Argument[0];ReturnValue;generated:taint | +| System;TimeZone;true;ToLocalTime;(System.DateTime);;Argument[0];ReturnValue;generated:taint | +| System;TimeZone;true;ToUniversalTime;(System.DateTime);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[1];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[2];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[3];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;CreateAdjustmentRule;(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo+TransitionTime,System.TimeZoneInfo+TransitionTime);;Argument[4];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;get_DateEnd;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;get_DateStart;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;get_DaylightDelta;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;get_DaylightTransitionEnd;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo+AdjustmentRule;false;get_DaylightTransitionStart;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo+TransitionTime;false;CreateFixedDateRule;(System.DateTime,System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo+TransitionTime;false;CreateFloatingDateRule;(System.DateTime,System.Int32,System.Int32,System.DayOfWeek);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo+TransitionTime;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;TimeZoneInfo+TransitionTime;false;get_TimeOfDay;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTime;(System.DateTime,System.TimeZoneInfo);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTime;(System.DateTime,System.TimeZoneInfo,System.TimeZoneInfo);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTimeBySystemTimeZoneId;(System.DateTime,System.String);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTimeBySystemTimeZoneId;(System.DateTime,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTimeFromUtc;(System.DateTime,System.TimeZoneInfo);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTimeToUtc;(System.DateTime);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ConvertTimeToUtc;(System.DateTime,System.TimeZoneInfo);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String);;Argument[2];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String);;Argument[3];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[1];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[2];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[3];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[4];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[]);;Argument[5].Element;ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[1];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[2];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[3];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[4];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;CreateCustomTimeZone;(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo+AdjustmentRule[],System.Boolean);;Argument[5].Element;ReturnValue;generated:taint | +| System;TimeZoneInfo;false;FindSystemTimeZoneById;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;TimeZoneInfo;false;GetUtcOffset;(System.DateTime);;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;GetUtcOffset;(System.DateTimeOffset);;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;get_BaseUtcOffset;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;get_DaylightName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;get_DisplayName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;get_Id;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TimeZoneInfo;false;get_StandardName;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple;false;Create<,,,,,,,>;(T1,T2,T3,T4,T5,T6,T7,T8);;Argument[0];ReturnValue.Property[System.Tuple<,,,,,,,>.Item1];value | | System;Tuple;false;Create<,,,,,,,>;(T1,T2,T3,T4,T5,T6,T7,T8);;Argument[1];ReturnValue.Property[System.Tuple<,,,,,,,>.Item2];value | | System;Tuple;false;Create<,,,,,,,>;(T1,T2,T3,T4,T5,T6,T7,T8);;Argument[2];ReturnValue.Property[System.Tuple<,,,,,,,>.Item3];value | @@ -2174,6 +8847,7 @@ | System;Tuple;false;Create<,>;(T1,T2);;Argument[0];ReturnValue.Property[System.Tuple<,>.Item1];value | | System;Tuple;false;Create<,>;(T1,T2);;Argument[1];ReturnValue.Property[System.Tuple<,>.Item2];value | | System;Tuple;false;Create<>;(T1);;Argument[0];ReturnValue.Property[System.Tuple<>.Item1];value | +| System;Tuple<,,,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[0];ReturnValue.Property[System.Tuple<,,,,,,,>.Item1];value | | System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[1];ReturnValue.Property[System.Tuple<,,,,,,,>.Item2];value | | System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[2];ReturnValue.Property[System.Tuple<,,,,,,,>.Item3];value | @@ -2181,6 +8855,13 @@ | System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[4];ReturnValue.Property[System.Tuple<,,,,,,,>.Item5];value | | System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[5];ReturnValue.Property[System.Tuple<,,,,,,,>.Item6];value | | System;Tuple<,,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[6];ReturnValue.Property[System.Tuple<,,,,,,,>.Item7];value | +| System;Tuple<,,,,,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,,>;false;get_Item5;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,,>;false;get_Item6;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,,>;false;get_Item7;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item1];ReturnValue;value | | System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item2];ReturnValue;value | | System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item3];ReturnValue;value | @@ -2188,6 +8869,8 @@ | System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item5];ReturnValue;value | | System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item6];ReturnValue;value | | System;Tuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,,>.Item7];ReturnValue;value | +| System;Tuple<,,,,,,,>;false;get_Rest;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[0];ReturnValue.Property[System.Tuple<,,,,,,>.Item1];value | | System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[1];ReturnValue.Property[System.Tuple<,,,,,,>.Item2];value | | System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[2];ReturnValue.Property[System.Tuple<,,,,,,>.Item3];value | @@ -2195,6 +8878,13 @@ | System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[4];ReturnValue.Property[System.Tuple<,,,,,,>.Item5];value | | System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[5];ReturnValue.Property[System.Tuple<,,,,,,>.Item6];value | | System;Tuple<,,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[6];ReturnValue.Property[System.Tuple<,,,,,,>.Item7];value | +| System;Tuple<,,,,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;get_Item5;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;get_Item6;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,,>;false;get_Item7;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item1];ReturnValue;value | | System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item2];ReturnValue;value | | System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item3];ReturnValue;value | @@ -2202,47 +8892,74 @@ | System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item5];ReturnValue;value | | System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item6];ReturnValue;value | | System;Tuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,,>.Item7];ReturnValue;value | +| System;Tuple<,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[0];ReturnValue.Property[System.Tuple<,,,,,>.Item1];value | | System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[1];ReturnValue.Property[System.Tuple<,,,,,>.Item2];value | | System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[2];ReturnValue.Property[System.Tuple<,,,,,>.Item3];value | | System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[3];ReturnValue.Property[System.Tuple<,,,,,>.Item4];value | | System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[4];ReturnValue.Property[System.Tuple<,,,,,>.Item5];value | | System;Tuple<,,,,,>;false;Tuple;(T1,T2,T3,T4,T5,T6);;Argument[5];ReturnValue.Property[System.Tuple<,,,,,>.Item6];value | +| System;Tuple<,,,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,>;false;get_Item5;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,,>;false;get_Item6;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item1];ReturnValue;value | | System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item2];ReturnValue;value | | System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item3];ReturnValue;value | | System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item4];ReturnValue;value | | System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item5];ReturnValue;value | | System;Tuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,,>.Item6];ReturnValue;value | +| System;Tuple<,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[0];ReturnValue.Property[System.Tuple<,,,,>.Item1];value | | System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[1];ReturnValue.Property[System.Tuple<,,,,>.Item2];value | | System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[2];ReturnValue.Property[System.Tuple<,,,,>.Item3];value | | System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[3];ReturnValue.Property[System.Tuple<,,,,>.Item4];value | | System;Tuple<,,,,>;false;Tuple;(T1,T2,T3,T4,T5);;Argument[4];ReturnValue.Property[System.Tuple<,,,,>.Item5];value | +| System;Tuple<,,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,,>;false;get_Item5;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item1];ReturnValue;value | | System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item2];ReturnValue;value | | System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item3];ReturnValue;value | | System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item4];ReturnValue;value | | System;Tuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,,>.Item5];ReturnValue;value | +| System;Tuple<,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[0];ReturnValue.Property[System.Tuple<,,,>.Item1];value | | System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[1];ReturnValue.Property[System.Tuple<,,,>.Item2];value | | System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[2];ReturnValue.Property[System.Tuple<,,,>.Item3];value | | System;Tuple<,,,>;false;Tuple;(T1,T2,T3,T4);;Argument[3];ReturnValue.Property[System.Tuple<,,,>.Item4];value | +| System;Tuple<,,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,,>;false;get_Item4;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,>.Item1];ReturnValue;value | | System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,>.Item2];ReturnValue;value | | System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,>.Item3];ReturnValue;value | | System;Tuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,,>.Item4];ReturnValue;value | +| System;Tuple<,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,>;false;Tuple;(T1,T2,T3);;Argument[0];ReturnValue.Property[System.Tuple<,,>.Item1];value | | System;Tuple<,,>;false;Tuple;(T1,T2,T3);;Argument[1];ReturnValue.Property[System.Tuple<,,>.Item2];value | | System;Tuple<,,>;false;Tuple;(T1,T2,T3);;Argument[2];ReturnValue.Property[System.Tuple<,,>.Item3];value | +| System;Tuple<,,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,,>;false;get_Item3;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,>.Item1];ReturnValue;value | | System;Tuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,>.Item2];ReturnValue;value | | System;Tuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,,>.Item3];ReturnValue;value | +| System;Tuple<,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,>;false;Tuple;(T1,T2);;Argument[0];ReturnValue.Property[System.Tuple<,>.Item1];value | | System;Tuple<,>;false;Tuple;(T1,T2);;Argument[1];ReturnValue.Property[System.Tuple<,>.Item2];value | +| System;Tuple<,>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Tuple<,>;false;get_Item2;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,>.Item1];ReturnValue;value | | System;Tuple<,>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<,>.Item2];ReturnValue;value | +| System;Tuple<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<>;false;Tuple;(T1);;Argument[0];ReturnValue.Property[System.Tuple<>.Item1];value | +| System;Tuple<>;false;get_Item1;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Tuple<>;false;get_Item;(System.Int32);;Argument[Qualifier].Property[System.Tuple<>.Item1];ReturnValue;value | | System;TupleExtensions;false;Deconstruct<,,,,,,,,,,,,,,,,,,,,>;(System.Tuple>>,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21);;Argument[0].Property[System.Tuple<,,,,,,,>.Item1];Argument[1];value | | System;TupleExtensions;false;Deconstruct<,,,,,,,,,,,,,,,,,,,,>;(System.Tuple>>,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21);;Argument[0].Property[System.Tuple<,,,,,,,>.Item2];Argument[2];value | @@ -2370,13 +9087,159 @@ | System;TupleExtensions;false;Deconstruct<,>;(System.Tuple,T1,T2);;Argument[0].Property[System.Tuple<,>.Item1];Argument[1];value | | System;TupleExtensions;false;Deconstruct<,>;(System.Tuple,T1,T2);;Argument[0].Property[System.Tuple<,>.Item2];Argument[2];value | | System;TupleExtensions;false;Deconstruct<>;(System.Tuple,T1);;Argument[0].Property[System.Tuple<>.Item1];Argument[1];value | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,,>;(System.ValueTuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,,>;(System.ValueTuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<,>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToTuple<>;(System.ValueTuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,,>;(System.Tuple>>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,,>;(System.Tuple>);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<,>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;TupleExtensions;false;ToValueTuple<>;(System.Tuple);;Argument[0];ReturnValue;generated:taint | +| System;Type;false;GetConstructor;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetConstructor;(System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetConstructor;(System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetConstructors;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetEvent;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetField;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetFields;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetInterface;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMember;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMembers;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Int32,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Int32,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethod;(System.String,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetMethods;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetNestedType;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetNestedTypes;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperties;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String,System.Type);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String,System.Type,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String,System.Type,System.Type[],System.Reflection.ParameterModifier[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;GetProperty;(System.String,System.Type[]);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;MakeGenericSignatureType;(System.Type,System.Type[]);;Argument[0];ReturnValue;generated:taint | +| System;Type;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;false;get_TypeInitializer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;true;GetEvents;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;true;GetMember;(System.String,System.Reflection.BindingFlags);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Type;true;get_GenericTypeArguments;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TypeInitializationException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;TypeInitializationException;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TypeLoadException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;TypeLoadException;false;TypeLoadException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | +| System;TypeLoadException;false;get_Message;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;TypeLoadException;false;get_TypeName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UIntPtr;false;ToPointer;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UIntPtr;false;UIntPtr;(System.Void*);;Argument[0];Argument[Qualifier];generated:taint | +| System;UnhandledExceptionEventArgs;false;UnhandledExceptionEventArgs;(System.Object,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System;UnhandledExceptionEventArgs;false;get_ExceptionObject;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;EscapeDataString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;EscapeString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;EscapeUriString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;GetComponents;(System.UriComponents,System.UriFormat);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;GetLeftPart;(System.UriPartial);;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;Uri;false;MakeRelative;(System.Uri);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;MakeRelativeUri;(System.Uri);;Argument[0];ReturnValue;generated:taint | | System;Uri;false;ToString;();;Argument[Qualifier];ReturnValue;taint | +| System;Uri;false;TryCreate;(System.String,System.UriKind,System.Uri);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;TryCreate;(System.Uri,System.String,System.Uri);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;TryCreate;(System.Uri,System.String,System.Uri);;Argument[1];ReturnValue;generated:taint | +| System;Uri;false;TryCreate;(System.Uri,System.Uri,System.Uri);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;TryCreate;(System.Uri,System.Uri,System.Uri);;Argument[1];ReturnValue;generated:taint | +| System;Uri;false;UnescapeDataString;(System.String);;Argument[0];ReturnValue;generated:taint | +| System;Uri;false;Uri;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[Qualifier];generated:taint | | System;Uri;false;Uri;(System.String);;Argument[0];ReturnValue;taint | | System;Uri;false;Uri;(System.String,System.Boolean);;Argument[0];ReturnValue;taint | | System;Uri;false;Uri;(System.String,System.UriKind);;Argument[0];ReturnValue;taint | +| System;Uri;false;Uri;(System.Uri,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;Uri;false;Uri;(System.Uri,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;Uri;false;Uri;(System.Uri,System.String,System.Boolean);;Argument[0];Argument[Qualifier];generated:taint | +| System;Uri;false;Uri;(System.Uri,System.String,System.Boolean);;Argument[1];Argument[Qualifier];generated:taint | +| System;Uri;false;Uri;(System.Uri,System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System;Uri;false;Uri;(System.Uri,System.Uri);;Argument[1];Argument[Qualifier];generated:taint | +| System;Uri;false;get_Authority;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;get_DnsSafeHost;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;get_IdnHost;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;get_LocalPath;();;Argument[Qualifier];ReturnValue;generated:taint | | System;Uri;false;get_OriginalString;();;Argument[Qualifier];ReturnValue;taint | | System;Uri;false;get_PathAndQuery;();;Argument[Qualifier];ReturnValue;taint | | System;Uri;false;get_Query;();;Argument[Qualifier];ReturnValue;taint | +| System;Uri;false;get_Scheme;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;Uri;false;get_UserInfo;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;UriBuilder;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;UriBuilder;(System.String,System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;UriBuilder;(System.String,System.String);;Argument[1];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;UriBuilder;(System.String,System.String,System.Int32,System.String);;Argument[3];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;UriBuilder;(System.String,System.String,System.Int32,System.String,System.String);;Argument[4];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;UriBuilder;(System.Uri);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;get_Fragment;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_Host;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_Password;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_Path;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_Query;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_Scheme;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_Uri;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;get_UserName;();;Argument[Qualifier];ReturnValue;generated:taint | +| System;UriBuilder;false;set_Fragment;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;set_Host;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;set_Password;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;set_Path;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;set_Query;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;set_Scheme;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriBuilder;false;set_UserName;(System.String);;Argument[0];Argument[Qualifier];generated:taint | +| System;UriFormatException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[Qualifier];Argument[0];generated:taint | +| System;UriParser;false;Register;(System.UriParser,System.String,System.Int32);;Argument[1];Argument[0];generated:taint | +| System;UriParser;true;GetComponents;(System.Uri,System.UriComponents,System.UriFormat);;Argument[0];ReturnValue;generated:taint | +| System;UriParser;true;OnNewUri;();;Argument[Qualifier];ReturnValue;generated:value | +| System;UriParser;true;Resolve;(System.Uri,System.Uri,System.UriFormatException);;Argument[0];ReturnValue;generated:taint | +| System;UriParser;true;Resolve;(System.Uri,System.Uri,System.UriFormatException);;Argument[1];ReturnValue;generated:taint | +| System;UriTypeConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;generated:taint | +| System;UriTypeConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;generated:taint | | System;ValueTuple;false;Create<,,,,,,,>;(T1,T2,T3,T4,T5,T6,T7,T8);;Argument[0];ReturnValue.Field[System.ValueTuple<,,,,,,,>.Item1];value | | System;ValueTuple;false;Create<,,,,,,,>;(T1,T2,T3,T4,T5,T6,T7,T8);;Argument[1];ReturnValue.Field[System.ValueTuple<,,,,,,,>.Item2];value | | System;ValueTuple;false;Create<,,,,,,,>;(T1,T2,T3,T4,T5,T6,T7,T8);;Argument[2];ReturnValue.Field[System.ValueTuple<,,,,,,,>.Item3];value | @@ -2412,6 +9275,7 @@ | System;ValueTuple;false;Create<,>;(T1,T2);;Argument[0];ReturnValue.Field[System.ValueTuple<,>.Item1];value | | System;ValueTuple;false;Create<,>;(T1,T2);;Argument[1];ReturnValue.Field[System.ValueTuple<,>.Item2];value | | System;ValueTuple;false;Create<>;(T1);;Argument[0];ReturnValue.Field[System.ValueTuple<>.Item1];value | +| System;ValueTuple<,,,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[0];ReturnValue.Field[System.ValueTuple<,,,,,,,>.Item1];value | | System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[1];ReturnValue.Field[System.ValueTuple<,,,,,,,>.Item2];value | | System;ValueTuple<,,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7,TRest);;Argument[2];ReturnValue.Field[System.ValueTuple<,,,,,,,>.Item3];value | @@ -2426,6 +9290,7 @@ | System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item5];ReturnValue;value | | System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item6];ReturnValue;value | | System;ValueTuple<,,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,,>.Item7];ReturnValue;value | +| System;ValueTuple<,,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[0];ReturnValue.Field[System.ValueTuple<,,,,,,>.Item1];value | | System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[1];ReturnValue.Field[System.ValueTuple<,,,,,,>.Item2];value | | System;ValueTuple<,,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6,T7);;Argument[2];ReturnValue.Field[System.ValueTuple<,,,,,,>.Item3];value | @@ -2440,6 +9305,7 @@ | System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item5];ReturnValue;value | | System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item6];ReturnValue;value | | System;ValueTuple<,,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,,>.Item7];ReturnValue;value | +| System;ValueTuple<,,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[0];ReturnValue.Field[System.ValueTuple<,,,,,>.Item1];value | | System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[1];ReturnValue.Field[System.ValueTuple<,,,,,>.Item2];value | | System;ValueTuple<,,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5,T6);;Argument[2];ReturnValue.Field[System.ValueTuple<,,,,,>.Item3];value | @@ -2452,6 +9318,7 @@ | System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item4];ReturnValue;value | | System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item5];ReturnValue;value | | System;ValueTuple<,,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,,>.Item6];ReturnValue;value | +| System;ValueTuple<,,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[0];ReturnValue.Field[System.ValueTuple<,,,,>.Item1];value | | System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[1];ReturnValue.Field[System.ValueTuple<,,,,>.Item2];value | | System;ValueTuple<,,,,>;false;ValueTuple;(T1,T2,T3,T4,T5);;Argument[2];ReturnValue.Field[System.ValueTuple<,,,,>.Item3];value | @@ -2462,6 +9329,7 @@ | System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item3];ReturnValue;value | | System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item4];ReturnValue;value | | System;ValueTuple<,,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,,>.Item5];ReturnValue;value | +| System;ValueTuple<,,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[0];ReturnValue.Field[System.ValueTuple<,,,>.Item1];value | | System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[1];ReturnValue.Field[System.ValueTuple<,,,>.Item2];value | | System;ValueTuple<,,,>;false;ValueTuple;(T1,T2,T3,T4);;Argument[2];ReturnValue.Field[System.ValueTuple<,,,>.Item3];value | @@ -2470,15 +9338,18 @@ | System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,>.Item2];ReturnValue;value | | System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,>.Item3];ReturnValue;value | | System;ValueTuple<,,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,,>.Item4];ReturnValue;value | +| System;ValueTuple<,,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,,>;false;ValueTuple;(T1,T2,T3);;Argument[0];ReturnValue.Field[System.ValueTuple<,,>.Item1];value | | System;ValueTuple<,,>;false;ValueTuple;(T1,T2,T3);;Argument[1];ReturnValue.Field[System.ValueTuple<,,>.Item2];value | | System;ValueTuple<,,>;false;ValueTuple;(T1,T2,T3);;Argument[2];ReturnValue.Field[System.ValueTuple<,,>.Item3];value | | System;ValueTuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,>.Item1];ReturnValue;value | | System;ValueTuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,>.Item2];ReturnValue;value | | System;ValueTuple<,,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,,>.Item3];ReturnValue;value | +| System;ValueTuple<,>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<,>;false;ValueTuple;(T1,T2);;Argument[0];ReturnValue.Field[System.ValueTuple<,>.Item1];value | | System;ValueTuple<,>;false;ValueTuple;(T1,T2);;Argument[1];ReturnValue.Field[System.ValueTuple<,>.Item2];value | | System;ValueTuple<,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,>.Item1];ReturnValue;value | | System;ValueTuple<,>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<,>.Item2];ReturnValue;value | +| System;ValueTuple<>;false;ToString;();;Argument[Qualifier];ReturnValue;generated:taint | | System;ValueTuple<>;false;ValueTuple;(T1);;Argument[0];ReturnValue.Field[System.ValueTuple<>.Item1];value | | System;ValueTuple<>;false;get_Item;(System.Int32);;Argument[Qualifier].Field[System.ValueTuple<>.Item1];ReturnValue;value | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql index 123af14b314..961faf60084 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql @@ -13,10 +13,10 @@ class IncludeFilteredSummarizedCallable extends IncludeSummarizedCallable { override predicate relevantSummary( SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue ) { - this.propagatesFlow(input, output, preservesValue) and + this.(SummarizedCallable).propagatesFlow(input, output, preservesValue) and not exists(IncludeSummarizedCallable rsc | isBaseCallableOrPrototype(rsc) and - rsc.propagatesFlow(input, output, preservesValue) and + rsc.(SummarizedCallable).propagatesFlow(input, output, preservesValue) and this.(UnboundCallable).overridesOrImplementsUnbound(rsc) ) } diff --git a/csharp/ql/test/library-tests/dispatch/viableCallable.expected b/csharp/ql/test/library-tests/dispatch/viableCallable.expected index 74028980ba8..5a78d028b6c 100644 --- a/csharp/ql/test/library-tests/dispatch/viableCallable.expected +++ b/csharp/ql/test/library-tests/dispatch/viableCallable.expected @@ -216,16 +216,19 @@ | ViableCallable.cs:178:13:178:17 | dynamic call to operator + | + | Double | | ViableCallable.cs:178:13:178:17 | dynamic call to operator + | + | Int32 | | ViableCallable.cs:178:13:178:17 | dynamic call to operator + | + | Int64 | +| ViableCallable.cs:178:13:178:17 | dynamic call to operator + | + | NFloat | | ViableCallable.cs:178:13:178:17 | dynamic call to operator + | + | Single | | ViableCallable.cs:180:13:180:17 | dynamic call to operator - | - | Decimal | | ViableCallable.cs:180:13:180:17 | dynamic call to operator - | - | Double | | ViableCallable.cs:180:13:180:17 | dynamic call to operator - | - | Int32 | | ViableCallable.cs:180:13:180:17 | dynamic call to operator - | - | Int64 | +| ViableCallable.cs:180:13:180:17 | dynamic call to operator - | - | NFloat | | ViableCallable.cs:180:13:180:17 | dynamic call to operator - | - | Single | | ViableCallable.cs:182:13:182:18 | dynamic call to operator + | + | Decimal | | ViableCallable.cs:182:13:182:18 | dynamic call to operator + | + | Double | | ViableCallable.cs:182:13:182:18 | dynamic call to operator + | + | Int32 | | ViableCallable.cs:182:13:182:18 | dynamic call to operator + | + | Int64 | +| ViableCallable.cs:182:13:182:18 | dynamic call to operator + | + | NFloat | | ViableCallable.cs:182:13:182:18 | dynamic call to operator + | + | Single | | ViableCallable.cs:185:17:185:25 | object creation of type C10 | C10 | C10 | | ViableCallable.cs:186:9:186:153 | call to method InvokeMember | + | C10 | diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected b/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected index 6120caaad32..5f7866b09d1 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected @@ -82,97 +82,97 @@ edges | EntityFramework.cs:219:18:219:36 | call to method First [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:46 | access to property Addresses [element, property Street] : String | | EntityFramework.cs:219:18:219:46 | access to property Addresses [element, property Street] : String | EntityFramework.cs:219:18:219:54 | call to method First
    [property Street] : String | | EntityFramework.cs:219:18:219:54 | call to method First
    [property Street] : String | EntityFramework.cs:219:18:219:61 | access to property Street | -| EntityFrameworkCore.cs:75:31:75:39 | "tainted" : String | EntityFrameworkCore.cs:76:18:76:28 | access to local variable taintSource | -| EntityFrameworkCore.cs:75:31:75:39 | "tainted" : String | EntityFrameworkCore.cs:77:35:77:45 | access to local variable taintSource : String | -| EntityFrameworkCore.cs:75:31:75:39 | "tainted" : String | EntityFrameworkCore.cs:78:18:78:42 | (...) ... | -| EntityFrameworkCore.cs:75:31:75:39 | "tainted" : String | EntityFrameworkCore.cs:78:32:78:42 | access to local variable taintSource : String | -| EntityFrameworkCore.cs:77:18:77:46 | object creation of type RawSqlString : RawSqlString | EntityFrameworkCore.cs:77:18:77:46 | (...) ... | -| EntityFrameworkCore.cs:77:35:77:45 | access to local variable taintSource : String | EntityFrameworkCore.cs:77:18:77:46 | object creation of type RawSqlString : RawSqlString | -| EntityFrameworkCore.cs:78:18:78:42 | call to operator implicit conversion : RawSqlString | EntityFrameworkCore.cs:78:18:78:42 | (...) ... | -| EntityFrameworkCore.cs:78:32:78:42 | access to local variable taintSource : String | EntityFrameworkCore.cs:78:18:78:42 | call to operator implicit conversion : RawSqlString | -| EntityFrameworkCore.cs:85:13:88:13 | { ..., ... } [property Name] : String | EntityFrameworkCore.cs:92:29:92:30 | access to local variable p1 [property Name] : String | -| EntityFrameworkCore.cs:87:24:87:32 | "tainted" : String | EntityFrameworkCore.cs:85:13:88:13 | { ..., ... } [property Name] : String | -| EntityFrameworkCore.cs:92:13:92:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | EntityFrameworkCore.cs:94:13:94:15 | access to local variable ctx [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:92:13:92:23 | [post] access to property Persons [element, property Name] : String | EntityFrameworkCore.cs:92:13:92:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:92:29:92:30 | access to local variable p1 [property Name] : String | EntityFrameworkCore.cs:92:13:92:23 | [post] access to property Persons [element, property Name] : String | -| EntityFrameworkCore.cs:94:13:94:15 | access to local variable ctx [property Persons, element, property Name] : String | EntityFrameworkCore.cs:230:18:230:28 | access to property Persons [element, property Name] : String | -| EntityFrameworkCore.cs:107:13:110:13 | { ..., ... } [property Name] : String | EntityFrameworkCore.cs:114:29:114:30 | access to local variable p1 [property Name] : String | -| EntityFrameworkCore.cs:109:24:109:32 | "tainted" : String | EntityFrameworkCore.cs:107:13:110:13 | { ..., ... } [property Name] : String | -| EntityFrameworkCore.cs:114:13:114:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | EntityFrameworkCore.cs:116:19:116:21 | access to local variable ctx [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:114:13:114:23 | [post] access to property Persons [element, property Name] : String | EntityFrameworkCore.cs:114:13:114:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:114:29:114:30 | access to local variable p1 [property Name] : String | EntityFrameworkCore.cs:114:13:114:23 | [post] access to property Persons [element, property Name] : String | -| EntityFrameworkCore.cs:116:19:116:21 | access to local variable ctx [property Persons, element, property Name] : String | EntityFrameworkCore.cs:230:18:230:28 | access to property Persons [element, property Name] : String | -| EntityFrameworkCore.cs:129:13:132:13 | { ..., ... } [property Name] : String | EntityFrameworkCore.cs:135:27:135:28 | access to local variable p1 [property Name] : String | -| EntityFrameworkCore.cs:131:24:131:32 | "tainted" : String | EntityFrameworkCore.cs:129:13:132:13 | { ..., ... } [property Name] : String | -| EntityFrameworkCore.cs:135:27:135:28 | access to local variable p1 [property Name] : String | EntityFrameworkCore.cs:219:35:219:35 | p [property Name] : String | -| EntityFrameworkCore.cs:148:13:151:13 | { ..., ... } [property Title] : String | EntityFrameworkCore.cs:155:18:155:19 | access to local variable p1 [property Title] : String | -| EntityFrameworkCore.cs:150:25:150:33 | "tainted" : String | EntityFrameworkCore.cs:148:13:151:13 | { ..., ... } [property Title] : String | -| EntityFrameworkCore.cs:155:18:155:19 | access to local variable p1 [property Title] : String | EntityFrameworkCore.cs:155:18:155:25 | access to property Title | -| EntityFrameworkCore.cs:167:13:174:13 | { ..., ... } [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:175:29:175:30 | access to local variable p1 [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:168:29:173:17 | array creation of type Address[] [element, property Street] : String | EntityFrameworkCore.cs:167:13:174:13 | { ..., ... } [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:168:35:173:17 | { ..., ... } [element, property Street] : String | EntityFrameworkCore.cs:168:29:173:17 | array creation of type Address[] [element, property Street] : String | -| EntityFrameworkCore.cs:169:21:172:21 | object creation of type Address [property Street] : String | EntityFrameworkCore.cs:168:35:173:17 | { ..., ... } [element, property Street] : String | -| EntityFrameworkCore.cs:169:33:172:21 | { ..., ... } [property Street] : String | EntityFrameworkCore.cs:169:21:172:21 | object creation of type Address [property Street] : String | -| EntityFrameworkCore.cs:171:34:171:42 | "tainted" : String | EntityFrameworkCore.cs:169:33:172:21 | { ..., ... } [property Street] : String | -| EntityFrameworkCore.cs:175:13:175:15 | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:176:13:176:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:175:13:175:15 | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:180:13:180:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:175:13:175:15 | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:188:13:188:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:175:13:175:15 | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:192:13:192:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:175:13:175:23 | [post] access to property Persons [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:175:13:175:15 | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:175:29:175:30 | access to local variable p1 [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:175:13:175:23 | [post] access to property Persons [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:176:13:176:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:238:18:238:30 | access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:176:13:176:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:28 | access to property Persons [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:180:13:180:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:238:18:238:30 | access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:180:13:180:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:28 | access to property Persons [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:183:13:186:13 | { ..., ... } [property Street] : String | EntityFrameworkCore.cs:187:31:187:32 | access to local variable a1 [property Street] : String | -| EntityFrameworkCore.cs:185:26:185:34 | "tainted" : String | EntityFrameworkCore.cs:183:13:186:13 | { ..., ... } [property Street] : String | -| EntityFrameworkCore.cs:187:13:187:15 | [post] access to local variable ctx [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:188:13:188:15 | access to local variable ctx [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:187:13:187:15 | [post] access to local variable ctx [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:192:13:192:15 | access to local variable ctx [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:187:13:187:25 | [post] access to property Addresses [element, property Street] : String | EntityFrameworkCore.cs:187:13:187:15 | [post] access to local variable ctx [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:187:31:187:32 | access to local variable a1 [property Street] : String | EntityFrameworkCore.cs:187:13:187:25 | [post] access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:188:13:188:15 | access to local variable ctx [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:238:18:238:30 | access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:188:13:188:15 | access to local variable ctx [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:28 | access to property Persons [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:188:13:188:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:238:18:238:30 | access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:188:13:188:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:28 | access to property Persons [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:192:13:192:15 | access to local variable ctx [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:238:18:238:30 | access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:192:13:192:15 | access to local variable ctx [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:28 | access to property Persons [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:192:13:192:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:238:18:238:30 | access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:192:13:192:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:28 | access to property Persons [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:199:13:202:13 | { ..., ... } [property Name] : String | EntityFrameworkCore.cs:208:71:208:72 | access to local variable p1 [property Name] : String | -| EntityFrameworkCore.cs:201:24:201:32 | "tainted" : String | EntityFrameworkCore.cs:199:13:202:13 | { ..., ... } [property Name] : String | -| EntityFrameworkCore.cs:204:13:207:13 | { ..., ... } [property Street] : String | EntityFrameworkCore.cs:208:85:208:86 | access to local variable a1 [property Street] : String | -| EntityFrameworkCore.cs:206:26:206:34 | "tainted" : String | EntityFrameworkCore.cs:204:13:207:13 | { ..., ... } [property Street] : String | -| EntityFrameworkCore.cs:208:60:208:88 | { ..., ... } [property Address, property Street] : String | EntityFrameworkCore.cs:209:37:209:53 | access to local variable personAddressMap1 [property Address, property Street] : String | -| EntityFrameworkCore.cs:208:60:208:88 | { ..., ... } [property Person, property Name] : String | EntityFrameworkCore.cs:209:37:209:53 | access to local variable personAddressMap1 [property Person, property Name] : String | -| EntityFrameworkCore.cs:208:71:208:72 | access to local variable p1 [property Name] : String | EntityFrameworkCore.cs:208:60:208:88 | { ..., ... } [property Person, property Name] : String | -| EntityFrameworkCore.cs:208:85:208:86 | access to local variable a1 [property Street] : String | EntityFrameworkCore.cs:208:60:208:88 | { ..., ... } [property Address, property Street] : String | -| EntityFrameworkCore.cs:209:13:209:15 | [post] access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:210:13:210:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | -| EntityFrameworkCore.cs:209:13:209:15 | [post] access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:216:13:216:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | -| EntityFrameworkCore.cs:209:13:209:15 | [post] access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:210:13:210:15 | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | -| EntityFrameworkCore.cs:209:13:209:15 | [post] access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:216:13:216:15 | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | -| EntityFrameworkCore.cs:209:13:209:31 | [post] access to property PersonAddresses [element, property Address, property Street] : String | EntityFrameworkCore.cs:209:13:209:15 | [post] access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | -| EntityFrameworkCore.cs:209:13:209:31 | [post] access to property PersonAddresses [element, property Person, property Name] : String | EntityFrameworkCore.cs:209:13:209:15 | [post] access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | -| EntityFrameworkCore.cs:209:37:209:53 | access to local variable personAddressMap1 [property Address, property Street] : String | EntityFrameworkCore.cs:209:13:209:31 | [post] access to property PersonAddresses [element, property Address, property Street] : String | -| EntityFrameworkCore.cs:209:37:209:53 | access to local variable personAddressMap1 [property Person, property Name] : String | EntityFrameworkCore.cs:209:13:209:31 | [post] access to property PersonAddresses [element, property Person, property Name] : String | -| EntityFrameworkCore.cs:210:13:210:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:238:18:238:30 | access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:210:13:210:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:245:18:245:28 | access to property Persons [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:210:13:210:15 | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:230:18:230:28 | access to property Persons [element, property Name] : String | -| EntityFrameworkCore.cs:216:13:216:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:238:18:238:30 | access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:216:13:216:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:245:18:245:28 | access to property Persons [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:216:13:216:15 | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:230:18:230:28 | access to property Persons [element, property Name] : String | -| EntityFrameworkCore.cs:219:35:219:35 | p [property Name] : String | EntityFrameworkCore.cs:222:29:222:29 | access to parameter p [property Name] : String | -| EntityFrameworkCore.cs:222:13:222:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:222:13:222:23 | [post] access to property Persons [element, property Name] : String | EntityFrameworkCore.cs:222:13:222:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:222:29:222:29 | access to parameter p [property Name] : String | EntityFrameworkCore.cs:222:13:222:23 | [post] access to property Persons [element, property Name] : String | -| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx [property Persons, element, property Name] : String | EntityFrameworkCore.cs:230:18:230:28 | access to property Persons [element, property Name] : String | -| EntityFrameworkCore.cs:230:18:230:28 | access to property Persons [element, property Name] : String | EntityFrameworkCore.cs:230:18:230:36 | call to method First [property Name] : String | -| EntityFrameworkCore.cs:230:18:230:36 | call to method First [property Name] : String | EntityFrameworkCore.cs:230:18:230:41 | access to property Name | -| EntityFrameworkCore.cs:238:18:238:30 | access to property Addresses [element, property Street] : String | EntityFrameworkCore.cs:238:18:238:38 | call to method First
    [property Street] : String | -| EntityFrameworkCore.cs:238:18:238:38 | call to method First
    [property Street] : String | EntityFrameworkCore.cs:238:18:238:45 | access to property Street | -| EntityFrameworkCore.cs:245:18:245:28 | access to property Persons [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:36 | call to method First [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:245:18:245:36 | call to method First [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:46 | access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:245:18:245:46 | access to property Addresses [element, property Street] : String | EntityFrameworkCore.cs:245:18:245:54 | call to method First
    [property Street] : String | -| EntityFrameworkCore.cs:245:18:245:54 | call to method First
    [property Street] : String | EntityFrameworkCore.cs:245:18:245:61 | access to property Street | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:83:18:83:28 | access to local variable taintSource | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:84:35:84:45 | access to local variable taintSource : String | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:85:18:85:42 | (...) ... | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:85:32:85:42 | access to local variable taintSource : String | +| EntityFrameworkCore.cs:84:18:84:46 | object creation of type RawSqlString : RawSqlString | EntityFrameworkCore.cs:84:18:84:46 | (...) ... | +| EntityFrameworkCore.cs:84:35:84:45 | access to local variable taintSource : String | EntityFrameworkCore.cs:84:18:84:46 | object creation of type RawSqlString : RawSqlString | +| EntityFrameworkCore.cs:85:18:85:42 | call to operator implicit conversion : RawSqlString | EntityFrameworkCore.cs:85:18:85:42 | (...) ... | +| EntityFrameworkCore.cs:85:32:85:42 | access to local variable taintSource : String | EntityFrameworkCore.cs:85:18:85:42 | call to operator implicit conversion : RawSqlString | +| EntityFrameworkCore.cs:92:13:95:13 | { ..., ... } [property Name] : String | EntityFrameworkCore.cs:99:29:99:30 | access to local variable p1 [property Name] : String | +| EntityFrameworkCore.cs:94:24:94:32 | "tainted" : String | EntityFrameworkCore.cs:92:13:95:13 | { ..., ... } [property Name] : String | +| EntityFrameworkCore.cs:99:13:99:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | EntityFrameworkCore.cs:101:13:101:15 | access to local variable ctx [property Persons, element, property Name] : String | +| EntityFrameworkCore.cs:99:13:99:23 | [post] access to property Persons [element, property Name] : String | EntityFrameworkCore.cs:99:13:99:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | +| EntityFrameworkCore.cs:99:29:99:30 | access to local variable p1 [property Name] : String | EntityFrameworkCore.cs:99:13:99:23 | [post] access to property Persons [element, property Name] : String | +| EntityFrameworkCore.cs:101:13:101:15 | access to local variable ctx [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons [element, property Name] : String | +| EntityFrameworkCore.cs:114:13:117:13 | { ..., ... } [property Name] : String | EntityFrameworkCore.cs:121:29:121:30 | access to local variable p1 [property Name] : String | +| EntityFrameworkCore.cs:116:24:116:32 | "tainted" : String | EntityFrameworkCore.cs:114:13:117:13 | { ..., ... } [property Name] : String | +| EntityFrameworkCore.cs:121:13:121:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | EntityFrameworkCore.cs:123:19:123:21 | access to local variable ctx [property Persons, element, property Name] : String | +| EntityFrameworkCore.cs:121:13:121:23 | [post] access to property Persons [element, property Name] : String | EntityFrameworkCore.cs:121:13:121:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | +| EntityFrameworkCore.cs:121:29:121:30 | access to local variable p1 [property Name] : String | EntityFrameworkCore.cs:121:13:121:23 | [post] access to property Persons [element, property Name] : String | +| EntityFrameworkCore.cs:123:19:123:21 | access to local variable ctx [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons [element, property Name] : String | +| EntityFrameworkCore.cs:136:13:139:13 | { ..., ... } [property Name] : String | EntityFrameworkCore.cs:142:27:142:28 | access to local variable p1 [property Name] : String | +| EntityFrameworkCore.cs:138:24:138:32 | "tainted" : String | EntityFrameworkCore.cs:136:13:139:13 | { ..., ... } [property Name] : String | +| EntityFrameworkCore.cs:142:27:142:28 | access to local variable p1 [property Name] : String | EntityFrameworkCore.cs:226:35:226:35 | p [property Name] : String | +| EntityFrameworkCore.cs:155:13:158:13 | { ..., ... } [property Title] : String | EntityFrameworkCore.cs:162:18:162:19 | access to local variable p1 [property Title] : String | +| EntityFrameworkCore.cs:157:25:157:33 | "tainted" : String | EntityFrameworkCore.cs:155:13:158:13 | { ..., ... } [property Title] : String | +| EntityFrameworkCore.cs:162:18:162:19 | access to local variable p1 [property Title] : String | EntityFrameworkCore.cs:162:18:162:25 | access to property Title | +| EntityFrameworkCore.cs:174:13:181:13 | { ..., ... } [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:29:182:30 | access to local variable p1 [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:175:29:180:17 | array creation of type Address[] [element, property Street] : String | EntityFrameworkCore.cs:174:13:181:13 | { ..., ... } [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:175:35:180:17 | { ..., ... } [element, property Street] : String | EntityFrameworkCore.cs:175:29:180:17 | array creation of type Address[] [element, property Street] : String | +| EntityFrameworkCore.cs:176:21:179:21 | object creation of type Address [property Street] : String | EntityFrameworkCore.cs:175:35:180:17 | { ..., ... } [element, property Street] : String | +| EntityFrameworkCore.cs:176:33:179:21 | { ..., ... } [property Street] : String | EntityFrameworkCore.cs:176:21:179:21 | object creation of type Address [property Street] : String | +| EntityFrameworkCore.cs:178:34:178:42 | "tainted" : String | EntityFrameworkCore.cs:176:33:179:21 | { ..., ... } [property Street] : String | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:182:13:182:23 | [post] access to property Persons [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:182:29:182:30 | access to local variable p1 [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:13:182:23 | [post] access to property Persons [element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons [element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons [element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:190:13:193:13 | { ..., ... } [property Street] : String | EntityFrameworkCore.cs:194:31:194:32 | access to local variable a1 [property Street] : String | +| EntityFrameworkCore.cs:192:26:192:34 | "tainted" : String | EntityFrameworkCore.cs:190:13:193:13 | { ..., ... } [property Street] : String | +| EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:194:13:194:25 | [post] access to property Addresses [element, property Street] : String | EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:194:31:194:32 | access to local variable a1 [property Street] : String | EntityFrameworkCore.cs:194:13:194:25 | [post] access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons [element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons [element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons [element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons [element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:206:13:209:13 | { ..., ... } [property Name] : String | EntityFrameworkCore.cs:215:71:215:72 | access to local variable p1 [property Name] : String | +| EntityFrameworkCore.cs:208:24:208:32 | "tainted" : String | EntityFrameworkCore.cs:206:13:209:13 | { ..., ... } [property Name] : String | +| EntityFrameworkCore.cs:211:13:214:13 | { ..., ... } [property Street] : String | EntityFrameworkCore.cs:215:85:215:86 | access to local variable a1 [property Street] : String | +| EntityFrameworkCore.cs:213:26:213:34 | "tainted" : String | EntityFrameworkCore.cs:211:13:214:13 | { ..., ... } [property Street] : String | +| EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } [property Address, property Street] : String | EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 [property Address, property Street] : String | +| EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } [property Person, property Name] : String | EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 [property Person, property Name] : String | +| EntityFrameworkCore.cs:215:71:215:72 | access to local variable p1 [property Name] : String | EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } [property Person, property Name] : String | +| EntityFrameworkCore.cs:215:85:215:86 | access to local variable a1 [property Street] : String | EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } [property Address, property Street] : String | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | +| EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses [element, property Address, property Street] : String | EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | +| EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses [element, property Person, property Name] : String | EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | +| EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 [property Address, property Street] : String | EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses [element, property Address, property Street] : String | +| EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 [property Person, property Name] : String | EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses [element, property Person, property Name] : String | +| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons [element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons [element, property Name] : String | +| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons [element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons [element, property Name] : String | +| EntityFrameworkCore.cs:226:35:226:35 | p [property Name] : String | EntityFrameworkCore.cs:229:29:229:29 | access to parameter p [property Name] : String | +| EntityFrameworkCore.cs:229:13:229:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx [property Persons, element, property Name] : String | +| EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons [element, property Name] : String | EntityFrameworkCore.cs:229:13:229:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | +| EntityFrameworkCore.cs:229:29:229:29 | access to parameter p [property Name] : String | EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons [element, property Name] : String | +| EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons [element, property Name] : String | +| EntityFrameworkCore.cs:237:18:237:28 | access to property Persons [element, property Name] : String | EntityFrameworkCore.cs:237:18:237:36 | call to method First [property Name] : String | +| EntityFrameworkCore.cs:237:18:237:36 | call to method First [property Name] : String | EntityFrameworkCore.cs:237:18:237:41 | access to property Name | +| EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses [element, property Street] : String | EntityFrameworkCore.cs:245:18:245:38 | call to method First
    [property Street] : String | +| EntityFrameworkCore.cs:245:18:245:38 | call to method First
    [property Street] : String | EntityFrameworkCore.cs:245:18:245:45 | access to property Street | +| EntityFrameworkCore.cs:252:18:252:28 | access to property Persons [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:36 | call to method First [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:252:18:252:36 | call to method First [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses [element, property Street] : String | EntityFrameworkCore.cs:252:18:252:54 | call to method First
    [property Street] : String | +| EntityFrameworkCore.cs:252:18:252:54 | call to method First
    [property Street] : String | EntityFrameworkCore.cs:252:18:252:61 | access to property Street | nodes | EntityFramework.cs:59:13:62:13 | { ..., ... } [property Name] : String | semmle.label | { ..., ... } [property Name] : String | | EntityFramework.cs:61:24:61:32 | "tainted" : String | semmle.label | "tainted" : String | @@ -247,87 +247,87 @@ nodes | EntityFramework.cs:219:18:219:46 | access to property Addresses [element, property Street] : String | semmle.label | access to property Addresses [element, property Street] : String | | EntityFramework.cs:219:18:219:54 | call to method First
    [property Street] : String | semmle.label | call to method First
    [property Street] : String | | EntityFramework.cs:219:18:219:61 | access to property Street | semmle.label | access to property Street | -| EntityFrameworkCore.cs:75:31:75:39 | "tainted" : String | semmle.label | "tainted" : String | -| EntityFrameworkCore.cs:76:18:76:28 | access to local variable taintSource | semmle.label | access to local variable taintSource | -| EntityFrameworkCore.cs:77:18:77:46 | (...) ... | semmle.label | (...) ... | -| EntityFrameworkCore.cs:77:18:77:46 | object creation of type RawSqlString : RawSqlString | semmle.label | object creation of type RawSqlString : RawSqlString | -| EntityFrameworkCore.cs:77:35:77:45 | access to local variable taintSource : String | semmle.label | access to local variable taintSource : String | -| EntityFrameworkCore.cs:78:18:78:42 | (...) ... | semmle.label | (...) ... | -| EntityFrameworkCore.cs:78:18:78:42 | call to operator implicit conversion : RawSqlString | semmle.label | call to operator implicit conversion : RawSqlString | -| EntityFrameworkCore.cs:78:32:78:42 | access to local variable taintSource : String | semmle.label | access to local variable taintSource : String | -| EntityFrameworkCore.cs:85:13:88:13 | { ..., ... } [property Name] : String | semmle.label | { ..., ... } [property Name] : String | -| EntityFrameworkCore.cs:87:24:87:32 | "tainted" : String | semmle.label | "tainted" : String | -| EntityFrameworkCore.cs:92:13:92:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | semmle.label | [post] access to local variable ctx [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:92:13:92:23 | [post] access to property Persons [element, property Name] : String | semmle.label | [post] access to property Persons [element, property Name] : String | -| EntityFrameworkCore.cs:92:29:92:30 | access to local variable p1 [property Name] : String | semmle.label | access to local variable p1 [property Name] : String | -| EntityFrameworkCore.cs:94:13:94:15 | access to local variable ctx [property Persons, element, property Name] : String | semmle.label | access to local variable ctx [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:107:13:110:13 | { ..., ... } [property Name] : String | semmle.label | { ..., ... } [property Name] : String | -| EntityFrameworkCore.cs:109:24:109:32 | "tainted" : String | semmle.label | "tainted" : String | -| EntityFrameworkCore.cs:114:13:114:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | semmle.label | [post] access to local variable ctx [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:114:13:114:23 | [post] access to property Persons [element, property Name] : String | semmle.label | [post] access to property Persons [element, property Name] : String | -| EntityFrameworkCore.cs:114:29:114:30 | access to local variable p1 [property Name] : String | semmle.label | access to local variable p1 [property Name] : String | -| EntityFrameworkCore.cs:116:19:116:21 | access to local variable ctx [property Persons, element, property Name] : String | semmle.label | access to local variable ctx [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:129:13:132:13 | { ..., ... } [property Name] : String | semmle.label | { ..., ... } [property Name] : String | -| EntityFrameworkCore.cs:131:24:131:32 | "tainted" : String | semmle.label | "tainted" : String | -| EntityFrameworkCore.cs:135:27:135:28 | access to local variable p1 [property Name] : String | semmle.label | access to local variable p1 [property Name] : String | -| EntityFrameworkCore.cs:148:13:151:13 | { ..., ... } [property Title] : String | semmle.label | { ..., ... } [property Title] : String | -| EntityFrameworkCore.cs:150:25:150:33 | "tainted" : String | semmle.label | "tainted" : String | -| EntityFrameworkCore.cs:155:18:155:19 | access to local variable p1 [property Title] : String | semmle.label | access to local variable p1 [property Title] : String | -| EntityFrameworkCore.cs:155:18:155:25 | access to property Title | semmle.label | access to property Title | -| EntityFrameworkCore.cs:167:13:174:13 | { ..., ... } [property Addresses, element, property Street] : String | semmle.label | { ..., ... } [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:168:29:173:17 | array creation of type Address[] [element, property Street] : String | semmle.label | array creation of type Address[] [element, property Street] : String | -| EntityFrameworkCore.cs:168:35:173:17 | { ..., ... } [element, property Street] : String | semmle.label | { ..., ... } [element, property Street] : String | -| EntityFrameworkCore.cs:169:21:172:21 | object creation of type Address [property Street] : String | semmle.label | object creation of type Address [property Street] : String | -| EntityFrameworkCore.cs:169:33:172:21 | { ..., ... } [property Street] : String | semmle.label | { ..., ... } [property Street] : String | -| EntityFrameworkCore.cs:171:34:171:42 | "tainted" : String | semmle.label | "tainted" : String | -| EntityFrameworkCore.cs:175:13:175:15 | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | semmle.label | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:175:13:175:23 | [post] access to property Persons [element, property Addresses, element, property Street] : String | semmle.label | [post] access to property Persons [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:175:29:175:30 | access to local variable p1 [property Addresses, element, property Street] : String | semmle.label | access to local variable p1 [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:176:13:176:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | semmle.label | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:180:13:180:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | semmle.label | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:183:13:186:13 | { ..., ... } [property Street] : String | semmle.label | { ..., ... } [property Street] : String | -| EntityFrameworkCore.cs:185:26:185:34 | "tainted" : String | semmle.label | "tainted" : String | -| EntityFrameworkCore.cs:187:13:187:15 | [post] access to local variable ctx [property Addresses, element, property Street] : String | semmle.label | [post] access to local variable ctx [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:187:13:187:25 | [post] access to property Addresses [element, property Street] : String | semmle.label | [post] access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:187:31:187:32 | access to local variable a1 [property Street] : String | semmle.label | access to local variable a1 [property Street] : String | -| EntityFrameworkCore.cs:188:13:188:15 | access to local variable ctx [property Addresses, element, property Street] : String | semmle.label | access to local variable ctx [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:188:13:188:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | semmle.label | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:192:13:192:15 | access to local variable ctx [property Addresses, element, property Street] : String | semmle.label | access to local variable ctx [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:192:13:192:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | semmle.label | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:199:13:202:13 | { ..., ... } [property Name] : String | semmle.label | { ..., ... } [property Name] : String | -| EntityFrameworkCore.cs:201:24:201:32 | "tainted" : String | semmle.label | "tainted" : String | -| EntityFrameworkCore.cs:204:13:207:13 | { ..., ... } [property Street] : String | semmle.label | { ..., ... } [property Street] : String | -| EntityFrameworkCore.cs:206:26:206:34 | "tainted" : String | semmle.label | "tainted" : String | -| EntityFrameworkCore.cs:208:60:208:88 | { ..., ... } [property Address, property Street] : String | semmle.label | { ..., ... } [property Address, property Street] : String | -| EntityFrameworkCore.cs:208:60:208:88 | { ..., ... } [property Person, property Name] : String | semmle.label | { ..., ... } [property Person, property Name] : String | -| EntityFrameworkCore.cs:208:71:208:72 | access to local variable p1 [property Name] : String | semmle.label | access to local variable p1 [property Name] : String | -| EntityFrameworkCore.cs:208:85:208:86 | access to local variable a1 [property Street] : String | semmle.label | access to local variable a1 [property Street] : String | -| EntityFrameworkCore.cs:209:13:209:15 | [post] access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | semmle.label | [post] access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | -| EntityFrameworkCore.cs:209:13:209:15 | [post] access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | semmle.label | [post] access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | -| EntityFrameworkCore.cs:209:13:209:31 | [post] access to property PersonAddresses [element, property Address, property Street] : String | semmle.label | [post] access to property PersonAddresses [element, property Address, property Street] : String | -| EntityFrameworkCore.cs:209:13:209:31 | [post] access to property PersonAddresses [element, property Person, property Name] : String | semmle.label | [post] access to property PersonAddresses [element, property Person, property Name] : String | -| EntityFrameworkCore.cs:209:37:209:53 | access to local variable personAddressMap1 [property Address, property Street] : String | semmle.label | access to local variable personAddressMap1 [property Address, property Street] : String | -| EntityFrameworkCore.cs:209:37:209:53 | access to local variable personAddressMap1 [property Person, property Name] : String | semmle.label | access to local variable personAddressMap1 [property Person, property Name] : String | -| EntityFrameworkCore.cs:210:13:210:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | semmle.label | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | -| EntityFrameworkCore.cs:210:13:210:15 | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | semmle.label | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | -| EntityFrameworkCore.cs:216:13:216:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | semmle.label | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | -| EntityFrameworkCore.cs:216:13:216:15 | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | semmle.label | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | -| EntityFrameworkCore.cs:219:35:219:35 | p [property Name] : String | semmle.label | p [property Name] : String | -| EntityFrameworkCore.cs:222:13:222:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | semmle.label | [post] access to local variable ctx [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:222:13:222:23 | [post] access to property Persons [element, property Name] : String | semmle.label | [post] access to property Persons [element, property Name] : String | -| EntityFrameworkCore.cs:222:29:222:29 | access to parameter p [property Name] : String | semmle.label | access to parameter p [property Name] : String | -| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx [property Persons, element, property Name] : String | semmle.label | access to local variable ctx [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:230:18:230:28 | access to property Persons [element, property Name] : String | semmle.label | access to property Persons [element, property Name] : String | -| EntityFrameworkCore.cs:230:18:230:36 | call to method First [property Name] : String | semmle.label | call to method First [property Name] : String | -| EntityFrameworkCore.cs:230:18:230:41 | access to property Name | semmle.label | access to property Name | -| EntityFrameworkCore.cs:238:18:238:30 | access to property Addresses [element, property Street] : String | semmle.label | access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:238:18:238:38 | call to method First
    [property Street] : String | semmle.label | call to method First
    [property Street] : String | -| EntityFrameworkCore.cs:238:18:238:45 | access to property Street | semmle.label | access to property Street | -| EntityFrameworkCore.cs:245:18:245:28 | access to property Persons [element, property Addresses, element, property Street] : String | semmle.label | access to property Persons [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:245:18:245:36 | call to method First [property Addresses, element, property Street] : String | semmle.label | call to method First [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:245:18:245:46 | access to property Addresses [element, property Street] : String | semmle.label | access to property Addresses [element, property Street] : String | -| EntityFrameworkCore.cs:245:18:245:54 | call to method First
    [property Street] : String | semmle.label | call to method First
    [property Street] : String | -| EntityFrameworkCore.cs:245:18:245:61 | access to property Street | semmle.label | access to property Street | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | semmle.label | "tainted" : String | +| EntityFrameworkCore.cs:83:18:83:28 | access to local variable taintSource | semmle.label | access to local variable taintSource | +| EntityFrameworkCore.cs:84:18:84:46 | (...) ... | semmle.label | (...) ... | +| EntityFrameworkCore.cs:84:18:84:46 | object creation of type RawSqlString : RawSqlString | semmle.label | object creation of type RawSqlString : RawSqlString | +| EntityFrameworkCore.cs:84:35:84:45 | access to local variable taintSource : String | semmle.label | access to local variable taintSource : String | +| EntityFrameworkCore.cs:85:18:85:42 | (...) ... | semmle.label | (...) ... | +| EntityFrameworkCore.cs:85:18:85:42 | call to operator implicit conversion : RawSqlString | semmle.label | call to operator implicit conversion : RawSqlString | +| EntityFrameworkCore.cs:85:32:85:42 | access to local variable taintSource : String | semmle.label | access to local variable taintSource : String | +| EntityFrameworkCore.cs:92:13:95:13 | { ..., ... } [property Name] : String | semmle.label | { ..., ... } [property Name] : String | +| EntityFrameworkCore.cs:94:24:94:32 | "tainted" : String | semmle.label | "tainted" : String | +| EntityFrameworkCore.cs:99:13:99:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | semmle.label | [post] access to local variable ctx [property Persons, element, property Name] : String | +| EntityFrameworkCore.cs:99:13:99:23 | [post] access to property Persons [element, property Name] : String | semmle.label | [post] access to property Persons [element, property Name] : String | +| EntityFrameworkCore.cs:99:29:99:30 | access to local variable p1 [property Name] : String | semmle.label | access to local variable p1 [property Name] : String | +| EntityFrameworkCore.cs:101:13:101:15 | access to local variable ctx [property Persons, element, property Name] : String | semmle.label | access to local variable ctx [property Persons, element, property Name] : String | +| EntityFrameworkCore.cs:114:13:117:13 | { ..., ... } [property Name] : String | semmle.label | { ..., ... } [property Name] : String | +| EntityFrameworkCore.cs:116:24:116:32 | "tainted" : String | semmle.label | "tainted" : String | +| EntityFrameworkCore.cs:121:13:121:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | semmle.label | [post] access to local variable ctx [property Persons, element, property Name] : String | +| EntityFrameworkCore.cs:121:13:121:23 | [post] access to property Persons [element, property Name] : String | semmle.label | [post] access to property Persons [element, property Name] : String | +| EntityFrameworkCore.cs:121:29:121:30 | access to local variable p1 [property Name] : String | semmle.label | access to local variable p1 [property Name] : String | +| EntityFrameworkCore.cs:123:19:123:21 | access to local variable ctx [property Persons, element, property Name] : String | semmle.label | access to local variable ctx [property Persons, element, property Name] : String | +| EntityFrameworkCore.cs:136:13:139:13 | { ..., ... } [property Name] : String | semmle.label | { ..., ... } [property Name] : String | +| EntityFrameworkCore.cs:138:24:138:32 | "tainted" : String | semmle.label | "tainted" : String | +| EntityFrameworkCore.cs:142:27:142:28 | access to local variable p1 [property Name] : String | semmle.label | access to local variable p1 [property Name] : String | +| EntityFrameworkCore.cs:155:13:158:13 | { ..., ... } [property Title] : String | semmle.label | { ..., ... } [property Title] : String | +| EntityFrameworkCore.cs:157:25:157:33 | "tainted" : String | semmle.label | "tainted" : String | +| EntityFrameworkCore.cs:162:18:162:19 | access to local variable p1 [property Title] : String | semmle.label | access to local variable p1 [property Title] : String | +| EntityFrameworkCore.cs:162:18:162:25 | access to property Title | semmle.label | access to property Title | +| EntityFrameworkCore.cs:174:13:181:13 | { ..., ... } [property Addresses, element, property Street] : String | semmle.label | { ..., ... } [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:175:29:180:17 | array creation of type Address[] [element, property Street] : String | semmle.label | array creation of type Address[] [element, property Street] : String | +| EntityFrameworkCore.cs:175:35:180:17 | { ..., ... } [element, property Street] : String | semmle.label | { ..., ... } [element, property Street] : String | +| EntityFrameworkCore.cs:176:21:179:21 | object creation of type Address [property Street] : String | semmle.label | object creation of type Address [property Street] : String | +| EntityFrameworkCore.cs:176:33:179:21 | { ..., ... } [property Street] : String | semmle.label | { ..., ... } [property Street] : String | +| EntityFrameworkCore.cs:178:34:178:42 | "tainted" : String | semmle.label | "tainted" : String | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | semmle.label | [post] access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:182:13:182:23 | [post] access to property Persons [element, property Addresses, element, property Street] : String | semmle.label | [post] access to property Persons [element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:182:29:182:30 | access to local variable p1 [property Addresses, element, property Street] : String | semmle.label | access to local variable p1 [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | semmle.label | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | semmle.label | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:190:13:193:13 | { ..., ... } [property Street] : String | semmle.label | { ..., ... } [property Street] : String | +| EntityFrameworkCore.cs:192:26:192:34 | "tainted" : String | semmle.label | "tainted" : String | +| EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx [property Addresses, element, property Street] : String | semmle.label | [post] access to local variable ctx [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:194:13:194:25 | [post] access to property Addresses [element, property Street] : String | semmle.label | [post] access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:194:31:194:32 | access to local variable a1 [property Street] : String | semmle.label | access to local variable a1 [property Street] : String | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx [property Addresses, element, property Street] : String | semmle.label | access to local variable ctx [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | semmle.label | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx [property Addresses, element, property Street] : String | semmle.label | access to local variable ctx [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | semmle.label | access to local variable ctx [property Persons, element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:206:13:209:13 | { ..., ... } [property Name] : String | semmle.label | { ..., ... } [property Name] : String | +| EntityFrameworkCore.cs:208:24:208:32 | "tainted" : String | semmle.label | "tainted" : String | +| EntityFrameworkCore.cs:211:13:214:13 | { ..., ... } [property Street] : String | semmle.label | { ..., ... } [property Street] : String | +| EntityFrameworkCore.cs:213:26:213:34 | "tainted" : String | semmle.label | "tainted" : String | +| EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } [property Address, property Street] : String | semmle.label | { ..., ... } [property Address, property Street] : String | +| EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } [property Person, property Name] : String | semmle.label | { ..., ... } [property Person, property Name] : String | +| EntityFrameworkCore.cs:215:71:215:72 | access to local variable p1 [property Name] : String | semmle.label | access to local variable p1 [property Name] : String | +| EntityFrameworkCore.cs:215:85:215:86 | access to local variable a1 [property Street] : String | semmle.label | access to local variable a1 [property Street] : String | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | semmle.label | [post] access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | semmle.label | [post] access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | +| EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses [element, property Address, property Street] : String | semmle.label | [post] access to property PersonAddresses [element, property Address, property Street] : String | +| EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses [element, property Person, property Name] : String | semmle.label | [post] access to property PersonAddresses [element, property Person, property Name] : String | +| EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 [property Address, property Street] : String | semmle.label | access to local variable personAddressMap1 [property Address, property Street] : String | +| EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 [property Person, property Name] : String | semmle.label | access to local variable personAddressMap1 [property Person, property Name] : String | +| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | semmle.label | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | +| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | semmle.label | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | +| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | semmle.label | access to local variable ctx [property PersonAddresses, element, property Address, property Street] : String | +| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | semmle.label | access to local variable ctx [property PersonAddresses, element, property Person, property Name] : String | +| EntityFrameworkCore.cs:226:35:226:35 | p [property Name] : String | semmle.label | p [property Name] : String | +| EntityFrameworkCore.cs:229:13:229:15 | [post] access to local variable ctx [property Persons, element, property Name] : String | semmle.label | [post] access to local variable ctx [property Persons, element, property Name] : String | +| EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons [element, property Name] : String | semmle.label | [post] access to property Persons [element, property Name] : String | +| EntityFrameworkCore.cs:229:29:229:29 | access to parameter p [property Name] : String | semmle.label | access to parameter p [property Name] : String | +| EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx [property Persons, element, property Name] : String | semmle.label | access to local variable ctx [property Persons, element, property Name] : String | +| EntityFrameworkCore.cs:237:18:237:28 | access to property Persons [element, property Name] : String | semmle.label | access to property Persons [element, property Name] : String | +| EntityFrameworkCore.cs:237:18:237:36 | call to method First [property Name] : String | semmle.label | call to method First [property Name] : String | +| EntityFrameworkCore.cs:237:18:237:41 | access to property Name | semmle.label | access to property Name | +| EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses [element, property Street] : String | semmle.label | access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:245:18:245:38 | call to method First
    [property Street] : String | semmle.label | call to method First
    [property Street] : String | +| EntityFrameworkCore.cs:245:18:245:45 | access to property Street | semmle.label | access to property Street | +| EntityFrameworkCore.cs:252:18:252:28 | access to property Persons [element, property Addresses, element, property Street] : String | semmle.label | access to property Persons [element, property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:252:18:252:36 | call to method First [property Addresses, element, property Street] : String | semmle.label | call to method First [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses [element, property Street] : String | semmle.label | access to property Addresses [element, property Street] : String | +| EntityFrameworkCore.cs:252:18:252:54 | call to method First
    [property Street] : String | semmle.label | call to method First
    [property Street] : String | +| EntityFrameworkCore.cs:252:18:252:61 | access to property Street | semmle.label | access to property Street | subpaths #select | EntityFramework.cs:129:18:129:25 | access to property Title | EntityFramework.cs:124:25:124:33 | "tainted" : String | EntityFramework.cs:129:18:129:25 | access to property Title | $@ | EntityFramework.cs:124:25:124:33 | "tainted" : String | "tainted" : String | @@ -341,17 +341,17 @@ subpaths | EntityFramework.cs:219:18:219:61 | access to property Street | EntityFramework.cs:145:34:145:42 | "tainted" : String | EntityFramework.cs:219:18:219:61 | access to property Street | $@ | EntityFramework.cs:145:34:145:42 | "tainted" : String | "tainted" : String | | EntityFramework.cs:219:18:219:61 | access to property Street | EntityFramework.cs:159:26:159:34 | "tainted" : String | EntityFramework.cs:219:18:219:61 | access to property Street | $@ | EntityFramework.cs:159:26:159:34 | "tainted" : String | "tainted" : String | | EntityFramework.cs:219:18:219:61 | access to property Street | EntityFramework.cs:180:26:180:34 | "tainted" : String | EntityFramework.cs:219:18:219:61 | access to property Street | $@ | EntityFramework.cs:180:26:180:34 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:76:18:76:28 | access to local variable taintSource | EntityFrameworkCore.cs:75:31:75:39 | "tainted" : String | EntityFrameworkCore.cs:76:18:76:28 | access to local variable taintSource | $@ | EntityFrameworkCore.cs:75:31:75:39 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:77:18:77:46 | (...) ... | EntityFrameworkCore.cs:75:31:75:39 | "tainted" : String | EntityFrameworkCore.cs:77:18:77:46 | (...) ... | $@ | EntityFrameworkCore.cs:75:31:75:39 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:78:18:78:42 | (...) ... | EntityFrameworkCore.cs:75:31:75:39 | "tainted" : String | EntityFrameworkCore.cs:78:18:78:42 | (...) ... | $@ | EntityFrameworkCore.cs:75:31:75:39 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:155:18:155:25 | access to property Title | EntityFrameworkCore.cs:150:25:150:33 | "tainted" : String | EntityFrameworkCore.cs:155:18:155:25 | access to property Title | $@ | EntityFrameworkCore.cs:150:25:150:33 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:230:18:230:41 | access to property Name | EntityFrameworkCore.cs:87:24:87:32 | "tainted" : String | EntityFrameworkCore.cs:230:18:230:41 | access to property Name | $@ | EntityFrameworkCore.cs:87:24:87:32 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:230:18:230:41 | access to property Name | EntityFrameworkCore.cs:109:24:109:32 | "tainted" : String | EntityFrameworkCore.cs:230:18:230:41 | access to property Name | $@ | EntityFrameworkCore.cs:109:24:109:32 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:230:18:230:41 | access to property Name | EntityFrameworkCore.cs:131:24:131:32 | "tainted" : String | EntityFrameworkCore.cs:230:18:230:41 | access to property Name | $@ | EntityFrameworkCore.cs:131:24:131:32 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:230:18:230:41 | access to property Name | EntityFrameworkCore.cs:201:24:201:32 | "tainted" : String | EntityFrameworkCore.cs:230:18:230:41 | access to property Name | $@ | EntityFrameworkCore.cs:201:24:201:32 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:238:18:238:45 | access to property Street | EntityFrameworkCore.cs:171:34:171:42 | "tainted" : String | EntityFrameworkCore.cs:238:18:238:45 | access to property Street | $@ | EntityFrameworkCore.cs:171:34:171:42 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:238:18:238:45 | access to property Street | EntityFrameworkCore.cs:185:26:185:34 | "tainted" : String | EntityFrameworkCore.cs:238:18:238:45 | access to property Street | $@ | EntityFrameworkCore.cs:185:26:185:34 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:238:18:238:45 | access to property Street | EntityFrameworkCore.cs:206:26:206:34 | "tainted" : String | EntityFrameworkCore.cs:238:18:238:45 | access to property Street | $@ | EntityFrameworkCore.cs:206:26:206:34 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:245:18:245:61 | access to property Street | EntityFrameworkCore.cs:171:34:171:42 | "tainted" : String | EntityFrameworkCore.cs:245:18:245:61 | access to property Street | $@ | EntityFrameworkCore.cs:171:34:171:42 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:245:18:245:61 | access to property Street | EntityFrameworkCore.cs:185:26:185:34 | "tainted" : String | EntityFrameworkCore.cs:245:18:245:61 | access to property Street | $@ | EntityFrameworkCore.cs:185:26:185:34 | "tainted" : String | "tainted" : String | -| EntityFrameworkCore.cs:245:18:245:61 | access to property Street | EntityFrameworkCore.cs:206:26:206:34 | "tainted" : String | EntityFrameworkCore.cs:245:18:245:61 | access to property Street | $@ | EntityFrameworkCore.cs:206:26:206:34 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:83:18:83:28 | access to local variable taintSource | EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:83:18:83:28 | access to local variable taintSource | $@ | EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:84:18:84:46 | (...) ... | EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:84:18:84:46 | (...) ... | $@ | EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:85:18:85:42 | (...) ... | EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:85:18:85:42 | (...) ... | $@ | EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:162:18:162:25 | access to property Title | EntityFrameworkCore.cs:157:25:157:33 | "tainted" : String | EntityFrameworkCore.cs:162:18:162:25 | access to property Title | $@ | EntityFrameworkCore.cs:157:25:157:33 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:237:18:237:41 | access to property Name | EntityFrameworkCore.cs:94:24:94:32 | "tainted" : String | EntityFrameworkCore.cs:237:18:237:41 | access to property Name | $@ | EntityFrameworkCore.cs:94:24:94:32 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:237:18:237:41 | access to property Name | EntityFrameworkCore.cs:116:24:116:32 | "tainted" : String | EntityFrameworkCore.cs:237:18:237:41 | access to property Name | $@ | EntityFrameworkCore.cs:116:24:116:32 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:237:18:237:41 | access to property Name | EntityFrameworkCore.cs:138:24:138:32 | "tainted" : String | EntityFrameworkCore.cs:237:18:237:41 | access to property Name | $@ | EntityFrameworkCore.cs:138:24:138:32 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:237:18:237:41 | access to property Name | EntityFrameworkCore.cs:208:24:208:32 | "tainted" : String | EntityFrameworkCore.cs:237:18:237:41 | access to property Name | $@ | EntityFrameworkCore.cs:208:24:208:32 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:245:18:245:45 | access to property Street | EntityFrameworkCore.cs:178:34:178:42 | "tainted" : String | EntityFrameworkCore.cs:245:18:245:45 | access to property Street | $@ | EntityFrameworkCore.cs:178:34:178:42 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:245:18:245:45 | access to property Street | EntityFrameworkCore.cs:192:26:192:34 | "tainted" : String | EntityFrameworkCore.cs:245:18:245:45 | access to property Street | $@ | EntityFrameworkCore.cs:192:26:192:34 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:245:18:245:45 | access to property Street | EntityFrameworkCore.cs:213:26:213:34 | "tainted" : String | EntityFrameworkCore.cs:245:18:245:45 | access to property Street | $@ | EntityFrameworkCore.cs:213:26:213:34 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:252:18:252:61 | access to property Street | EntityFrameworkCore.cs:178:34:178:42 | "tainted" : String | EntityFrameworkCore.cs:252:18:252:61 | access to property Street | $@ | EntityFrameworkCore.cs:178:34:178:42 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:252:18:252:61 | access to property Street | EntityFrameworkCore.cs:192:26:192:34 | "tainted" : String | EntityFrameworkCore.cs:252:18:252:61 | access to property Street | $@ | EntityFrameworkCore.cs:192:26:192:34 | "tainted" : String | "tainted" : String | +| EntityFrameworkCore.cs:252:18:252:61 | access to property Street | EntityFrameworkCore.cs:213:26:213:34 | "tainted" : String | EntityFrameworkCore.cs:252:18:252:61 | access to property Street | $@ | EntityFrameworkCore.cs:213:26:213:34 | "tainted" : String | "tainted" : String | diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/EntityFrameworkCore.cs b/csharp/ql/test/library-tests/frameworks/EntityFramework/EntityFrameworkCore.cs index 4cf1dd138c8..b45290dc799 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/EntityFrameworkCore.cs +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/EntityFrameworkCore.cs @@ -56,7 +56,7 @@ namespace EFCoreTests Microsoft.EntityFrameworkCore.Storage.IRawSqlCommandBuilder builder; - async void SqlExprs(MyContext ctx) + async void SqlExprs(MyContext ctx, System.Threading.CancellationToken token) { // Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.ExecuteSqlCommand ctx.Database.ExecuteSqlCommand(""); // SqlExpr @@ -68,6 +68,13 @@ namespace EFCoreTests // Microsoft.EntityFrameworkCore.RawSqlString new RawSqlString(""); // SqlExpr RawSqlString str = ""; // SqlExpr + + ctx.Persons.FromSqlRaw("sql"); + ctx.Database.ExecuteSqlRaw("sql", (IEnumerable)null); + ctx.Database.ExecuteSqlRaw("sql"); + await ctx.Database.ExecuteSqlRawAsync("sql", token); + await ctx.Database.ExecuteSqlRawAsync("sql"); + await ctx.Database.ExecuteSqlRawAsync("sql", (IEnumerable)null, token); } void TestRawSqlStringDataFlow() diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected index 9e043ec7486..9fb5be26eeb 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected @@ -1,3 +1,4 @@ +summary | Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[Qualifier].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Id];value | | Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[Qualifier].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];value | | Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[Qualifier].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];value | @@ -130,3 +131,11 @@ | System.Data.Entity;DbSet<>;false;AttachRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | | System.Data.Entity;DbSet<>;false;Update;(T);;Argument[0];Argument[Qualifier].Element;value | | System.Data.Entity;DbSet<>;false;UpdateRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[Qualifier].Element;value | +sourceNode +sinkNode +| EntityFrameworkCore.cs:72:36:72:40 | "sql" | sql | +| EntityFrameworkCore.cs:73:40:73:44 | "sql" | sql | +| EntityFrameworkCore.cs:74:40:74:44 | "sql" | sql | +| EntityFrameworkCore.cs:75:51:75:55 | "sql" | sql | +| EntityFrameworkCore.cs:76:51:76:55 | "sql" | sql | +| EntityFrameworkCore.cs:77:51:77:55 | "sql" | sql | diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql index 61bee675bf1..41cc8379b3d 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql @@ -1,6 +1,13 @@ import semmle.code.csharp.frameworks.EntityFramework::EntityFramework import shared.FlowSummaries +import semmle.code.csharp.dataflow.ExternalFlow as ExternalFlow private class IncludeEFSummarizedCallable extends IncludeSummarizedCallable { IncludeEFSummarizedCallable() { this instanceof EFSummarizedCallable } } + +query predicate sourceNode(DataFlow::Node node, string kind) { + ExternalFlow::sourceNode(node, kind) +} + +query predicate sinkNode(DataFlow::Node node, string kind) { ExternalFlow::sinkNode(node, kind) } diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/SqlExprs.expected b/csharp/ql/test/library-tests/frameworks/EntityFramework/SqlExprs.expected index faaddc5257b..5008ff2695c 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/SqlExprs.expected +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/SqlExprs.expected @@ -3,5 +3,11 @@ | EntityFrameworkCore.cs:66:13:66:29 | call to method Build | | EntityFrameworkCore.cs:69:13:69:32 | object creation of type RawSqlString | | EntityFrameworkCore.cs:70:32:70:33 | call to operator implicit conversion | -| EntityFrameworkCore.cs:77:18:77:46 | object creation of type RawSqlString | -| EntityFrameworkCore.cs:78:18:78:42 | call to operator implicit conversion | +| EntityFrameworkCore.cs:72:13:72:41 | call to method FromSqlRaw | +| EntityFrameworkCore.cs:73:13:73:72 | call to method ExecuteSqlRaw | +| EntityFrameworkCore.cs:74:13:74:45 | call to method ExecuteSqlRaw | +| EntityFrameworkCore.cs:75:19:75:63 | call to method ExecuteSqlRawAsync | +| EntityFrameworkCore.cs:76:19:76:56 | call to method ExecuteSqlRawAsync | +| EntityFrameworkCore.cs:77:19:77:90 | call to method ExecuteSqlRawAsync | +| EntityFrameworkCore.cs:84:18:84:46 | object creation of type RawSqlString | +| EntityFrameworkCore.cs:85:18:85:42 | call to operator implicit conversion | diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/StoredFlowSources.expected b/csharp/ql/test/library-tests/frameworks/EntityFramework/StoredFlowSources.expected index 4a0ecb82c3f..2b6c64790ce 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/StoredFlowSources.expected +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/StoredFlowSources.expected @@ -10,11 +10,11 @@ | EntityFramework.cs:219:18:219:61 | access to property Street | | EntityFrameworkCore.cs:52:22:52:25 | access to property Id | | EntityFrameworkCore.cs:53:24:53:29 | access to property Name | -| EntityFrameworkCore.cs:229:18:229:39 | access to property Id | -| EntityFrameworkCore.cs:230:18:230:41 | access to property Name | -| EntityFrameworkCore.cs:237:18:237:41 | access to property Id | -| EntityFrameworkCore.cs:238:18:238:45 | access to property Street | -| EntityFrameworkCore.cs:244:18:244:46 | access to property Addresses | -| EntityFrameworkCore.cs:244:18:244:57 | access to property Id | -| EntityFrameworkCore.cs:245:18:245:46 | access to property Addresses | -| EntityFrameworkCore.cs:245:18:245:61 | access to property Street | +| EntityFrameworkCore.cs:236:18:236:39 | access to property Id | +| EntityFrameworkCore.cs:237:18:237:41 | access to property Name | +| EntityFrameworkCore.cs:244:18:244:41 | access to property Id | +| EntityFrameworkCore.cs:245:18:245:45 | access to property Street | +| EntityFrameworkCore.cs:251:18:251:46 | access to property Addresses | +| EntityFrameworkCore.cs:251:18:251:57 | access to property Id | +| EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses | +| EntityFrameworkCore.cs:252:18:252:61 | access to property Street | diff --git a/csharp/ql/test/library-tests/frameworks/JsonNET/Json.ql b/csharp/ql/test/library-tests/frameworks/JsonNET/Json.ql index 81067f76838..5615e5873e8 100644 --- a/csharp/ql/test/library-tests/frameworks/JsonNET/Json.ql +++ b/csharp/ql/test/library-tests/frameworks/JsonNET/Json.ql @@ -1,5 +1,4 @@ import csharp -import semmle.code.csharp.dataflow.TaintTracking class Configuration extends TaintTracking::Configuration { Configuration() { this = "Json.NET test" } diff --git a/csharp/ql/test/library-tests/frameworks/NHibernate/DataFlow.ql b/csharp/ql/test/library-tests/frameworks/NHibernate/DataFlow.ql index ab97e1494ff..655a0ef2856 100644 --- a/csharp/ql/test/library-tests/frameworks/NHibernate/DataFlow.ql +++ b/csharp/ql/test/library-tests/frameworks/NHibernate/DataFlow.ql @@ -1,5 +1,4 @@ import csharp -import semmle.code.csharp.dataflow.TaintTracking class MyConfiguration extends TaintTracking::Configuration { MyConfiguration() { this = "MyConfiguration" } diff --git a/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.cs b/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.cs index 2c6ea6bafbf..e3aa1ad3067 100644 --- a/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.cs +++ b/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.cs @@ -22,6 +22,7 @@ class Test var good7 = (Action)((int x) => { }); func = x => x; exprFunc = x => x; + exprFuncUntyped = (Expression>)(x => x); // FP } enum Enum @@ -35,4 +36,5 @@ class Test private Func func; private Expression> exprFunc; + private LambdaExpression exprFuncUntyped; } diff --git a/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.expected b/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.expected index 7310437e1ef..11ac047b255 100644 --- a/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.expected +++ b/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.expected @@ -2,5 +2,6 @@ | UselessCastToSelf.cs:10:20:10:29 | (...) ... | This cast is redundant because the expression already has type Test. | | UselessCastToSelf.cs:11:20:11:31 | ... as ... | This cast is redundant because the expression already has type Test. | | UselessCastToSelf.cs:13:20:13:56 | (...) ... | This cast is redundant because the expression already has type Expression>>. | -| UselessCastToSelf.cs:31:17:31:22 | (...) ... | This cast is redundant because the expression already has type Int32. | -| UselessCastToSelf.cs:33:24:33:29 | (...) ... | This cast is redundant because the expression already has type Int32. | +| UselessCastToSelf.cs:25:27:25:63 | (...) ... | This cast is redundant because the expression already has type Expression>>. | +| UselessCastToSelf.cs:32:17:32:22 | (...) ... | This cast is redundant because the expression already has type Int32. | +| UselessCastToSelf.cs:34:24:34:29 | (...) ... | This cast is redundant because the expression already has type Int32. | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-020/ExternalAPIsUsedWithUntrustedData.expected b/csharp/ql/test/query-tests/Security Features/CWE-020/ExternalAPIsUsedWithUntrustedData.expected index 25d15f527f7..5d635dbad88 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-020/ExternalAPIsUsedWithUntrustedData.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-020/ExternalAPIsUsedWithUntrustedData.expected @@ -1,3 +1,2 @@ -| System.Collections.Specialized.NameValueCollection.get_Item(string) [qualifier] | 1 | 1 | | System.Web.HttpRequest.get_QueryString() [qualifier] | 1 | 1 | | System.Web.HttpResponse.Write(string) [param 0] | 1 | 1 | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-020/UntrustedDataToExternalAPI.expected b/csharp/ql/test/query-tests/Security Features/CWE-020/UntrustedDataToExternalAPI.expected index 57ba315175c..4135e7ce5d6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-020/UntrustedDataToExternalAPI.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-020/UntrustedDataToExternalAPI.expected @@ -1,12 +1,13 @@ edges +| UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | UntrustedData.cs:9:20:9:50 | access to indexer : String | | UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | UntrustedData.cs:13:28:13:31 | access to local variable name | +| UntrustedData.cs:9:20:9:50 | access to indexer : String | UntrustedData.cs:13:28:13:31 | access to local variable name | nodes | UntrustedData.cs:9:20:9:30 | access to property Request | semmle.label | access to property Request | -| UntrustedData.cs:9:20:9:42 | access to property QueryString | semmle.label | access to property QueryString | | UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| UntrustedData.cs:9:20:9:50 | access to indexer : String | semmle.label | access to indexer : String | | UntrustedData.cs:13:28:13:31 | access to local variable name | semmle.label | access to local variable name | subpaths #select | UntrustedData.cs:9:20:9:30 | access to property Request | UntrustedData.cs:9:20:9:30 | access to property Request | UntrustedData.cs:9:20:9:30 | access to property Request | Call to System.Web.HttpRequest.get_QueryString with untrusted data from $@. | UntrustedData.cs:9:20:9:30 | access to property Request | access to property Request | -| UntrustedData.cs:9:20:9:42 | access to property QueryString | UntrustedData.cs:9:20:9:42 | access to property QueryString | UntrustedData.cs:9:20:9:42 | access to property QueryString | Call to System.Collections.Specialized.NameValueCollection.get_Item with untrusted data from $@. | UntrustedData.cs:9:20:9:42 | access to property QueryString | access to property QueryString | | UntrustedData.cs:13:28:13:31 | access to local variable name | UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | UntrustedData.cs:13:28:13:31 | access to local variable name | Call to System.Web.HttpResponse.Write with untrusted data from $@. | UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | access to property QueryString : NameValueCollection | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/TaintedPath.expected b/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/TaintedPath.expected index f0bbe6e13f5..59f27496610 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/TaintedPath.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/TaintedPath.expected @@ -1,4 +1,5 @@ edges +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:10:23:10:53 | access to indexer : String | | TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:12:50:12:53 | access to local variable path | | TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:17:51:17:54 | access to local variable path | | TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:25:30:25:33 | access to local variable path | @@ -6,8 +7,16 @@ edges | TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:36:25:36:31 | access to local variable badPath | | TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:38:49:38:55 | access to local variable badPath | | TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:51:26:51:29 | access to local variable path | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:12:50:12:53 | access to local variable path | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:17:51:17:54 | access to local variable path | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:25:30:25:33 | access to local variable path | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:31:30:31:33 | access to local variable path | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:36:25:36:31 | access to local variable badPath | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:38:49:38:55 | access to local variable badPath | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:51:26:51:29 | access to local variable path | nodes | TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | semmle.label | access to indexer : String | | TaintedPath.cs:12:50:12:53 | access to local variable path | semmle.label | access to local variable path | | TaintedPath.cs:17:51:17:54 | access to local variable path | semmle.label | access to local variable path | | TaintedPath.cs:25:30:25:33 | access to local variable path | semmle.label | access to local variable path | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected index 799b00e69f8..06d2429450c 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected @@ -3,26 +3,53 @@ edges | CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:26:27:26:47 | ... + ... | | CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:26:50:26:66 | ... + ... | | CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:63:28:71 | access to local variable userInput | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | | CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:74:28:82 | access to local variable userInput | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | | CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:32:39:32:47 | access to local variable userInput | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | | CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:33:40:33:48 | access to local variable userInput | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | | CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:34:47:34:55 | access to local variable userInput | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | +| CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | CommandInjection.cs:29:27:29:35 | access to local variable startInfo | +| CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | +| CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | +| CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | +| CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | +| CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | +| CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | +| CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | +| CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | nodes | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | | CommandInjection.cs:25:32:25:51 | access to property Text : String | semmle.label | access to property Text : String | | CommandInjection.cs:26:27:26:47 | ... + ... | semmle.label | ... + ... | | CommandInjection.cs:26:50:26:66 | ... + ... | semmle.label | ... + ... | +| CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | semmle.label | object creation of type ProcessStartInfo : ProcessStartInfo | | CommandInjection.cs:28:63:28:71 | access to local variable userInput | semmle.label | access to local variable userInput | +| CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | | CommandInjection.cs:28:74:28:82 | access to local variable userInput | semmle.label | access to local variable userInput | +| CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | +| CommandInjection.cs:29:27:29:35 | access to local variable startInfo | semmle.label | access to local variable startInfo | +| CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | | CommandInjection.cs:32:39:32:47 | access to local variable userInput | semmle.label | access to local variable userInput | +| CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | +| CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | | CommandInjection.cs:33:40:33:48 | access to local variable userInput | semmle.label | access to local variable userInput | +| CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | +| CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | | CommandInjection.cs:34:47:34:55 | access to local variable userInput | semmle.label | access to local variable userInput | +| CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | +| CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | semmle.label | access to local variable startInfoProps | subpaths #select | CommandInjection.cs:26:27:26:47 | ... + ... | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:26:27:26:47 | ... + ... | $@ flows to here and is used in a command. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | User-provided value | | CommandInjection.cs:26:50:26:66 | ... + ... | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:26:50:26:66 | ... + ... | $@ flows to here and is used in a command. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | User-provided value | | CommandInjection.cs:28:63:28:71 | access to local variable userInput | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:28:63:28:71 | access to local variable userInput | $@ flows to here and is used in a command. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | User-provided value | | CommandInjection.cs:28:74:28:82 | access to local variable userInput | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:28:74:28:82 | access to local variable userInput | $@ flows to here and is used in a command. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | User-provided value | +| CommandInjection.cs:29:27:29:35 | access to local variable startInfo | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:29:27:29:35 | access to local variable startInfo | $@ flows to here and is used in a command. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | User-provided value | | CommandInjection.cs:32:39:32:47 | access to local variable userInput | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:32:39:32:47 | access to local variable userInput | $@ flows to here and is used in a command. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | User-provided value | | CommandInjection.cs:33:40:33:48 | access to local variable userInput | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:33:40:33:48 | access to local variable userInput | $@ flows to here and is used in a command. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | User-provided value | | CommandInjection.cs:34:47:34:55 | access to local variable userInput | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:34:47:34:55 | access to local variable userInput | $@ flows to here and is used in a command. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | User-provided value | +| CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | $@ flows to here and is used in a command. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | User-provided value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.expected index 90a98c2d215..859767e8b29 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.expected @@ -7,13 +7,24 @@ edges | XSS.cs:26:32:26:40 | access to local variable userInput [element] : String | XSS.cs:26:32:26:51 | call to method ToString | | XSS.cs:27:29:27:37 | access to local variable userInput [element] : String | XSS.cs:27:29:27:48 | call to method ToString | | XSS.cs:28:26:28:34 | access to local variable userInput [element] : String | XSS.cs:28:26:28:45 | call to method ToString | +| XSS.cs:37:27:37:53 | access to property QueryString : NameValueCollection | XSS.cs:37:27:37:61 | access to indexer : String | | XSS.cs:37:27:37:53 | access to property QueryString : NameValueCollection | XSS.cs:38:36:38:39 | access to local variable name | +| XSS.cs:37:27:37:61 | access to indexer : String | XSS.cs:38:36:38:39 | access to local variable name | +| XSS.cs:57:27:57:65 | access to property QueryString : NameValueCollection | XSS.cs:57:27:57:73 | access to indexer : String | | XSS.cs:57:27:57:65 | access to property QueryString : NameValueCollection | XSS.cs:59:22:59:25 | access to local variable name | +| XSS.cs:57:27:57:73 | access to indexer : String | XSS.cs:59:22:59:25 | access to local variable name | +| XSS.cs:75:27:75:53 | access to property QueryString : NameValueCollection | XSS.cs:75:27:75:61 | access to indexer : String | | XSS.cs:75:27:75:53 | access to property QueryString : NameValueCollection | XSS.cs:76:36:76:39 | access to local variable name | +| XSS.cs:75:27:75:61 | access to indexer : String | XSS.cs:76:36:76:39 | access to local variable name | | XSS.cs:78:28:78:42 | access to property Request : HttpRequestBase | XSS.cs:79:36:79:40 | access to local variable name2 | +| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:85:27:85:61 | access to indexer : String | | XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:86:28:86:31 | access to local variable name | | XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:87:31:87:34 | access to local variable name | +| XSS.cs:85:27:85:61 | access to indexer : String | XSS.cs:86:28:86:31 | access to local variable name | +| XSS.cs:85:27:85:61 | access to indexer : String | XSS.cs:87:31:87:34 | access to local variable name | +| XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | XSS.cs:94:27:94:61 | access to indexer : String | | XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | XSS.cs:95:31:95:34 | access to local variable name | +| XSS.cs:94:27:94:61 | access to indexer : String | XSS.cs:95:31:95:34 | access to local variable name | | script.aspx:12:1:12:14 | <%= ... %> | script.aspx:12:1:12:14 | <%= ... %> | | script.aspx:16:1:16:34 | <%= ... %> | script.aspx:16:1:16:34 | <%= ... %> | | script.aspx:20:1:20:41 | <%= ... %> | script.aspx:20:1:20:41 | <%= ... %> | @@ -28,17 +39,22 @@ nodes | XSS.cs:28:26:28:34 | access to local variable userInput [element] : String | semmle.label | access to local variable userInput [element] : String | | XSS.cs:28:26:28:45 | call to method ToString | semmle.label | call to method ToString | | XSS.cs:37:27:37:53 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| XSS.cs:37:27:37:61 | access to indexer : String | semmle.label | access to indexer : String | | XSS.cs:38:36:38:39 | access to local variable name | semmle.label | access to local variable name | | XSS.cs:57:27:57:65 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| XSS.cs:57:27:57:73 | access to indexer : String | semmle.label | access to indexer : String | | XSS.cs:59:22:59:25 | access to local variable name | semmle.label | access to local variable name | | XSS.cs:75:27:75:53 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| XSS.cs:75:27:75:61 | access to indexer : String | semmle.label | access to indexer : String | | XSS.cs:76:36:76:39 | access to local variable name | semmle.label | access to local variable name | | XSS.cs:78:28:78:42 | access to property Request : HttpRequestBase | semmle.label | access to property Request : HttpRequestBase | | XSS.cs:79:36:79:40 | access to local variable name2 | semmle.label | access to local variable name2 | | XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| XSS.cs:85:27:85:61 | access to indexer : String | semmle.label | access to indexer : String | | XSS.cs:86:28:86:31 | access to local variable name | semmle.label | access to local variable name | | XSS.cs:87:31:87:34 | access to local variable name | semmle.label | access to local variable name | | XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| XSS.cs:94:27:94:61 | access to indexer : String | semmle.label | access to indexer : String | | XSS.cs:95:31:95:34 | access to local variable name | semmle.label | access to local variable name | | XSS.cs:134:20:134:33 | access to property RawUrl | semmle.label | access to property RawUrl | | script.aspx:12:1:12:14 | <%= ... %> | semmle.label | <%= ... %> | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected index e15a42e1bff..b5bf1f609f3 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected @@ -1,6 +1,9 @@ edges +| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:19:25:19:52 | access to indexer : String | | XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | | XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | +| XSSAspNet.cs:19:25:19:52 | access to indexer : String | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | +| XSSAspNet.cs:19:25:19:52 | access to indexer : String | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | | XSSAspNet.cs:43:28:43:46 | access to property QueryString : NameValueCollection | XSSAspNet.cs:43:28:43:55 | access to indexer | | XSSAspNetCore.cs:21:52:21:64 | access to property Query : IQueryCollection | XSSAspNetCore.cs:21:52:21:76 | call to operator implicit conversion | | XSSAspNetCore.cs:40:56:40:58 | foo : String | XSSAspNetCore.cs:44:51:44:53 | access to parameter foo | @@ -12,6 +15,7 @@ edges | XSSAspNetCore.cs:72:51:72:65 | access to property Headers : IHeaderDictionary | XSSAspNetCore.cs:72:51:72:72 | call to operator implicit conversion | nodes | XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| XSSAspNet.cs:19:25:19:52 | access to indexer : String | semmle.label | access to indexer : String | | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | semmle.label | access to local variable sayHi | | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | semmle.label | access to local variable sayHi | | XSSAspNet.cs:43:28:43:46 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected index c83f74fedc2..b0fd2471366 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected @@ -1,12 +1,20 @@ edges +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:11:27:11:61 | access to indexer : String | | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:14:54:14:78 | ... + ... | | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:16:21:16:45 | ... + ... | | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:23:21:23:45 | ... + ... | | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:24:53:24:77 | ... + ... | | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:27:48:27:70 | ... + ... | | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:29:20:29:42 | ... + ... | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:14:54:14:78 | ... + ... | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:16:21:16:45 | ... + ... | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:23:21:23:45 | ... + ... | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:24:53:24:77 | ... + ... | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:27:48:27:70 | ... + ... | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:29:20:29:42 | ... + ... | nodes | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | semmle.label | access to indexer : String | | LDAPInjection.cs:14:54:14:78 | ... + ... | semmle.label | ... + ... | | LDAPInjection.cs:16:21:16:45 | ... + ... | semmle.label | ... + ... | | LDAPInjection.cs:23:21:23:45 | ... + ... | semmle.label | ... + ... | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected index c892fe902e7..e3faaba88be 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected @@ -1 +1,11 @@ -| Test.cs:15:25:15:80 | ... + ... | $@ flows to here and is inserted as XML. | Test.cs:8:27:8:49 | access to property QueryString | User-provided value | +edges +| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:8:27:8:65 | access to indexer : String | +| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:15:25:15:80 | ... + ... | +| Test.cs:8:27:8:65 | access to indexer : String | Test.cs:15:25:15:80 | ... + ... | +nodes +| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| Test.cs:8:27:8:65 | access to indexer : String | semmle.label | access to indexer : String | +| Test.cs:15:25:15:80 | ... + ... | semmle.label | ... + ... | +subpaths +#select +| Test.cs:15:25:15:80 | ... + ... | Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:15:25:15:80 | ... + ... | $@ flows to here and is inserted as XML. | Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | User-provided value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.expected index 9fdf938b2e1..97cbabb543d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.expected @@ -1,8 +1,12 @@ edges +| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:23:23:23:53 | access to indexer : String | | CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:29:64:29:67 | access to local variable code | | CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:40:36:40:39 | access to local variable code | +| CodeInjection.cs:23:23:23:53 | access to indexer : String | CodeInjection.cs:29:64:29:67 | access to local variable code | +| CodeInjection.cs:23:23:23:53 | access to indexer : String | CodeInjection.cs:40:36:40:39 | access to local variable code | nodes | CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| CodeInjection.cs:23:23:23:53 | access to indexer : String | semmle.label | access to indexer : String | | CodeInjection.cs:29:64:29:67 | access to local variable code | semmle.label | access to local variable code | | CodeInjection.cs:40:36:40:39 | access to local variable code | semmle.label | access to local variable code | | CodeInjection.cs:56:36:56:44 | access to property Text | semmle.label | access to property Text | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-099/ResourceInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-099/ResourceInjection.expected index bfc4fe2e2f6..8cd9b0955df 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-099/ResourceInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-099/ResourceInjection.expected @@ -1,8 +1,12 @@ edges +| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:8:27:8:61 | access to indexer : String | | ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:11:57:11:72 | access to local variable connectionString | | ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:13:42:13:57 | access to local variable connectionString | +| ResourceInjection.cs:8:27:8:61 | access to indexer : String | ResourceInjection.cs:11:57:11:72 | access to local variable connectionString | +| ResourceInjection.cs:8:27:8:61 | access to indexer : String | ResourceInjection.cs:13:42:13:57 | access to local variable connectionString | nodes | ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| ResourceInjection.cs:8:27:8:61 | access to indexer : String | semmle.label | access to indexer : String | | ResourceInjection.cs:11:57:11:72 | access to local variable connectionString | semmle.label | access to local variable connectionString | | ResourceInjection.cs:13:42:13:57 | access to local variable connectionString | semmle.label | access to local variable connectionString | subpaths diff --git a/csharp/ql/test/query-tests/Security Features/CWE-112/MissingXMLValidation.expected b/csharp/ql/test/query-tests/Security Features/CWE-112/MissingXMLValidation.expected index 2465cef9ba4..a8d1ebb8202 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-112/MissingXMLValidation.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-112/MissingXMLValidation.expected @@ -1,9 +1,15 @@ edges +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | | MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | | MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | | MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | | MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | | MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | | MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:16:26:16:58 | object creation of type StringReader | | MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:21:26:21:58 | object creation of type StringReader | | MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:27:26:27:58 | object creation of type StringReader | @@ -11,6 +17,7 @@ edges | MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:45:26:45:58 | object creation of type StringReader | nodes | MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | semmle.label | access to indexer : String | | MissingXMLValidation.cs:16:26:16:58 | object creation of type StringReader | semmle.label | object creation of type StringReader | | MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | semmle.label | access to local variable userProvidedXml : String | | MissingXMLValidation.cs:21:26:21:58 | object creation of type StringReader | semmle.label | object creation of type StringReader | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected index be4965b2f6d..3fbeefe8100 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected @@ -1,8 +1,12 @@ edges +| LogForging.cs:17:27:17:49 | access to property QueryString : NameValueCollection | LogForging.cs:17:27:17:61 | access to indexer : String | | LogForging.cs:17:27:17:49 | access to property QueryString : NameValueCollection | LogForging.cs:20:21:20:43 | ... + ... | | LogForging.cs:17:27:17:49 | access to property QueryString : NameValueCollection | LogForging.cs:26:50:26:72 | ... + ... | +| LogForging.cs:17:27:17:61 | access to indexer : String | LogForging.cs:20:21:20:43 | ... + ... | +| LogForging.cs:17:27:17:61 | access to indexer : String | LogForging.cs:26:50:26:72 | ... + ... | nodes | LogForging.cs:17:27:17:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| LogForging.cs:17:27:17:61 | access to indexer : String | semmle.label | access to indexer : String | | LogForging.cs:20:21:20:43 | ... + ... | semmle.label | ... + ... | | LogForging.cs:26:50:26:72 | ... + ... | semmle.label | ... + ... | subpaths diff --git a/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.expected b/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.expected index 703063363d6..2aa7b13890b 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.expected @@ -1,16 +1,23 @@ edges | ConsoleUncontrolledFormatString.cs:8:22:8:39 | call to method ReadLine : String | ConsoleUncontrolledFormatString.cs:11:31:11:36 | access to local variable format | +| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | | UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:12:23:12:26 | access to local variable path | | UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:15:46:15:49 | access to local variable path | +| UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | UncontrolledFormatString.cs:12:23:12:26 | access to local variable path | +| UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | UncontrolledFormatString.cs:15:46:15:49 | access to local variable path | +| UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | UncontrolledFormatStringBad.cs:9:25:9:61 | access to indexer : String | | UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format | +| UncontrolledFormatStringBad.cs:9:25:9:61 | access to indexer : String | UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format | nodes | ConsoleUncontrolledFormatString.cs:8:22:8:39 | call to method ReadLine : String | semmle.label | call to method ReadLine : String | | ConsoleUncontrolledFormatString.cs:11:31:11:36 | access to local variable format | semmle.label | access to local variable format | | UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | semmle.label | access to indexer : String | | UncontrolledFormatString.cs:12:23:12:26 | access to local variable path | semmle.label | access to local variable path | | UncontrolledFormatString.cs:15:46:15:49 | access to local variable path | semmle.label | access to local variable path | | UncontrolledFormatString.cs:32:23:32:31 | access to property Text | semmle.label | access to property Text | | UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| UncontrolledFormatStringBad.cs:9:25:9:61 | access to indexer : String | semmle.label | access to indexer : String | | UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format | semmle.label | access to local variable format | subpaths #select diff --git a/csharp/ql/test/query-tests/Security Features/CWE-209/ExceptionInformationExposure.expected b/csharp/ql/test/query-tests/Security Features/CWE-209/ExceptionInformationExposure.expected index d2ef58dd347..3ad51c3a585 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-209/ExceptionInformationExposure.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-209/ExceptionInformationExposure.expected @@ -1,21 +1,30 @@ edges -| ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:21:32:21:33 | access to local variable ex | +| ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | +| ExceptionInformationExposure.cs:23:32:23:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:23:32:23:44 | access to property StackTrace | +| ExceptionInformationExposure.cs:39:28:39:44 | access to property InnerException : Exception | ExceptionInformationExposure.cs:39:28:39:55 | access to property StackTrace | +| ExceptionInformationExposure.cs:40:28:40:29 | access to local variable ex : Exception | ExceptionInformationExposure.cs:40:28:40:40 | access to property StackTrace | +| ExceptionInformationExposure.cs:41:28:41:29 | access to local variable ex : Exception | ExceptionInformationExposure.cs:41:28:41:40 | call to method ToString | +| ExceptionInformationExposure.cs:47:28:47:44 | object creation of type MyException : MyException | ExceptionInformationExposure.cs:47:28:47:55 | call to method ToString | nodes | ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex : Exception | semmle.label | access to local variable ex : Exception | | ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | semmle.label | call to method ToString | | ExceptionInformationExposure.cs:21:32:21:33 | access to local variable ex | semmle.label | access to local variable ex | +| ExceptionInformationExposure.cs:23:32:23:33 | access to local variable ex : Exception | semmle.label | access to local variable ex : Exception | | ExceptionInformationExposure.cs:23:32:23:44 | access to property StackTrace | semmle.label | access to property StackTrace | +| ExceptionInformationExposure.cs:39:28:39:44 | access to property InnerException : Exception | semmle.label | access to property InnerException : Exception | | ExceptionInformationExposure.cs:39:28:39:55 | access to property StackTrace | semmle.label | access to property StackTrace | +| ExceptionInformationExposure.cs:40:28:40:29 | access to local variable ex : Exception | semmle.label | access to local variable ex : Exception | | ExceptionInformationExposure.cs:40:28:40:40 | access to property StackTrace | semmle.label | access to property StackTrace | +| ExceptionInformationExposure.cs:41:28:41:29 | access to local variable ex : Exception | semmle.label | access to local variable ex : Exception | | ExceptionInformationExposure.cs:41:28:41:40 | call to method ToString | semmle.label | call to method ToString | +| ExceptionInformationExposure.cs:47:28:47:44 | object creation of type MyException : MyException | semmle.label | object creation of type MyException : MyException | | ExceptionInformationExposure.cs:47:28:47:55 | call to method ToString | semmle.label | call to method ToString | subpaths #select -| ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | call to method ToString | -| ExceptionInformationExposure.cs:21:32:21:33 | access to local variable ex | ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:21:32:21:33 | access to local variable ex | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex | access to local variable ex : Exception | +| ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex | access to local variable ex : Exception | | ExceptionInformationExposure.cs:21:32:21:33 | access to local variable ex | ExceptionInformationExposure.cs:21:32:21:33 | access to local variable ex | ExceptionInformationExposure.cs:21:32:21:33 | access to local variable ex | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:21:32:21:33 | access to local variable ex | access to local variable ex | -| ExceptionInformationExposure.cs:23:32:23:44 | access to property StackTrace | ExceptionInformationExposure.cs:23:32:23:44 | access to property StackTrace | ExceptionInformationExposure.cs:23:32:23:44 | access to property StackTrace | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:23:32:23:44 | access to property StackTrace | access to property StackTrace | -| ExceptionInformationExposure.cs:39:28:39:55 | access to property StackTrace | ExceptionInformationExposure.cs:39:28:39:55 | access to property StackTrace | ExceptionInformationExposure.cs:39:28:39:55 | access to property StackTrace | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:39:28:39:55 | access to property StackTrace | access to property StackTrace | -| ExceptionInformationExposure.cs:40:28:40:40 | access to property StackTrace | ExceptionInformationExposure.cs:40:28:40:40 | access to property StackTrace | ExceptionInformationExposure.cs:40:28:40:40 | access to property StackTrace | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:40:28:40:40 | access to property StackTrace | access to property StackTrace | -| ExceptionInformationExposure.cs:41:28:41:40 | call to method ToString | ExceptionInformationExposure.cs:41:28:41:40 | call to method ToString | ExceptionInformationExposure.cs:41:28:41:40 | call to method ToString | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:41:28:41:40 | call to method ToString | call to method ToString | -| ExceptionInformationExposure.cs:47:28:47:55 | call to method ToString | ExceptionInformationExposure.cs:47:28:47:55 | call to method ToString | ExceptionInformationExposure.cs:47:28:47:55 | call to method ToString | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:47:28:47:55 | call to method ToString | call to method ToString | +| ExceptionInformationExposure.cs:23:32:23:44 | access to property StackTrace | ExceptionInformationExposure.cs:23:32:23:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:23:32:23:44 | access to property StackTrace | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:23:32:23:33 | access to local variable ex | access to local variable ex : Exception | +| ExceptionInformationExposure.cs:39:28:39:55 | access to property StackTrace | ExceptionInformationExposure.cs:39:28:39:44 | access to property InnerException : Exception | ExceptionInformationExposure.cs:39:28:39:55 | access to property StackTrace | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:39:28:39:44 | access to property InnerException | access to property InnerException : Exception | +| ExceptionInformationExposure.cs:40:28:40:40 | access to property StackTrace | ExceptionInformationExposure.cs:40:28:40:29 | access to local variable ex : Exception | ExceptionInformationExposure.cs:40:28:40:40 | access to property StackTrace | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:40:28:40:29 | access to local variable ex | access to local variable ex : Exception | +| ExceptionInformationExposure.cs:41:28:41:40 | call to method ToString | ExceptionInformationExposure.cs:41:28:41:29 | access to local variable ex : Exception | ExceptionInformationExposure.cs:41:28:41:40 | call to method ToString | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:41:28:41:29 | access to local variable ex | access to local variable ex : Exception | +| ExceptionInformationExposure.cs:47:28:47:55 | call to method ToString | ExceptionInformationExposure.cs:47:28:47:44 | object creation of type MyException : MyException | ExceptionInformationExposure.cs:47:28:47:55 | call to method ToString | Exception information from $@ flows to here, and is exposed to the user. | ExceptionInformationExposure.cs:47:28:47:44 | object creation of type MyException | object creation of type MyException : MyException | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected index a829177db0a..3e99fa0ceb3 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected @@ -1,6 +1,8 @@ edges | UrlRedirect.cs:12:31:12:53 | access to property QueryString : NameValueCollection | UrlRedirect.cs:12:31:12:61 | access to indexer | +| UrlRedirect.cs:22:22:22:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:22:22:22:52 | access to indexer : String | | UrlRedirect.cs:22:22:22:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:47:29:47:31 | access to local variable url | +| UrlRedirect.cs:22:22:22:52 | access to indexer : String | UrlRedirect.cs:47:29:47:31 | access to local variable url | | UrlRedirect.cs:37:44:37:66 | access to property QueryString : NameValueCollection | UrlRedirect.cs:37:44:37:74 | access to indexer | | UrlRedirect.cs:38:47:38:69 | access to property QueryString : NameValueCollection | UrlRedirect.cs:38:47:38:77 | access to indexer | | UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:16:22:16:26 | access to parameter value | @@ -18,6 +20,7 @@ nodes | UrlRedirect.cs:12:31:12:53 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | UrlRedirect.cs:12:31:12:61 | access to indexer | semmle.label | access to indexer | | UrlRedirect.cs:22:22:22:44 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| UrlRedirect.cs:22:22:22:52 | access to indexer : String | semmle.label | access to indexer : String | | UrlRedirect.cs:37:44:37:66 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | UrlRedirect.cs:37:44:37:74 | access to indexer | semmle.label | access to indexer | | UrlRedirect.cs:38:47:38:69 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected index ff2a8485d99..c5fbc6b2a66 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected @@ -1,4 +1,5 @@ edges +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:10:27:10:61 | access to indexer : String | | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:16:33:16:33 | access to local variable s | | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:19:29:19:29 | access to local variable s | | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:28:20:28:20 | access to local variable s | @@ -6,6 +7,14 @@ edges | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:40:21:40:21 | access to local variable s | | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:46:22:46:22 | access to local variable s | | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:52:21:52:21 | access to local variable s | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:16:33:16:33 | access to local variable s | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:19:29:19:29 | access to local variable s | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:28:20:28:20 | access to local variable s | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:34:30:34:30 | access to local variable s | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:40:21:40:21 | access to local variable s | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:46:22:46:22 | access to local variable s | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:52:21:52:21 | access to local variable s | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:11:27:11:61 | access to indexer : String | | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:16:33:16:33 | access to local variable s | | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:19:29:19:29 | access to local variable s | | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:28:20:28:20 | access to local variable s | @@ -13,9 +22,18 @@ edges | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:40:21:40:21 | access to local variable s | | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:46:22:46:22 | access to local variable s | | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:52:21:52:21 | access to local variable s | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:16:33:16:33 | access to local variable s | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:19:29:19:29 | access to local variable s | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:28:20:28:20 | access to local variable s | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:34:30:34:30 | access to local variable s | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:40:21:40:21 | access to local variable s | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:46:22:46:22 | access to local variable s | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:52:21:52:21 | access to local variable s | nodes | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | semmle.label | access to indexer : String | | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | semmle.label | access to indexer : String | | XPathInjection.cs:16:33:16:33 | access to local variable s | semmle.label | access to local variable s | | XPathInjection.cs:19:29:19:29 | access to local variable s | semmle.label | access to local variable s | | XPathInjection.cs:28:20:28:20 | access to local variable s | semmle.label | access to local variable s | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/ReDoS.expected b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/ReDoS.expected index e2c79ba302a..19549b0dcb3 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/ReDoS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/ReDoS.expected @@ -1,11 +1,18 @@ edges +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:11:28:11:63 | access to indexer : String | | ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:15:40:15:48 | access to local variable userInput | | ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:16:42:16:50 | access to local variable userInput | | ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:19:139:19:147 | access to local variable userInput | | ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:22:43:22:51 | access to local variable userInput | | ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:24:21:24:29 | access to local variable userInput | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:15:40:15:48 | access to local variable userInput | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:16:42:16:50 | access to local variable userInput | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:19:139:19:147 | access to local variable userInput | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:22:43:22:51 | access to local variable userInput | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:24:21:24:29 | access to local variable userInput | nodes | ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | semmle.label | access to indexer : String | | ExponentialRegex.cs:15:40:15:48 | access to local variable userInput | semmle.label | access to local variable userInput | | ExponentialRegex.cs:16:42:16:50 | access to local variable userInput | semmle.label | access to local variable userInput | | ExponentialRegex.cs:19:139:19:147 | access to local variable userInput | semmle.label | access to local variable userInput | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/ReDoS.expected b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/ReDoS.expected index 7c8fe73f7f7..100f4fc61cc 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/ReDoS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/ReDoS.expected @@ -1,7 +1,10 @@ edges +| ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:13:28:13:63 | access to indexer : String | | ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:16:40:16:48 | access to local variable userInput | +| ExponentialRegex.cs:13:28:13:63 | access to indexer : String | ExponentialRegex.cs:16:40:16:48 | access to local variable userInput | nodes | ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| ExponentialRegex.cs:13:28:13:63 | access to indexer : String | semmle.label | access to indexer : String | | ExponentialRegex.cs:16:40:16:48 | access to local variable userInput | semmle.label | access to local variable userInput | subpaths #select diff --git a/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/RegexInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/RegexInjection.expected index e11bf9ba17a..c9c2f544940 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/RegexInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/RegexInjection.expected @@ -1,7 +1,10 @@ edges +| RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | RegexInjection.cs:10:24:10:55 | access to indexer : String | | RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | RegexInjection.cs:14:19:14:23 | access to local variable regex | +| RegexInjection.cs:10:24:10:55 | access to indexer : String | RegexInjection.cs:14:19:14:23 | access to local variable regex | nodes | RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| RegexInjection.cs:10:24:10:55 | access to indexer : String | semmle.label | access to indexer : String | | RegexInjection.cs:14:19:14:23 | access to local variable regex | semmle.label | access to local variable regex | subpaths #select diff --git a/csharp/ql/test/query-tests/Security Features/CWE-807/ConditionalBypass.expected b/csharp/ql/test/query-tests/Security Features/CWE-807/ConditionalBypass.expected index 7d1d6c24a33..5e5b963f9f6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-807/ConditionalBypass.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-807/ConditionalBypass.expected @@ -1,5 +1,7 @@ edges +| ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | ConditionalBypass.cs:12:26:12:59 | access to indexer : String | | ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | ConditionalBypass.cs:16:13:16:30 | ... == ... | +| ConditionalBypass.cs:12:26:12:59 | access to indexer : String | ConditionalBypass.cs:16:13:16:30 | ... == ... | | ConditionalBypass.cs:19:34:19:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:22:13:22:23 | access to local variable adminCookie : HttpCookie | | ConditionalBypass.cs:19:34:19:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:27:13:27:23 | access to local variable adminCookie : HttpCookie | | ConditionalBypass.cs:22:13:22:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:22:13:22:29 | access to property Value : String | @@ -19,6 +21,7 @@ edges | ConditionalBypass.cs:84:13:84:29 | access to property Value : String | ConditionalBypass.cs:84:13:84:40 | ... == ... | nodes | ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| ConditionalBypass.cs:12:26:12:59 | access to indexer : String | semmle.label | access to indexer : String | | ConditionalBypass.cs:16:13:16:30 | ... == ... | semmle.label | ... == ... | | ConditionalBypass.cs:19:34:19:52 | access to property Cookies : HttpCookieCollection | semmle.label | access to property Cookies : HttpCookieCollection | | ConditionalBypass.cs:22:13:22:23 | access to local variable adminCookie : HttpCookie | semmle.label | access to local variable adminCookie : HttpCookie | diff --git a/csharp/ql/test/resources/stubs/EntityFramework.cs b/csharp/ql/test/resources/stubs/EntityFramework.cs index 85903ed8799..4612349a923 100644 --- a/csharp/ql/test/resources/stubs/EntityFramework.cs +++ b/csharp/ql/test/resources/stubs/EntityFramework.cs @@ -88,10 +88,16 @@ namespace Microsoft.EntityFrameworkCore } } - public static class RelationalDatabaseFacaseExtensions + public static class RelationalDatabaseFacadeExtensions { public static void ExecuteSqlCommand(this Infrastructure.DatabaseFacade db, string sql, params object[] parameters) { } public static Task ExecuteSqlCommandAsync(this Infrastructure.DatabaseFacade db, string sql, params object[] parameters) => throw null; + + public static int ExecuteSqlRaw(this Infrastructure.DatabaseFacade db, string sql, IEnumerable args) => throw null; + public static int ExecuteSqlRaw(this Infrastructure.DatabaseFacade db, string sql, params object[] args) => throw null; + public static Task ExecuteSqlRawAsync(this Infrastructure.DatabaseFacade db, string sql, System.Threading.CancellationToken token) => throw null; + public static Task ExecuteSqlRawAsync(this Infrastructure.DatabaseFacade db, string sql, params object[] args) => throw null; + public static Task ExecuteSqlRawAsync(this Infrastructure.DatabaseFacade db, string sql, IEnumerable args, System.Threading.CancellationToken token) => throw null; } struct RawSqlString @@ -100,6 +106,11 @@ namespace Microsoft.EntityFrameworkCore public static implicit operator Microsoft.EntityFrameworkCore.RawSqlString(FormattableString fs) => throw null; public static implicit operator Microsoft.EntityFrameworkCore.RawSqlString(string s) => throw null; } + + public static class RelationalQueryableExtensions + { + public static void FromSqlRaw(this DbSet set, string sql, params object[] args) => throw null; + } } namespace Microsoft.EntityFrameworkCore.Storage diff --git a/csharp/ql/test/utils/model-generator/CaptureSummaryModels.expected b/csharp/ql/test/utils/model-generator/CaptureSummaryModels.expected index 60611470e95..2d8e53ab14e 100644 --- a/csharp/ql/test/utils/model-generator/CaptureSummaryModels.expected +++ b/csharp/ql/test/utils/model-generator/CaptureSummaryModels.expected @@ -1,5 +1,5 @@ -| NoSummaries;PublicClassFlow;false;PublicReturn;(System.Int32);;Argument[0];ReturnValue;generated:taint | -| Summaries;BaseClassFlow;true;ReturnParam;(System.Int32);;Argument[0];ReturnValue;generated:taint | +| NoSummaries;PublicClassFlow;false;PublicReturn;(System.Object);;Argument[0];ReturnValue;generated:taint | +| Summaries;BaseClassFlow;true;ReturnParam;(System.Object);;Argument[0];ReturnValue;generated:taint | | Summaries;BasicFlow;false;ReturnField;();;Argument[Qualifier];ReturnValue;generated:taint | | Summaries;BasicFlow;false;ReturnParam0;(System.String,System.Object);;Argument[0];ReturnValue;generated:taint | | Summaries;BasicFlow;false;ReturnParam1;(System.String,System.Object);;Argument[1];ReturnValue;generated:taint | @@ -11,14 +11,14 @@ | Summaries;CollectionFlow;false;AddFieldToList;(System.Collections.Generic.List);;Argument[Qualifier];Argument[0].Element;generated:taint | | Summaries;CollectionFlow;false;AddToList;(System.Collections.Generic.List,System.Object);;Argument[1];Argument[0].Element;generated:taint | | Summaries;CollectionFlow;false;AssignFieldToArray;(System.Object[]);;Argument[Qualifier];Argument[0].Element;generated:taint | -| Summaries;CollectionFlow;false;AssignToArray;(System.Int32,System.Int32[]);;Argument[0];Argument[1].Element;generated:taint | -| Summaries;CollectionFlow;false;ReturnArrayElement;(System.Int32[]);;Argument[0].Element;ReturnValue;generated:taint | +| Summaries;CollectionFlow;false;AssignToArray;(System.Object,System.Object[]);;Argument[0];Argument[1].Element;generated:taint | +| Summaries;CollectionFlow;false;ReturnArrayElement;(System.Object[]);;Argument[0].Element;ReturnValue;generated:taint | | Summaries;CollectionFlow;false;ReturnFieldInAList;();;Argument[Qualifier];ReturnValue;generated:taint | | Summaries;CollectionFlow;false;ReturnListElement;(System.Collections.Generic.List);;Argument[0].Element;ReturnValue;generated:taint | -| Summaries;DerivedClass1Flow;false;ReturnParam1;(System.Int32,System.Int32);;Argument[1];ReturnValue;generated:taint | -| Summaries;DerivedClass2Flow;false;ReturnParam0;(System.Int32,System.Int32);;Argument[0];ReturnValue;generated:taint | -| Summaries;DerivedClass2Flow;false;ReturnParam;(System.Int32);;Argument[0];ReturnValue;generated:taint | -| Summaries;EqualsGetHashCodeNoFlow;false;Equals;(System.Int32);;Argument[0];ReturnValue;generated:taint | +| Summaries;DerivedClass1Flow;false;ReturnParam1;(System.String,System.String);;Argument[1];ReturnValue;generated:taint | +| Summaries;DerivedClass2Flow;false;ReturnParam0;(System.String,System.Int32);;Argument[0];ReturnValue;generated:taint | +| Summaries;DerivedClass2Flow;false;ReturnParam;(System.Object);;Argument[0];ReturnValue;generated:taint | +| Summaries;EqualsGetHashCodeNoFlow;false;Equals;(System.String);;Argument[0];ReturnValue;generated:taint | | Summaries;GenericFlow<>;false;AddFieldToGenericList;(System.Collections.Generic.List);;Argument[Qualifier];Argument[0].Element;generated:taint | | Summaries;GenericFlow<>;false;AddToGenericList<>;(System.Collections.Generic.List,S);;Argument[1];Argument[0].Element;generated:taint | | Summaries;GenericFlow<>;false;ReturnFieldInGenericList;();;Argument[Qualifier];ReturnValue;generated:taint | diff --git a/csharp/ql/test/utils/model-generator/NoSummaries.cs b/csharp/ql/test/utils/model-generator/NoSummaries.cs index 3686d4f12b6..75add7f3413 100644 --- a/csharp/ql/test/utils/model-generator/NoSummaries.cs +++ b/csharp/ql/test/utils/model-generator/NoSummaries.cs @@ -6,7 +6,7 @@ namespace NoSummaries; // Just to prove that, if a method like this is correctly exposed, a flow summary will be captured. public class PublicClassFlow { - public int PublicReturn(int input) + public object PublicReturn(object input) { return input; } @@ -14,19 +14,19 @@ public class PublicClassFlow public sealed class PublicClassNoFlow { - private int PrivateReturn(int input) + private object PrivateReturn(object input) { return input; } - internal int InternalReturn(int input) + internal object InternalReturn(object input) { return input; } private class PrivateClassNoFlow { - public int ReturnParam(int input) + public object ReturnParam(object input) { return input; } @@ -36,7 +36,7 @@ public sealed class PublicClassNoFlow { public class NestedPublicClassFlow { - public int ReturnParam(int input) + public object ReturnParam(object input) { return input; } @@ -44,10 +44,10 @@ public sealed class PublicClassNoFlow } } -public class EquatableBound : IEquatable +public class EquatableBound : IEquatable { public readonly bool tainted; - public bool Equals(int other) + public bool Equals(object other) { return tainted; } @@ -60,4 +60,42 @@ public class EquatableUnBound : IEquatable { return tainted; } +} + +// No methods in this class will have generated flow summaries as +// simple types are used. +public class SimpleTypes +{ + public bool M1(bool b) + { + return b; + } + + public Boolean M2(Boolean b) + { + return b; + } + + public int M3(int i) + { + return i; + } + + public Int32 M4(Int32 i) + { + return i; + } +} + +public class HigherOrderParameters +{ + public string M1(string s, Func map) + { + return s; + } + + public object M2(Func map, object o) + { + return map(o); + } } \ No newline at end of file diff --git a/csharp/ql/test/utils/model-generator/Summaries.cs b/csharp/ql/test/utils/model-generator/Summaries.cs index ce210eb873d..c00d2181042 100644 --- a/csharp/ql/test/utils/model-generator/Summaries.cs +++ b/csharp/ql/test/utils/model-generator/Summaries.cs @@ -48,12 +48,12 @@ public class CollectionFlow { private string tainted; - public int ReturnArrayElement(int[] input) + public object ReturnArrayElement(object[] input) { return input[0]; } - public void AssignToArray(int data, int[] target) + public void AssignToArray(object data, object[] target) { target[0] = data; } @@ -146,7 +146,7 @@ public class GenericFlow public abstract class BaseClassFlow { - public virtual int ReturnParam(int input) + public virtual object ReturnParam(object input) { return input; } @@ -154,7 +154,7 @@ public abstract class BaseClassFlow public class DerivedClass1Flow : BaseClassFlow { - public int ReturnParam1(int input0, int input1) + public string ReturnParam1(string input0, string input1) { return input1; } @@ -162,12 +162,12 @@ public class DerivedClass1Flow : BaseClassFlow public class DerivedClass2Flow : BaseClassFlow { - public override int ReturnParam(int input) + public override object ReturnParam(object input) { return input; } - public int ReturnParam0(int input0, int input1) + public string ReturnParam0(string input0, int input1) { return input0; } @@ -195,13 +195,13 @@ public class OperatorFlow } // No flow summary as this is an implicit conversion operator. - public static implicit operator OperatorFlow(int i) + public static implicit operator OperatorFlow(string s) { - return new OperatorFlow(i); + return new OperatorFlow(s); } // No flow summary as this is an explicit conversion operator. - public static explicit operator OperatorFlow(byte b) + public static explicit operator OperatorFlow(string[] b) { return new OperatorFlow(b); } @@ -220,9 +220,9 @@ public class EqualsGetHashCodeNoFlow } // Flow summary as this is not an override of the object Equals method. - public int Equals(int i) + public string Equals(string s) { - return i; + return s; } // No flow summary as this is an override of the GetHashCode method. diff --git a/csharp/tools/tracing-config.lua b/csharp/tools/tracing-config.lua new file mode 100644 index 00000000000..b4ff0206b02 --- /dev/null +++ b/csharp/tools/tracing-config.lua @@ -0,0 +1,57 @@ +function RegisterExtractorPack(id) + local extractor = GetPlatformToolsDirectory() .. + 'Semmle.Extraction.CSharp.Driver' + if OperatingSystem == 'windows' then extractor = extractor .. '.exe' end + local windowsMatchers = { + CreatePatternMatcher({'^dotnet%.exe$'}, MatchCompilerName, extractor, { + prepend = {'--dotnetexec', '--cil'}, + order = ORDER_BEFORE + }), + CreatePatternMatcher({'^csc.*%.exe$'}, MatchCompilerName, extractor, { + prepend = {'--compiler', '"${compiler}"', '--cil'}, + order = ORDER_BEFORE + + }), + CreatePatternMatcher({'^fakes.*%.exe$', 'moles.*%.exe'}, + MatchCompilerName, nil, {trace = false}) + } + local posixMatchers = { + CreatePatternMatcher({'^mcs%.exe$', '^csc%.exe$'}, MatchCompilerName, + extractor, { + prepend = {'--compiler', '"${compiler}"', '--cil'}, + order = ORDER_BEFORE + + }), + CreatePatternMatcher({'^mono', '^dotnet$'}, MatchCompilerName, + extractor, { + prepend = {'--dotnetexec', '--cil'}, + order = ORDER_BEFORE + }), function(compilerName, compilerPath, compilerArguments, _languageId) + if MatchCompilerName('^msbuild$', compilerName, compilerPath, + compilerArguments) or + MatchCompilerName('^xbuild$', compilerName, compilerPath, + compilerArguments) then + return { + order = ORDER_REPLACE, + invocation = BuildExtractorInvocation(id, compilerPath, + compilerPath, + compilerArguments, + nil, { + '/p:UseSharedCompilation=false' + }) + + } + end + end + } + if OperatingSystem == 'windows' then + return windowsMatchers + else + return posixMatchers + end + +end + +-- Return a list of minimum supported versions of the configuration file format +-- return one entry per supported major version. +function GetCompatibleVersions() return {'1.0.0'} end diff --git a/docs/codeql/codeql-cli/about-ql-packs.rst b/docs/codeql/codeql-cli/about-ql-packs.rst index 11326387b67..6568cf0a3e6 100644 --- a/docs/codeql/codeql-cli/about-ql-packs.rst +++ b/docs/codeql/codeql-cli/about-ql-packs.rst @@ -6,11 +6,8 @@ About QL packs QL packs are used to organize the files used in CodeQL analysis. They contain queries, library files, query suites, and important metadata. -The `CodeQL repository `__ contains QL packs for -C/C++, C#, Java, JavaScript, Python, and Ruby. The `CodeQL for Go -`__ repository contains a QL pack for Go -analysis. You can also make custom QL packs to contain your own queries and -libraries. +The `CodeQL repository `__ contains standard QL packs for all supported languages. +You can also make custom QL packs to contain your own queries and libraries. QL pack structure ----------------- diff --git a/docs/codeql/codeql-cli/analyzing-databases-with-the-codeql-cli.rst b/docs/codeql/codeql-cli/analyzing-databases-with-the-codeql-cli.rst index 724d050e488..d3b04a32a0b 100644 --- a/docs/codeql/codeql-cli/analyzing-databases-with-the-codeql-cli.rst +++ b/docs/codeql/codeql-cli/analyzing-databases-with-the-codeql-cli.rst @@ -147,7 +147,7 @@ you could use the following command from the directory containing your database: The analysis generates a file in the v2.1.0 SARIF format that is supported by all versions of GitHub. This file can be uploaded to GitHub by executing ``codeql github upload-results`` or the code scanning API. -For more information, see `Analyzing a CodeQL database `__ +For more information, see `Analyzing a CodeQL database `__ or `Code scanning API `__ in the GitHub documentation. CodeQL query suites are ``.qls`` files that use directives to select queries to run diff --git a/docs/codeql/codeql-cli/getting-started-with-the-codeql-cli.rst b/docs/codeql/codeql-cli/getting-started-with-the-codeql-cli.rst index 0cf07d574da..f859f07cb7c 100644 --- a/docs/codeql/codeql-cli/getting-started-with-the-codeql-cli.rst +++ b/docs/codeql/codeql-cli/getting-started-with-the-codeql-cli.rst @@ -193,8 +193,7 @@ further options on the command line. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The `CodeQL repository `__ contains -the queries and libraries required for CodeQL analysis of C/C++, C#, Java, -JavaScript/TypeScript, Python, and Ruby. +the queries and libraries required for CodeQL analysis of all supported languages. Clone a copy of this repository into ``codeql-home``. By default, the root of the cloned repository will be called ``codeql``. @@ -203,17 +202,18 @@ CLI that you will extract in step 4. If you use git on the command line, you can clone and rename the repository in a single step by running ``git clone git@github.com:github/codeql.git codeql-repo`` in the ``codeql-home`` folder. -The CodeQL libraries and queries for Go analysis live in the `CodeQL for Go -repository `__. Clone a copy of this -repository into ``codeql-home``, and run ``codeql-go/scripts/install-deps.sh`` -to install its dependencies. +For Go analysis, run ``codeql-repo/go/scripts/install-deps.sh`` to install its dependencies. -The cloned repositories should have a sibling relationship. -For example, if the root of the cloned CodeQL repository is -``$HOME/codeql-home/codeql-repo``, then the root of the cloned CodeQL for Go -repository should be ``$HOME/codeql-home/codeql-go``. +.. pull-quote:: Note -Within these repositories, the queries and libraries are organized into QL + The CodeQL libraries and queries for Go analysis used to live in a + separate `CodeQL for Go repository `__. + These have been moved to the ``github/codeql`` repository. + It is no longer necessary to clone the ``github/codeql-go`` into a separate ``codeql-home/codeql-go`` folder. + + For more information, see the `Relocation announcement `__. + +Within this repository, the queries and libraries are organized into QL packs. Along with the queries themselves, QL packs contain important metadata that tells the CodeQL CLI how to process the query files. For more information, see ":doc:`About QL packs `." diff --git a/docs/codeql/codeql-for-visual-studio-code/exploring-the-structure-of-your-source-code.rst b/docs/codeql/codeql-for-visual-studio-code/exploring-the-structure-of-your-source-code.rst index f3338283ba7..b04316f6296 100644 --- a/docs/codeql/codeql-for-visual-studio-code/exploring-the-structure-of-your-source-code.rst +++ b/docs/codeql/codeql-for-visual-studio-code/exploring-the-structure-of-your-source-code.rst @@ -28,7 +28,7 @@ Viewing the abstract syntax tree of a source file .. pull-quote:: Note - If you don't have an appropriate ``printAST.ql`` query in your workspace, the **CodeQL: View AST** command won't work. To fix this, you can update your copy of the `CodeQL `__ repository (or `CodeQL for Go `__ repository) from ``main``. If you do this, you may need to upgrade your databases. Also, query caches may be discarded and your next query runs could be slower. + If you don't have an appropriate ``printAST.ql`` query in your workspace, the **CodeQL: View AST** command won't work. To fix this, you can update your copy of the `CodeQL `__ repository from ``main``. If you do this, you may need to upgrade your databases. Also, query caches may be discarded and your next query runs could be slower. 3. Once the query has run, the AST viewer displays the structure of the source file. 4. To see the nested structure, click the arrows and expand the nodes. 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 a43c69edecb..b632a86af4c 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 @@ -69,8 +69,7 @@ There are two ways to do this: This ensures that the queries and libraries you write in VS Code also work in the query console on LGTM Enterprise. If you prefer to add the CodeQL queries and libraries to an :ref:`existing workspace ` instead of the starter workspace, then you should - clone the appropriate branch of the `general CodeQL repository `__ and the - `CodeQL repository for Go `__ and add them to your workspace. + clone the appropriate branch of the `CodeQL repository `__ and add it to your workspace. .. _starter-workspace: @@ -78,8 +77,7 @@ Using the starter workspace ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The starter workspace is a Git repository. It contains: -* The `repository of CodeQL libraries and queries `__ for C/C++, C#, Java, JavaScript, Python, and Ruby. This is included as a submodule, so it can be updated without affecting your custom queries. -* The `repository of CodeQL libraries and queries `__ for Go. This is also included as a submodule. +* The `repository of CodeQL libraries and queries `__ all supported languages. This is included as a submodule, so it can be updated without affecting your custom queries. * A series of folders named ``codeql-custom-queries-``. These are ready for you to start developing your own custom queries for each language, using the standard libraries. There are some example queries to get you started. To use the starter workspace: @@ -114,10 +112,6 @@ For example, to make a custom CodeQL folder called ``my-custom-cpp-pack`` depend For more information about why you need to add a ``qlpack.yml`` file, see ":ref:`About QL packs `." -.. pull-quote:: Note - - The CodeQL libraries for Go are not included in the ``github/codeql`` repository, but are stored separately. To analyze Go projects, clone the repository at https://github.com/github/codeql-go and add it to your workspace as above. - Further reading ---------------- diff --git a/docs/codeql/codeql-language-guides/modeling-data-flow-in-go-libraries.rst b/docs/codeql/codeql-language-guides/modeling-data-flow-in-go-libraries.rst index 900f4a757c1..e8b1880b772 100644 --- a/docs/codeql/codeql-language-guides/modeling-data-flow-in-go-libraries.rst +++ b/docs/codeql/codeql-language-guides/modeling-data-flow-in-go-libraries.rst @@ -7,8 +7,8 @@ When analyzing a Go program, CodeQL does not examine the source code for external packages. To track the flow of untrusted data through a library, you can create a model of the library. -You can find existing models in the ``ql/lib/semmle/go/frameworks/`` folder of the -`CodeQL for Go repository `__. +You can find existing models in the ``go/ql/lib/semmle/go/frameworks/`` folder of the +`CodeQL repository `__. To add a new model, you should make a new file in that folder, named after the library. Sources @@ -102,8 +102,8 @@ Data-flow sinks are specified by queries rather than by library models. However, you can use library models to indicate when functions belong to special categories. Queries can then use these categories when specifying sinks. Classes representing these special categories are contained in -``ql/lib/semmle/go/Concepts.qll`` in the `CodeQL for Go repository -`__. +``go/ql/lib/semmle/go/Concepts.qll`` in the `CodeQL repository +`__. ``Concepts.qll`` includes classes for logger mechanisms, HTTP response writers, HTTP redirects, and marshaling and unmarshaling functions. diff --git a/docs/codeql/ql-language-reference/expressions.rst b/docs/codeql/ql-language-reference/expressions.rst index 1bf39dda6ba..eb1907b1a2c 100644 --- a/docs/codeql/ql-language-reference/expressions.rst +++ b/docs/codeql/ql-language-reference/expressions.rst @@ -227,8 +227,9 @@ The following aggregates are available in QL: - ``min`` and ``max``: These aggregates determine the smallest (``min``) or largest (``max``) value of ```` among the possible assignments to the aggregation variables. - In this case, ```` must be of numeric type or of type ``string``. - + ```` must be of numeric type or of type ``string``, or an explicit order must be defined with ``order by``. + When using ``order by``, more than one result may exist in case of ties. + For example, the following aggregation returns the name of the ``.js`` file (or files) with the largest number of lines, using the number of lines of code to break ties: @@ -297,9 +298,10 @@ The following aggregates are available in QL: .. index:: rank - ``rank``: This aggregate takes the possible values of ```` and ranks them. - In this case, ```` must be of numeric type or of type ``string``. The aggregation - returns the value that is ranked in the position specified by the **rank expression**. + ```` must be of numeric type or of type ``string``, or an explicit order must be defined with ``order by``. + The aggregation returns the value that is ranked in the position specified by the **rank expression**. You must include this rank expression in brackets after the keyword ``rank``. + When using ``order by``, more than one result may exist in case of ties. For example, the following aggregation returns the value that is ranked 4th out of all the possible values. In this case, ``8`` is the 4th integer in the range from ``5`` through diff --git a/docs/codeql/ql-language-reference/ql-language-specification.rst b/docs/codeql/ql-language-reference/ql-language-specification.rst index 2ba7887fec0..46d0123d6d4 100644 --- a/docs/codeql/ql-language-reference/ql-language-specification.rst +++ b/docs/codeql/ql-language-reference/ql-language-specification.rst @@ -364,7 +364,7 @@ A *variable declaration list* provides a sequence of variables and a type for ea :: var_decls ::= (var_decl ("," var_decl)*)? - var_decl ::= type simpleId + var_decl ::= type lowerId A valid variable declaration list must not include two declarations with the same variable name. Moreover, if the declaration has a typing environment that applies, it must not use a variable name that is already present in that typing environment. @@ -585,7 +585,7 @@ Identifiers are used in following syntactic constructs: dbasetype ::= atLowerId predicateRef ::= (moduleId "::")? literalId predicateName ::= lowerId - varname ::= simpleId + varname ::= lowerId literalId ::= lowerId | atLowerId Integer literals (int) @@ -948,7 +948,7 @@ The ``select`` keyword is followed by a number of *select expressions*. Select e :: as_exprs ::= as_expr ("," as_expr)* - as_expr ::= expr ("as" simpleId)? + as_expr ::= expr ("as" lowerId)? The keyword ``as`` gives a *label* to the select expression it is part of. No two select expressions may have the same label. No expression label may be the same as one of the variables of the select clause. @@ -957,7 +957,7 @@ The ``order`` keyword, if present, is followed by a number of *ordering directiv :: orderbys ::= orderby ("," orderby)* - orderby ::= simpleId ("asc" | "desc")? + orderby ::= lowerId ("asc" | "desc")? Each identifier in an ordering directive must identify exactly one of the select expressions. It must either be the label of the expression, or it must be a variable expression that is equivalent to exactly one of the select expressions. The type of the designated select expression must be a subtype of a primitive type. @@ -2042,11 +2042,11 @@ The complete grammar for QL is as follows: as_exprs ::= as_expr ("," as_expr)* - as_expr ::= expr ("as" simpleId)? + as_expr ::= expr ("as" lowerId)? orderbys ::= orderby ("," orderby)* - orderby ::= simpleId ("asc" | "desc")? + orderby ::= lowerId ("asc" | "desc")? predicate ::= qldoc? annotations head optbody @@ -2095,7 +2095,7 @@ The complete grammar for QL is as follows: var_decls ::= (var_decl ("," var_decl)*)? - var_decl ::= type simpleId + var_decl ::= type lowerId formula ::= fparen | disjunction @@ -2216,6 +2216,6 @@ The complete grammar for QL is as follows: predicateName ::= lowerId - varname ::= simpleId + varname ::= lowerId literalId ::= lowerId | atLowerId | "any" | "none" diff --git a/docs/codeql/ql-language-reference/variables.rst b/docs/codeql/ql-language-reference/variables.rst index 2b84e125971..5179183ef78 100644 --- a/docs/codeql/ql-language-reference/variables.rst +++ b/docs/codeql/ql-language-reference/variables.rst @@ -24,7 +24,7 @@ Declaring a variable All variable declarations consist of a :ref:`type ` and a name for the variable. The name can be any `identifier `_ -that starts with an uppercase or lowercase letter. +that starts with a lowercase letter. For example, ``int i``, ``SsaDefinitionNode node``, and ``LocalScopeVariable lsv`` declare variables ``i``, ``node``, and ``lsv`` with types ``int``, ``SsaDefinitionNode``, and diff --git a/docs/codeql/query-help/go.rst b/docs/codeql/query-help/go.rst index e81d759f807..9e3050f74d0 100644 --- a/docs/codeql/query-help/go.rst +++ b/docs/codeql/query-help/go.rst @@ -3,6 +3,6 @@ CodeQL query help for Go .. include:: ../reusables/query-help-overview.rst -For shorter queries that you can use as building blocks when writing your own queries, see the `example queries in the CodeQL for Go repository `__. +For shorter queries that you can use as building blocks when writing your own queries, see the `example queries in the CodeQL repository `__. .. include:: toc-go.rst diff --git a/docs/codeql/reusables/go-further-reading.rst b/docs/codeql/reusables/go-further-reading.rst index 275d3c85c3e..cf8ee287b7c 100644 --- a/docs/codeql/reusables/go-further-reading.rst +++ b/docs/codeql/reusables/go-further-reading.rst @@ -1,3 +1,3 @@ -- `CodeQL queries for Go `__ -- `Example queries for Go `__ +- `CodeQL queries for Go `__ +- `Example queries for Go `__ - `CodeQL library reference for Go `__ diff --git a/docs/codeql/support/reusables/frameworks.rst b/docs/codeql/support/reusables/frameworks.rst index 93280c6732a..12bcd5af8e6 100644 --- a/docs/codeql/support/reusables/frameworks.rst +++ b/docs/codeql/support/reusables/frameworks.rst @@ -214,3 +214,4 @@ Python built-in support libtaxii, TAXII utility library libxml2, XML processing library lxml, XML processing library + xmltodict, XML processing library diff --git a/docs/codeql/support/reusables/versions-compilers.rst b/docs/codeql/support/reusables/versions-compilers.rst index adb82e4628a..a5f68cb64e1 100644 --- a/docs/codeql/support/reusables/versions-compilers.rst +++ b/docs/codeql/support/reusables/versions-compilers.rst @@ -16,8 +16,8 @@ .NET Core up to 3.1 .NET 5, .NET 6","``.sln``, ``.csproj``, ``.cs``, ``.cshtml``, ``.xaml``" - Go (aka Golang), "Go up to 1.17", "Go 1.11 or more recent", ``.go`` - Java,"Java 7 to 17 [4]_","javac (OpenJDK and Oracle JDK), + Go (aka Golang), "Go up to 1.18", "Go 1.11 or more recent", ``.go`` + Java,"Java 7 to 18 [4]_","javac (OpenJDK and Oracle JDK), Eclipse compiler for Java (ECJ) [5]_",``.java`` JavaScript,ECMAScript 2021 or lower,Not applicable,"``.js``, ``.jsx``, ``.mjs``, ``.es``, ``.es6``, ``.htm``, ``.html``, ``.xhtm``, ``.xhtml``, ``.vue``, ``.hbs``, ``.ejs``, ``.njk``, ``.json``, ``.yaml``, ``.yml``, ``.raml``, ``.xml`` [6]_" @@ -30,7 +30,7 @@ .. [1] C++20 support is currently in beta. Supported for GCC on Linux only. Modules are *not* supported. .. [2] Support for the clang-cl compiler is preliminary. .. [3] Support for the Arm Compiler (armcc) is preliminary. - .. [4] Builds that execute on Java 7 to 17 can be analyzed. The analysis understands Java 17 standard language features. + .. [4] Builds that execute on Java 7 to 18 can be analyzed. The analysis understands Java 18 standard language features. .. [5] ECJ is supported when the build invokes it via the Maven Compiler plugin or the Takari Lifecycle plugin. .. [6] JSX and Flow code, YAML, JSON, HTML, and XML files may also be analyzed with JavaScript files. .. [7] Requires glibc 2.17. diff --git a/docs/codeql/writing-codeql-queries/about-codeql-queries.rst b/docs/codeql/writing-codeql-queries/about-codeql-queries.rst index fc7da3b67bb..be5bca75622 100644 --- a/docs/codeql/writing-codeql-queries/about-codeql-queries.rst +++ b/docs/codeql/writing-codeql-queries/about-codeql-queries.rst @@ -121,7 +121,7 @@ Select clauses for diagnostic queries (``@kind diagnostic``) and summary metric Viewing the standard CodeQL queries *********************************** -One of the easiest ways to get started writing your own queries is to modify an existing query. To view the standard CodeQL queries, or to try out other examples, visit the `CodeQL `__ and `CodeQL for Go `__ repositories on GitHub. +One of the easiest ways to get started writing your own queries is to modify an existing query. To view the standard CodeQL queries, or to try out other examples, visit the `CodeQL `__ repository on GitHub. You can also find examples of queries developed to find security vulnerabilities and bugs in open source software projects on the `GitHub Security Lab website `__ and in the associated `repository `__. diff --git a/docs/codeql/writing-codeql-queries/creating-path-queries.rst b/docs/codeql/writing-codeql-queries/creating-path-queries.rst index 4eec766d488..c41b67d427c 100644 --- a/docs/codeql/writing-codeql-queries/creating-path-queries.rst +++ b/docs/codeql/writing-codeql-queries/creating-path-queries.rst @@ -116,7 +116,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#, Java, JavaScript, Python, or Ruby code (and you have used ``import DataFlow::PathGraph`` in your query), the definitions of the ``source`` and ``sink`` are accessed via the ``Configuration`` class in the data flow library. You should declare all three of these objects in the ``from`` statement. +If you are querying C/C++, C#, Go, Java, JavaScript, Python, or Ruby code (and you have used ``import DataFlow::PathGraph`` in your query), the definitions of the ``source`` and ``sink`` are accessed via the ``Configuration`` class in the data flow library. You should declare all three of these objects in the ``from`` statement. For example: .. code-block:: ql diff --git a/docs/ql-libraries/dataflow/dataflow.md b/docs/ql-libraries/dataflow/dataflow.md index 31a8e12a5cc..1b6d52ee994 100644 --- a/docs/ql-libraries/dataflow/dataflow.md +++ b/docs/ql-libraries/dataflow/dataflow.md @@ -125,7 +125,7 @@ For further details about `PostUpdateNode` see [Field flow](#field-flow) below. Nodes corresponding to expressions and parameters are the most common for users to interact with so a couple of convenience predicates are generally included: -``` +```ql DataFlowExpr Node::asExpr() Parameter Node::asParameter() ExprNode exprNode(DataFlowExpr n) @@ -266,10 +266,23 @@ as described above. ## Field flow The library supports tracking flow through field stores and reads. In order to -support this, a class `Content` and two predicates -`storeStep(Node node1, Content f, Node node2)` and -`readStep(Node node1, Content f, Node node2)` must be defined. It generally -makes sense for stores to target `PostUpdateNode`s, but this is not a strict +support this, two classes `ContentSet` and `Content`, and two predicates +`storeStep(Node node1, ContentSet f, Node node2)` and +`readStep(Node node1, ContentSet f, Node node2)`, must be defined. The interaction +between `ContentSet` and `Content` is defined through + +```ql +Content ContentSet::getAStoreContent(); +Content ContentSet::getAReadContent(); +``` + +which means that a `storeStep(n1, cs, n2)` will be interpreted as storing into _any_ +of `cs.getAStoreContent()`, and dually that a `readStep(n1, cs, n2)` will be +interpreted as reading from _any_ of `cs.getAReadContent()`. In most cases, there +will be a simple bijection between `ContentSet` and `Content`, but when modelling +for example flow through arrays it can be more involved (see [Example 4](#example-4)). + +It generally makes sense for stores to target `PostUpdateNode`s, but this is not a strict requirement. Besides this, certain nodes must have associated `PostUpdateNode`s. The node associated with a `PostUpdateNode` should be defined by `PostUpdateNode::getPreUpdateNode()`. @@ -294,7 +307,7 @@ through a couple of examples. ### Example 1 Consider the following setter and its call: -``` +```java setFoo(obj, x) { sink1(obj.foo); obj.foo = x; @@ -335,12 +348,12 @@ call sites. In the following two lines we would like flow from `x` to reach the `PostUpdateNode` of `a` through a sequence of two store steps, and this is indeed handled automatically by the shared library. -``` +```java a.b.c = x; a.getB().c = x; ``` The only requirement for this to work is the existence of `PostUpdateNode`s. -For a specified read step (in `readStep(Node n1, Content f, Node n2)`) the +For a specified read step (in `readStep(Node n1, ContentSet c, Node n2)`) the shared library will generate a store step in the reverse direction between the corresponding `PostUpdateNode`s. A similar store-through-reverse-read will be generated for calls that can be summarized by the shared library as getters. @@ -370,26 +383,123 @@ itself as this represents the value of the object after construction, that is after the constructor has run. With this setup of `ArgumentNode`s and `PostUpdateNode`s we will achieve the desired flow from `source` to `sink` +### Example 4 + +Assume we want to track flow through arrays precisely: + +```rb +a[0] = tainted +a[1] = not_tainted +sink(a[0]) # bad +sink(a[1]) # good +sink(a[unknown]) # bad; unknown may be 0 + +b[unknown] = tainted +sink(b[0]) # bad; unknown may be 0 + +c[unknown][0] = tainted +c[unknown][1] = not_tainted +sink(c[0][0]) # bad; unknown may be 0 +sink(c[0][1]) # good +``` + +This can be done by defining + +```ql +newtype TContent = + TKnownArrayElementContent(int i) { i in [0 .. 10] } or + TUnknownArrayElementContent() + +class Content extends TContent { + ... +} + +newtype TContentSet = + TSingletonContent(Content c) or + TAnyArrayElementContent() + +class ContentSet extends TContentSet { + Content getAStoreContent() { + this = TSingletonContent(result) + or + // for reverse stores + this = TAnyArrayElementContent() and + result = TUnknownArrayElementContent() + } + + Content getAReadContent() { + this = TSingletonContent(result) + or + this = TAnyArrayElementContent() and + (result = TUnknownArrayElementContent() or result = TKnownArrayElementContent(_)) + } +} +``` + +and we will have the following store/read steps +```rb +# storeStep(tainted, TSingletonContent(TKnownArrayElementContent(0)), [post update] a) +a[0] = tainted + +# storeStep(not_tainted, TSingletonContent(TKnownArrayElementContent(1)), [post update] a) +a[1] = not_tainted + +# readStep(a, TSingletonContent(TKnownArrayElementContent(0)), a[0]) +# readStep(a, TSingletonContent(TUnknownArrayElementContent()), a[0]) +sink(a[0]) # bad + +# readStep(a, TSingletonContent(TKnownArrayElementContent(1)), a[1]) +# readStep(a, TSingletonContent(TUnknownArrayElementContent()), a[1]) +sink(a[1]) # good + +# readStep(a, TAnyArrayElementContent(), a[unknown]) +sink(a[unknown]) # bad; unknown may be 0 + +# storeStep(tainted, TSingletonContent(TUnknownArrayElementContent()), [post update] b) +b[unknown] = tainted + +# readStep(b, TSingletonContent(TKnownArrayElementContent(0)), b[0]) +# readStep(b, TSingletonContent(TUnknownArrayElementContent()), b[0]) +sink(b[0]) # bad; unknown may be 0 + +# storeStep(tainted, TSingletonContent(TKnownArrayElementContent(0)), [post update] c[unknown]) +# storeStep(not_tainted, TSingletonContent(TKnownArrayElementContent(1)), [post update] c[unknown]) +# readStep(c, TAnyArrayElementContent(), c[unknown]) +# storeStep([post update] c[unknown], TAnyArrayElementContent(), [post update] c) # auto-generated reverse store (see Example 2) +c[unknown][0] = tainted +c[unknown][1] = not_tainted + + +# readStep(c[0], TSingletonContent(TKnownArrayElementContent(0)), c[0][0]) +# readStep(c[0], TSingletonContent(TUnknownArrayElementContent()), c[0][0]) +# readStep(c[0], TSingletonContent(TKnownArrayElementContent(1)), c[0][1]) +# readStep(c[0], TSingletonContent(TUnknownArrayElementContent()), c[0][1]) +# readStep(c, TSingletonContent(TKnownArrayElementContent(0)), c[0]) +# readStep(c, TSingletonContent(TUnknownArrayElementContent()), c[0]) +sink(c[0][0]) # bad; unknown may be 0 +sink(c[0][1]) # good +``` + ### Field flow barriers Consider this field flow example: -``` +```java obj.f = source; obj.f = safeValue; sink(obj.f); ``` or the similar case when field flow is used to model collection content: -``` +```java obj.add(source); obj.clear(); sink(obj.get(key)); ``` Clearing a field or content like this should act as a barrier, and this can be -achieved by marking the relevant `Node, Content` pair as a clear operation in +achieved by marking the relevant `Node, ContentSet` pair as a clear operation in the `clearsContent` predicate. A reasonable default implementation for fields looks like this: ```ql -predicate clearsContent(Node n, Content c) { +predicate clearsContent(Node n, ContentSet c) { n = any(PostUpdateNode pun | storeStep(_, c, pun)).getPreUpdateNode() } ``` @@ -397,6 +507,14 @@ However, this relies on the local step relation using the smallest possible use-use steps. If local flow is implemented using def-use steps, then `clearsContent` might not be easy to use. +Note that `clearsContent(n, cs)` is interpreted using `cs.getAReadContent()`. + +Dually, there exists a predicate +```ql +predicate expectsContent(Node n, ContentSet c); +``` +which acts as a barrier when data is _not_ stored inside one of `c.getAReadContent()`. + ## Type pruning The library supports pruning paths when a sequence of value-preserving steps @@ -415,13 +533,13 @@ as a single entity (this improves performance). As an example, Java uses erased types for this purpose and a single equivalence class for all numeric types. The type of a `Node` is given by the following predicate -``` +```ql DataFlowType getNodeType(Node n) ``` and every `Node` should have a type. One also needs to define the string representation of a `DataFlowType`: -``` +```ql string ppReprType(DataFlowType t) ``` The `ppReprType` predicate is used for printing a type in the labels of @@ -499,7 +617,7 @@ predicate nodeIsHidden(Node n) ### Unreachable nodes Consider: -``` +```java foo(source1, false); foo(source2, true); diff --git a/docs/supported-queries.md b/docs/supported-queries.md index 2d76906e82f..2393ade24f5 100644 --- a/docs/supported-queries.md +++ b/docs/supported-queries.md @@ -27,7 +27,7 @@ The process must begin with the first step and must conclude with the final step Add one or more unit tests for the query (and for any library changes you make) to the `ql//ql/test/experimental` directory. Tests for library changes go into the `library-tests` subdirectory, and tests for queries go into `query-tests` with their relative path mirroring the query's location under `ql//ql/src/experimental`. - - See the section on [Testing custom queries](https://help.semmle.com/codeql/codeql-cli/procedures/test-queries.html) in the [CodeQL documentation](https://codeql.github.com/docs/) for more information. + - See the section on [Testing custom queries](https://codeql.github.com/docs/codeql-cli/testing-custom-queries/) in the [CodeQL documentation](https://codeql.github.com/docs/) for more information. - See [C/C++ CodeQL tests](/cpp/ql/test/README.md) for more information about contributing tests for C/C++ queries in particular. 4. **Test for correctness on real-world code** diff --git a/go/CODE_OF_CONDUCT.md b/go/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000..5430dd75637 --- /dev/null +++ b/go/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies within all project spaces, and it also applies when +an individual is representing the project or its community in public spaces. +Examples of representing a project or community include using an official +project e-mail address, posting via an official social media account, or acting +as an appointed representative at an online or offline event. Representation of +a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at opensource@github.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct/ + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq/ diff --git a/go/CONTRIBUTING.md b/go/CONTRIBUTING.md new file mode 100644 index 00000000000..1b4868b9dba --- /dev/null +++ b/go/CONTRIBUTING.md @@ -0,0 +1,66 @@ +## Contributing + +Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. + +Contributions to this project are [released](https://docs.github.com/en/github/site-policy/github-terms-of-service#6-contributions-under-repository-license) to the public under the [project's open source license](LICENSE). + +Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms. + +## Building and testing + +1. Install the CodeQL CLI as described in [Getting started with the CodeQL CLI](https://codeql.github.com/docs/codeql-cli/getting-started-with-the-codeql-cli/). + +2. Ensure that `/codeql` is in your `PATH`. + +3. Clone this repository (`github/codeql`) into `/codeql-repo` and change to the directory `/codeql-repo/go`. + +4. To build, run `make`. + +5. To run the full test suite, run `make test`. This will take approximately one hour. + +6. To run all tests in a directory and its subdirectories, run `codeql test run `, for example `codeql test run ql/test/query-tests/Security`. + +7. To run an individual test, run `codeql test run `, where `` is a `.ql` or `.qlref` file, for example `codeql test run ql/test/query-tests/Security/CWE-020/MissingRegexpAnchor/MissingRegexpAnchor.qlref`. + +## Adding a new query + +If you have an idea for a query that you would like to share with other CodeQL users, please open a pull request to add it to this repository. +Follow the steps below to help other users understand what your query does, and to ensure that your query is consistent with the other CodeQL queries. + +1. **Consult the documentation for query writers** + + There is lots of useful documentation to help you write CodeQL queries, ranging from information about query file structure to language-specific tutorials. For more information on the documentation available, see [Writing QL queries](https://codeql.github.com/docs/writing-codeql-queries/) on [codeql.github.com/docs](https://codeql.github.com/docs/). + +2. **Format your code correctly** + + All of the standard CodeQL queries and libraries are uniformly formatted for clarity and consistency, so we strongly recommend that all contributions follow the same formatting guidelines. If you use the CodeQL extension for Visual Studio Code, you can auto-format your query using the [Format Document command](https://codeql.github.com/docs/codeql-for-visual-studio-code/about-codeql-for-visual-studio-code/). For more information, see the [QL style guide](https://github.com/github/codeql/blob/main/docs/ql-style-guide.md). + +3. **Make sure your query has the correct metadata** + + Query metadata is used to identify your query and make sure the query results are displayed properly. + The most important metadata to include are the `@name`, `@description`, and the `@kind`. + Other metadata properties (`@precision`, `@severity`, and `@tags`) are usually added after the query has been reviewed by the maintainers. + For more information on writing query metadata, see the [Query metadata style guide](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md). + +4. **Make sure the `select` statement is compatible with the query type** + + The `select` statement of your query must be compatible with the query type (determined by the `@kind` metadata property) for alert or path results to be displayed correctly in LGTM and Visual Studio Code. + For more information on `select` statement format, see [About CodeQL queries](https://codeql.github.com/docs/writing-codeql-queries/about-codeql-queries/#select-clause) on codeql.github.com. + +5. **Write a query help file** + + Query help files explain the purpose of your query to other users. Write your query help in a `.qhelp` file and save it in the same directory as your new query. + For more information on writing query help, see the [Query help style guide](https://github.com/github/codeql/blob/main/docs/query-help-style-guide.md). + +6. **Maintain backwards compatibility** + +The standard CodeQL libraries must evolve in a backwards compatible manner. If any backwards incompatible changes need to be made, the existing API must first be marked as deprecated. This is done by adding a `deprecated` annotation along with a QLDoc reference to the replacement API. Only after at least one full release cycle has elapsed may the old API be removed. + +In addition to contributions to our standard queries and libraries, we also welcome contributions of a more experimental nature, which do not need to fulfill all the requirements listed above. See the guidelines for [experimental queries and libraries](ql/docs/experimental.md) for details. + +## Resources + +- [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) +- [Using Pull Requests](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests) +- [GitHub Help](https://docs.github.com/en) +- [A Note About Git Commit Messages](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) diff --git a/go/LICENSE b/go/LICENSE new file mode 100644 index 00000000000..a8952d86b02 --- /dev/null +++ b/go/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-2020 GitHub + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/go/Makefile b/go/Makefile new file mode 100644 index 00000000000..b7da089c48a --- /dev/null +++ b/go/Makefile @@ -0,0 +1,142 @@ +all: extractor ql/lib/go.dbscheme install-deps + +ifeq ($(OS),Windows_NT) +EXE = .exe +CODEQL_PLATFORM = win64 +else +EXE = +UNAME_S := $(shell uname -s) +ifeq ($(UNAME_S),Linux) +CODEQL_PLATFORM = linux64 +endif +ifeq ($(UNAME_S),Darwin) +CODEQL_PLATFORM = osx64 +endif +endif + +CODEQL_TOOLS = $(addprefix codeql-tools/,autobuild.cmd autobuild.sh pre-finalize.cmd pre-finalize.sh index.cmd index.sh linux64 osx64 win64 tracing-config.lua) + +EXTRACTOR_PACK_OUT = build/codeql-extractor-go + +BINARIES = go-extractor go-tokenizer go-autobuilder go-build-runner go-bootstrap go-gen-dbscheme + +.PHONY: tools tools-codeql tools-codeql-full clean autoformat \ + tools-linux64 tools-osx64 tools-win64 check-formatting + +clean: + rm -rf tools/bin tools/linux64 tools/osx64 tools/win64 tools/net tools/opencsv + rm -rf $(EXTRACTOR_PACK_OUT) build/stats build/testdb + +DATAFLOW_BRANCH=main + +autoformat: + find ql -iregex '.*\.qll?' -print0 | xargs -0 codeql query format -qq -i + find . -path '**/vendor' -prune -or -type f -iname '*.go' ! -empty -print0 | xargs -0 grep -L "//\s*autoformat-ignore" | xargs gofmt -w + +check-formatting: + find ql -iregex '.*\.qll?' -print0 | xargs -0 codeql query format --check-only + test -z "$$(find . -path '**/vendor' -prune -or -type f -iname '*.go' ! -empty -print0 | xargs -0 grep -L "//\s*autoformat-ignore" | xargs gofmt -l)" + +install-deps: + bash scripts/install-deps.sh $(CODEQL_LOCK_MODE) + +ifeq ($(QHELP_OUT_DIR),) +# If not otherwise specified, compile qhelp to markdown in place +QHELP_OUT_DIR := ql/src +endif + +qhelp-to-markdown: + scripts/qhelp-to-markdown.sh ql/src "$(QHELP_OUT_DIR)" + +tools: $(addsuffix $(EXE),$(addprefix tools/bin/,$(BINARIES))) tools/tokenizer.jar + +.PHONY: $(addsuffix $(EXE),$(addprefix tools/bin/,$(BINARIES))) +$(addsuffix $(EXE),$(addprefix tools/bin/,$(BINARIES))): + go build -mod=vendor -o $@ ./extractor/cli/$(basename $(@F)) + +tools-codeql: tools-$(CODEQL_PLATFORM) + +tools-codeql-full: tools-linux64 tools-osx64 tools-win64 + +tools-linux64: $(addprefix tools/linux64/,$(BINARIES)) + +.PHONY: $(addprefix tools/linux64/,$(BINARIES)) +$(addprefix tools/linux64/,$(BINARIES)): + GOOS=linux GOARCH=amd64 go build -mod=vendor -o $@ ./extractor/cli/$(@F) + +tools-osx64: $(addprefix tools/osx64/,$(BINARIES)) + +.PHONY: $(addprefix tools/osx64/,$(BINARIES)) +$(addprefix tools/osx64/,$(BINARIES)): + GOOS=darwin GOARCH=amd64 go build -mod=vendor -o $@ ./extractor/cli/$(@F) + +tools-win64: $(addsuffix .exe,$(addprefix tools/win64/,$(BINARIES))) + +.PHONY: $(addsuffix .exe,$(addprefix tools/win64/,$(BINARIES))) +$(addsuffix .exe,$(addprefix tools/win64/,$(BINARIES))): + env GOOS=windows GOARCH=amd64 go build -mod=vendor -o $@ ./extractor/cli/$(basename $(@F)) + +.PHONY: extractor-common extractor extractor-full install-deps +extractor-common: codeql-extractor.yml LICENSE ql/lib/go.dbscheme \ + tools/tokenizer.jar $(CODEQL_TOOLS) + rm -rf $(EXTRACTOR_PACK_OUT) + mkdir -p $(EXTRACTOR_PACK_OUT) + cp codeql-extractor.yml LICENSE ql/lib/go.dbscheme ql/lib/go.dbscheme.stats $(EXTRACTOR_PACK_OUT) + mkdir $(EXTRACTOR_PACK_OUT)/tools + cp -r tools/tokenizer.jar $(CODEQL_TOOLS) $(EXTRACTOR_PACK_OUT)/tools + +extractor: extractor-common tools-codeql + cp -r tools/$(CODEQL_PLATFORM) $(EXTRACTOR_PACK_OUT)/tools + +extractor-full: extractor-common tools-codeql-full + cp -r $(addprefix tools/,linux64 osx64 win64) $(EXTRACTOR_PACK_OUT)/tools + +tools/tokenizer.jar: tools/net/sourceforge/pmd/cpd/GoLanguage.class + jar cf $@ -C tools net + jar uf $@ -C tools opencsv + +tools/net/sourceforge/pmd/cpd/GoLanguage.class: extractor/net/sourceforge/pmd/cpd/GoLanguage.java + javac -cp extractor -d tools $< + rm tools/net/sourceforge/pmd/cpd/AbstractLanguage.class + rm tools/net/sourceforge/pmd/cpd/SourceCode.class + rm tools/net/sourceforge/pmd/cpd/TokenEntry.class + rm tools/net/sourceforge/pmd/cpd/Tokenizer.class + +ql/lib/go.dbscheme: tools/$(CODEQL_PLATFORM)/go-gen-dbscheme$(EXE) + $< $@ + +build/stats/src.stamp: + mkdir -p $(@D)/src + git clone 'https://github.com/golang/tools' $(@D)/src + git -C $(@D)/src checkout 9b52d559c609 -q + touch $@ + +ql/lib/go.dbscheme.stats: ql/lib/go.dbscheme build/stats/src.stamp extractor + rm -rf build/stats/database + codeql database create -l go -s build/stats/src -j4 --search-path . build/stats/database + codeql dataset measure -o $@ build/stats/database/db-go + +test: all build/testdb/check-upgrade-path + codeql test run ql/test --search-path build/codeql-extractor-go --consistency-queries ql/test/consistency + # use GOOS=linux because GOOS=darwin GOARCH=386 is no longer supported + env GOOS=linux GOARCH=386 codeql$(EXE) test run ql/test/query-tests/Security/CWE-681 --search-path build/codeql-extractor-go --consistency-queries ql/test/consistency + cd extractor; go test -mod=vendor ./... | grep -vF "[no test files]" + bash extractor-smoke-test/test.sh || (echo "Extractor smoke test FAILED"; exit 1) + +.PHONY: build/testdb/check-upgrade-path +build/testdb/check-upgrade-path : build/testdb/go.dbscheme ql/lib/go.dbscheme + codeql dataset upgrade build/testdb --search-path ql/lib + diff -q build/testdb/go.dbscheme ql/lib/go.dbscheme + +.PHONY: build/testdb/go.dbscheme +build/testdb/go.dbscheme: ql/lib/upgrades/initial/go.dbscheme + rm -rf build/testdb + echo >build/empty.trap + codeql dataset import -S ql/lib/upgrades/initial/go.dbscheme build/testdb build/empty.trap + +.PHONY: sync-dataflow-libraries +sync-dataflow-libraries: + for f in DataFlowImpl.qll DataFlowImpl2.qll DataFlowImplCommon.qll DataFlowImplConsistency.qll tainttracking1/TaintTrackingImpl.qll tainttracking2/TaintTrackingImpl.qll FlowSummaryImpl.qll AccessPathSyntax.qll;\ + do\ + curl -s -o ./ql/lib/semmle/go/dataflow/internal/$$f https://raw.githubusercontent.com/github/codeql/$(DATAFLOW_BRANCH)/java/ql/lib/semmle/code/java/dataflow/internal/$$f;\ + done diff --git a/go/README.md b/go/README.md new file mode 100644 index 00000000000..6569eec3da9 --- /dev/null +++ b/go/README.md @@ -0,0 +1,54 @@ +# Go analysis support for CodeQL + +This open-source repository contains the extractor, CodeQL libraries, and queries that power Go +support in [LGTM](https://lgtm.com) and the other CodeQL products that [GitHub](https://github.com) +makes available to its customers worldwide. + +It contains two major components: + - an extractor, itself written in Go, that parses Go source code and converts it into a database + that can be queried using CodeQL. + - static analysis libraries and queries written in [CodeQL](https://codeql.github.com/docs/) that can be + used to analyze such a database to find coding mistakes or security vulnerabilities. + +The goal of this project is to provide comprehensive static analysis support for Go in CodeQL. + +For the queries and libraries that power CodeQL support for other languages, visit [the CodeQL +repository](https://github.com/github/codeql). + +## Installation + +Clone this repository. + +Run `scripts/install-deps.sh`. This will ensure that the necessary external CodeQL packs are +downloaded to your machine. You will need to re-run this script whenever you pull new commits from +the repo. + +If you want to use the CodeQL extension for Visual Studio Code, import this repository into your VS +Code workspace. + +## Usage + +To analyze a Go codebase, either use the [CodeQL command-line +interface](https://codeql.github.com/docs/codeql-cli/) to create a database yourself, or +download a pre-built database from [LGTM.com](https://lgtm.com/). You can then run any of the +queries contained in this repository either on the command line or using the VS Code extension. + +Note that the [lgtm.com](https://github.com/github/codeql/tree/lgtm.com) branch of this +repository corresponds to the version of the queries that is currently deployed on LGTM.com. +The [main](https://github.com/github/codeql/tree/main) branch may contain changes that +have not been deployed yet, so you may need to upgrade databases downloaded from LGTM.com before +running queries on them. + +## Contributions + +Contributions are welcome! Please see our [contribution guidelines](CONTRIBUTING.md) and our +[code of conduct](CODE_OF_CONDUCT.md) for details on how to participate in our community. + +## Licensing + +The code in this repository is licensed under the [MIT license](LICENSE). + +## Resources + +- [Writing CodeQL queries](https://codeql.github.com/docs/writing-codeql-queries/codeql-queries/) +- [Learning CodeQL](https://codeql.github.com/docs/writing-codeql-queries/ql-tutorials/) diff --git a/go/SECURITY.md b/go/SECURITY.md new file mode 100644 index 00000000000..58767720f29 --- /dev/null +++ b/go/SECURITY.md @@ -0,0 +1,3 @@ +If you discover a security issue in this repo, please submit it through the [GitHub Security Bug Bounty](https://hackerone.com/github). + +Thanks for helping make CodeQL safe for everyone. \ No newline at end of file diff --git a/go/alert_weighting.properties b/go/alert_weighting.properties new file mode 100644 index 00000000000..0b7b5d90ac5 --- /dev/null +++ b/go/alert_weighting.properties @@ -0,0 +1,3 @@ +precision = ("veryhigh", "high", "medium", "low") +severity = ("error", "warning", "recommendation") +security = ("true", "false") diff --git a/go/build/.gitkeep b/go/build/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/go/codeql-extractor.yml b/go/codeql-extractor.yml new file mode 100644 index 00000000000..b258b193f56 --- /dev/null +++ b/go/codeql-extractor.yml @@ -0,0 +1,14 @@ +name: "go" +display_name: "Go" +version: 0.1.0 +pull_request_triggers: + - "**/go.mod" + - "**/glide.yaml" + - "**/Gopkg.toml" +column_kind: "utf8" +file_types: + - name: go + display_name: Go + extensions: + - .go +legacy_qltest_extraction: true diff --git a/go/codeql-tools/autobuild.cmd b/go/codeql-tools/autobuild.cmd new file mode 100644 index 00000000000..aed999876e4 --- /dev/null +++ b/go/codeql-tools/autobuild.cmd @@ -0,0 +1,15 @@ +@echo off +SETLOCAL EnableDelayedExpansion + +rem Some legacy environment variables for the autobuilder. +set LGTM_SRC=%CD% + +if "%CODEQL_EXTRACTOR_GO_BUILD_TRACING%"=="on" ( + echo "Tracing enabled" + type NUL && "%CODEQL_EXTRACTOR_GO_ROOT%/tools/%CODEQL_PLATFORM%/go-build-runner.exe" +) else ( + type NUL && "%CODEQL_EXTRACTOR_GO_ROOT%/tools/%CODEQL_PLATFORM%/go-autobuilder.exe" +) +exit /b %ERRORLEVEL% + +ENDLOCAL diff --git a/go/codeql-tools/autobuild.sh b/go/codeql-tools/autobuild.sh new file mode 100755 index 00000000000..585152e676e --- /dev/null +++ b/go/codeql-tools/autobuild.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +set -eu + +if [ "$CODEQL_PLATFORM" != "linux64" ] && [ "$CODEQL_PLATFORM" != "osx64" ] ; then + echo "Automatic build detection for $CODEQL_PLATFORM is not implemented." + exit 1 +fi + +# Some legacy environment variables used by the autobuilder. +LGTM_SRC="$(pwd)" +export LGTM_SRC + +if [ "${CODEQL_EXTRACTOR_GO_BUILD_TRACING:-}" = "on" ]; then + echo "Tracing enabled" + "$CODEQL_EXTRACTOR_GO_ROOT/tools/$CODEQL_PLATFORM/go-build-runner" +else + "$CODEQL_EXTRACTOR_GO_ROOT/tools/$CODEQL_PLATFORM/go-autobuilder" +fi diff --git a/go/codeql-tools/index.cmd b/go/codeql-tools/index.cmd new file mode 100644 index 00000000000..21c8f64df92 --- /dev/null +++ b/go/codeql-tools/index.cmd @@ -0,0 +1,8 @@ +@echo off +SETLOCAL EnableDelayedExpansion + +type NUL && "%CODEQL_EXTRACTOR_GO_ROOT%/tools/%CODEQL_PLATFORM%/go-extractor.exe" -mod=vendor ./... +type NUL && "%CODEQL_EXTRACTOR_GO_ROOT%/tools/pre-finalize.cmd" +exit /b %ERRORLEVEL% + +ENDLOCAL diff --git a/go/codeql-tools/index.sh b/go/codeql-tools/index.sh new file mode 100755 index 00000000000..877400d37f2 --- /dev/null +++ b/go/codeql-tools/index.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -eu + +if [ "$CODEQL_PLATFORM" != "linux64" ] && [ "$CODEQL_PLATFORM" != "osx64" ] ; then + echo "Automatic build detection for $CODEQL_PLATFORM is not implemented." + exit 1 +fi + +"$CODEQL_EXTRACTOR_GO_ROOT/tools/$CODEQL_PLATFORM/go-extractor" -mod=vendor ./... +"$CODEQL_EXTRACTOR_GO_ROOT/tools/pre-finalize.sh" diff --git a/go/codeql-tools/linux64/compiler-tracing.spec b/go/codeql-tools/linux64/compiler-tracing.spec new file mode 100644 index 00000000000..2055555c21a --- /dev/null +++ b/go/codeql-tools/linux64/compiler-tracing.spec @@ -0,0 +1,7 @@ +**/go-autobuilder: + order compiler + trace no +**/go: + invoke ${config_dir}/go-extractor + prepend --mimic + prepend "${compiler}" diff --git a/go/codeql-tools/osx64/compiler-tracing.spec b/go/codeql-tools/osx64/compiler-tracing.spec new file mode 100644 index 00000000000..2055555c21a --- /dev/null +++ b/go/codeql-tools/osx64/compiler-tracing.spec @@ -0,0 +1,7 @@ +**/go-autobuilder: + order compiler + trace no +**/go: + invoke ${config_dir}/go-extractor + prepend --mimic + prepend "${compiler}" diff --git a/go/codeql-tools/pre-finalize.cmd b/go/codeql-tools/pre-finalize.cmd new file mode 100644 index 00000000000..4abac249933 --- /dev/null +++ b/go/codeql-tools/pre-finalize.cmd @@ -0,0 +1,19 @@ +@echo off +SETLOCAL EnableDelayedExpansion + +if NOT "%CODEQL_EXTRACTOR_GO_EXTRACT_HTML%"=="no" ( + type NUL && "%CODEQL_DIST%/codeql.exe" database index-files ^ + --working-dir=. ^ + --include-extension=.htm ^ + --include-extension=.html ^ + --include-extension=.xhtm ^ + --include-extension=.xhtml ^ + --include-extension=.vue ^ + --size-limit 10m ^ + --language html ^ + -- ^ + "%CODEQL_EXTRACTOR_GO_WIP_DATABASE%" ^ + || echo "HTML extraction failed; continuing" + + exit /b %ERRORLEVEL% +) diff --git a/go/codeql-tools/pre-finalize.sh b/go/codeql-tools/pre-finalize.sh new file mode 100755 index 00000000000..3a8b31c70a0 --- /dev/null +++ b/go/codeql-tools/pre-finalize.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +set -eu + +if [ "${CODEQL_EXTRACTOR_GO_EXTRACT_HTML:-yes}" != "no" ]; then + "$CODEQL_DIST/codeql" database index-files \ + --working-dir=. \ + --include-extension=.htm \ + --include-extension=.html \ + --include-extension=.xhtm \ + --include-extension=.xhtml \ + --include-extension=.vue \ + --size-limit 10m \ + --language html \ + -- \ + "$CODEQL_EXTRACTOR_GO_WIP_DATABASE" \ + || echo "HTML extraction failed; continuing." +fi diff --git a/go/codeql-tools/tracing-config.lua b/go/codeql-tools/tracing-config.lua new file mode 100644 index 00000000000..8554d545ce0 --- /dev/null +++ b/go/codeql-tools/tracing-config.lua @@ -0,0 +1,29 @@ +function RegisterExtractorPack() + local goExtractor = GetPlatformToolsDirectory() .. 'go-extractor' + local patterns = { + CreatePatternMatcher({'^go-autobuilder$'}, MatchCompilerName, nil, + {trace = false}), + CreatePatternMatcher({'^go$'}, MatchCompilerName, goExtractor, { + prepend = {'--mimic', '${compiler}'}, + order = ORDER_BEFORE + }) + + } + if OperatingSystem == 'windows' then + goExtractor = goExtractor .. 'go-extractor.exe' + patterns = { + CreatePatternMatcher({'^go-autobuilder%.exe$'}, MatchCompilerName, + nil, {trace = false}), + CreatePatternMatcher({'^go%.exe$'}, MatchCompilerName, goExtractor, + { + prepend = {'--mimic', '"${compiler}"'}, + order = ORDER_BEFORE + }) + } + end + return patterns +end + +-- Return a list of minimum supported versions of the configuration file format +-- return one entry per supported major version. +function GetCompatibleVersions() return {'1.0.0'} end diff --git a/go/codeql-tools/win64/compiler-tracing.spec b/go/codeql-tools/win64/compiler-tracing.spec new file mode 100644 index 00000000000..76a6b011405 --- /dev/null +++ b/go/codeql-tools/win64/compiler-tracing.spec @@ -0,0 +1,7 @@ +**/go-autobuilder.exe: + order compiler + trace no +**/go.exe: + invoke ${config_dir}/go-extractor.exe + prepend --mimic + prepend "${compiler}" diff --git a/go/docs/language/learn-ql/go/ast-class-reference.rst b/go/docs/language/learn-ql/go/ast-class-reference.rst new file mode 100644 index 00000000000..d874652a894 --- /dev/null +++ b/go/docs/language/learn-ql/go/ast-class-reference.rst @@ -0,0 +1,490 @@ +Abstract syntax tree classes for working with Go programs +========================================================= + +CodeQL has a large selection of classes for representing the abstract syntax tree of Go programs. + +.. include:: ../../reusables/abstract-syntax-tree.rst + +Statement classes +----------------- + +This table lists all subclasses of `Stmt `__. + ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Statement syntax | CodeQL class | Superclasses | Remarks | ++===================================================================================================================+===================================================================================================================+===============================================================================================================+===================================================================================================================+ +| ``;`` | EmptyStmt_ | | | +| | | | | +| | .. _EmptyStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$EmptyStmt.html | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ | ExprStmt_ | | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _ExprStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$ExprStmt.html | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``{`` Stmt_ ``...`` ``}`` | BlockStmt_ | | | +| | | | | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | .. _BlockStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BlockStmt.html | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``if`` Expr_ BlockStmt_ | IfStmt_ | | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _IfStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$IfStmt.html | | | +| .. _BlockStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BlockStmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``if`` Expr_ BlockStmt_ ``else`` Stmt_ | | | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | | | +| .. _BlockStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BlockStmt.html | | | | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``if`` Stmt_\ ``;`` Expr_ BlockStmt_ | | | | +| | | | | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | | | +| .. _BlockStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BlockStmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``for`` Expr_ BlockStmt_ | ForStmt_ | LoopStmt_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _ForStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$ForStmt.html | .. _LoopStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$LoopStmt.html | | +| .. _BlockStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BlockStmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``for`` Stmt_\ ``;`` Expr_\ ``;`` Stmt_ BlockStmt_ | | | | +| | | | | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | | | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | +| .. _BlockStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BlockStmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``for`` Expr_ ``...`` ``=`` ``range`` Expr_ BlockStmt_ | RangeStmt_ | LoopStmt_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _RangeStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$RangeStmt.html | .. _LoopStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$LoopStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | | | +| .. _BlockStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BlockStmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``switch`` Expr_ ``{`` CaseClause_ ``...`` ``}`` | ExpressionSwitchStmt_ | SwitchStmt_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _ExpressionSwitchStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$ExpressionSwitchStmt.html | .. _SwitchStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$SwitchStmt.html | | +| .. _CaseClause: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CaseClause.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``switch`` Stmt_\ ``;`` Expr_ ``{`` CaseClause_ ``...`` ``}`` | | | | +| | | | | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | | | +| .. _CaseClause: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CaseClause.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``switch`` Expr_\ ``.(type)`` ``{`` CaseClause_ ``...`` ``}`` | TypeSwitchStmt_ | SwitchStmt_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _TypeSwitchStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$TypeSwitchStmt.html | .. _SwitchStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$SwitchStmt.html | | +| .. _CaseClause: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CaseClause.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``switch`` SimpleAssignStmt_\ ``.(type)`` ``{`` CaseClause_ ``...`` ``}`` | | | | +| | | | | +| .. _SimpleAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$SimpleAssignStmt.html | | | | +| .. _CaseClause: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CaseClause.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``switch`` Stmt_\ ``;`` Expr_\ ``.(type)`` ``{`` CaseClause_ ``...`` ``}`` | | | | +| | | | | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | | | +| .. _CaseClause: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CaseClause.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``select`` ``{`` CommClause_ ``...`` ``}`` | SelectStmt_ | | | +| | | | | +| .. _CommClause: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CommClause.html | .. _SelectStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$SelectStmt.html | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``return`` | ReturnStmt_ | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``return`` Expr_ ``...`` | .. _ReturnStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$ReturnStmt.html | | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``break`` | BreakStmt_ | BranchStmt_ | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``break`` LabelName_ | .. _BreakStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BreakStmt.html | .. _BranchStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BranchStmt.html | | +| | | | | +| .. _LabelName: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$LabelName.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``continue`` | ContinueStmt_ | BranchStmt_ | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``continue`` LabelName_ | .. _ContinueStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$ContinueStmt.html | .. _BranchStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BranchStmt.html | | +| | | | | +| .. _LabelName: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$LabelName.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``goto`` LabelName_ | GotoStmt_ | BranchStmt_ | | +| | | | | +| .. _LabelName: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$LabelName.html | .. _GotoStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$GotoStmt.html | .. _BranchStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BranchStmt.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``fallthrough`` | FallthroughStmt_ | BranchStmt_ | can only occur as final non-empty child of a CaseClause_ in an ExpressionSwitchStmt_ | +| | | | | +| | .. _FallthroughStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$FallthroughStmt.html | .. _BranchStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BranchStmt.html | .. _CaseClause: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CaseClause.html | +| | | | .. _ExpressionSwitchStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$ExpressionSwitchStmt.html | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| LabelName_\ ``:`` Stmt_ | LabeledStmt_ | | | +| | | | | +| .. _LabelName: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$LabelName.html | .. _LabeledStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$LabeledStmt.html | | | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``var`` VariableName_ TypeName_ | DeclStmt_ | | | +| | | | | +| .. _VariableName: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$VariableName.html | .. _DeclStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$DeclStmt.html | | | +| .. _TypeName: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$TypeName.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``const`` VariableName_ ``=`` Expr_ | | | | +| | | | | +| .. _VariableName: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$VariableName.html | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``type`` TypeName_ TypeExpr_ | | | | +| | | | | +| .. _TypeName: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$TypeName.html | | | | +| .. _TypeExpr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$TypeExpr.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``type`` TypeName_ ``=`` TypeExpr_ | | | | +| | | | | +| .. _TypeName: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$TypeName.html | | | | +| .. _TypeExpr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$TypeExpr.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``...`` ``=`` Expr_ ``...`` | AssignStmt_ | SimpleAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _AssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$AssignStmt.html | .. _SimpleAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$SimpleAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| VariableName_ ``...`` ``:=`` Expr_ ``...`` | DefineStmt_ | SimpleAssignStmt_, Assignment_ | | +| | | | | +| .. _VariableName: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$VariableName.html | .. _DefineStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$DefineStmt.html | .. _SimpleAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$SimpleAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``+=`` Expr_ | AddAssignStmt_ | CompoundAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _AddAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$AddAssignStmt.html | .. _CompoundAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CompoundAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``-=`` Expr_ | SubAssignStmt_ | CompoundAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _SubAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$SubAssignStmt.html | .. _CompoundAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CompoundAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``*=`` Expr_ | MulAssignStmt_ | CompoundAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _MulAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$MulAssignStmt.html | .. _CompoundAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CompoundAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``/=`` Expr_ | QuoAssignStmt_ | CompoundAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _QuoAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$QuoAssignStmt.html | .. _CompoundAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CompoundAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``%=`` Expr_ | RemAssignStmt_ | CompoundAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _RemAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$RemAssignStmt.html | .. _CompoundAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CompoundAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``*=`` Expr_ | MulAssignStmt_ | CompoundAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _MulAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$MulAssignStmt.html | .. _CompoundAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CompoundAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``&=`` Expr_ | AndAssignStmt_ | CompoundAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _AndAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$AndAssignStmt.html | .. _CompoundAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CompoundAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``|=`` Expr_ | OrAssignStmt_ | CompoundAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _OrAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$OrAssignStmt.html | .. _CompoundAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CompoundAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``^=`` Expr_ | XorAssignStmt_ | CompoundAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _XorAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$XorAssignStmt.html | .. _CompoundAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CompoundAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``<<=`` Expr_ | ShlAssignStmt_ | CompoundAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _ShlAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$ShlAssignStmt.html | .. _CompoundAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CompoundAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``>>=`` Expr_ | ShrAssignStmt_ | CompoundAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _ShrAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$ShrAssignStmt.html | .. _CompoundAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CompoundAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``&^=`` Expr_ | AndNotAssignStmt_ | CompoundAssignStmt_, Assignment_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _AndNotAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$AndNotAssignStmt.html | .. _CompoundAssignStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CompoundAssignStmt.html | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | .. _Assignment: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Assignment.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``++`` | IncStmt_ | IncDecStmt_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _IncStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$IncStmt.html | .. _IncDecStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$IncDecStmt.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``--`` | DecStmt_ | IncDecStmt_ | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _DecStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$DecStmt.html | .. _IncDecStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$IncDecStmt.html | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``go`` CallExpr_ | GoStmt_ | | | +| | | | | +| .. _CallExpr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$CallExpr.html | .. _GoStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$GoStmt.html | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``defer`` CallExpr_ | DeferStmt_ | | | +| | | | | +| .. _CallExpr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$CallExpr.html | .. _DeferStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$DeferStmt.html | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``<-`` Expr_ | SendStmt_ | | | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _SendStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$SendStmt.html | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``case`` Expr_ ``...``\ ``:`` Stmt_ ``...`` | CaseClause_ | | can only occur as child of a SwitchStmt_ | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _CaseClause: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CaseClause.html | | .. _SwitchStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$SwitchStmt.html | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``case`` TypeExpr_ ``...``\ ``:`` Stmt_ ``...`` | | | | +| | | | | +| .. _TypeExpr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$TypeExpr.html | | | | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``default:`` Stmt_ ``...`` | | | | +| | | | | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| ``case`` SendStmt_\ ``:`` Stmt_ ``...`` | CommClause_ | | can only occur as child of a SelectStmt_ | +| | | | | +| .. _SendStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$SendStmt.html | .. _CommClause: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CommClause.html | | .. _SelectStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$SelectStmt.html | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``case`` RecvStmt_\ ``:`` Stmt_ ``...`` | | | | +| | | | | +| .. _RecvStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$RecvStmt.html | | | | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| ``default:`` Stmt_ ``...`` | | | | +| | | | | +| .. _Stmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$Stmt.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Expr_ ``...`` ``=`` RecvExpr_ | RecvStmt_ | | can only occur as child of a CommClause_ | +| | | | | +| .. _Expr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$Expr.html | .. _RecvStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$RecvStmt.html | | .. _CommClause: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$CommClause.html | +| .. _RecvExpr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$RecvExpr.html | | | | ++-------------------------------------------------------------------------------------------------------------------+ | | | +| VariableName_ ``...`` ``:=`` RecvExpr_ | | | | +| | | | | +| .. _VariableName: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$VariableName.html | | | | +| .. _RecvExpr: https://help.semmle.com/qldoc/go/semmle/go/Expr.qll/type.Expr$RecvExpr.html | | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| (anything unparseable) | BadStmt_ | | | +| | | | | +| | .. _BadStmt: https://help.semmle.com/qldoc/go/semmle/go/Stmt.qll/type.Stmt$BadStmt.html | | | ++-------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ + +Expression classes +------------------ + +There are many expression classes, so we present them by category. +All classes in this section are subclasses of +`Expr `__. + +Literals +~~~~~~~~ + +All classes in this subsection are subclasses of +`Literal `__. + ++-----------------------------------------+----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Expression syntax example | CodeQL class | Superclass | ++=========================================+==============================================================================================+==============================================================================================================================================================================================================+ +| ``23`` | `IntLit `__ | `BasicLit `__ | ++-----------------------------------------+----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``4.2`` | `FloatLit `__ | `BasicLit `__ | ++-----------------------------------------+----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``4.2 + 2.7i`` | `ImagLit `__ | `BasicLit `__ | ++-----------------------------------------+----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``'a'`` | `CharLit `__ | `BasicLit `__ | ++-----------------------------------------+----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``"Hello"`` | `StringLit `__ | `BasicLit `__ | ++-----------------------------------------+----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``func(x, y int) int { return x + y }`` | `FuncLit `__ | `FuncDef `__ | ++-----------------------------------------+----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``[6]int{1, 2, 3, 5}`` | `ArrayLit `__ | `ArrayOrSliceLit `__, `CompositeLit `__ | ++-----------------------------------------+----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``[]int{1, 2, 3, 5}`` | `SliceLit `__ | `ArrayOrSliceLit `__, `CompositeLit `__ | ++-----------------------------------------+----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``map[string]int{"A": 1, "B": 2}`` | `MapLit `__ | `CompositeLit `__ | ++-----------------------------------------+----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``Point3D{0.5, -0.5, 0.5}`` | `StructLit `__ | `CompositeLit `__ | ++-----------------------------------------+----------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Unary expressions +~~~~~~~~~~~~~~~~~ + +All classes in this subsection are subclasses of +`UnaryExpr `__. + ++--------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ +| Expression syntax | CodeQL class | Superclasses | ++============================================================================================+========================================================================================================+==================================================================================================================+ +| ``+``\ `Expr `__ | `PlusExpr `__ | `ArithmeticUnaryExpr `__ | ++--------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ +| ``-``\ `Expr `__ | `MinusExpr `__ | `ArithmeticUnaryExpr `__ | ++--------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ +| ``!``\ `Expr `__ | `NotExpr `__ | `LogicalUnaryExpr `__ | ++--------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ +| ``^``\ `Expr `__ | `ComplementExpr `__ | `BitwiseUnaryExpr `__ | ++--------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ +| ``&``\ `Expr `__ | `AddressExpr `__ | | ++--------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ +| ``<-``\ `Expr `__ | `RecvExpr `__ | | ++--------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------+ + +Binary expressions +~~~~~~~~~~~~~~~~~~ + +All classes in this subsection are subclasses of +`BinaryExpr `__. + ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| Expression syntax | CodeQL class | Superclasses | ++==============================================================================================================================================================================+================================================================================================+============================================================================================================================+ +| `Expr `__ ``*`` `Expr `__ | `MulExpr `__ | `ArithmeticBinaryExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``/`` `Expr `__ | `QuoExpr `__ | `ArithmeticBinaryExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``%`` `Expr `__ | `RemExpr `__ | `ArithmeticBinaryExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``+`` `Expr `__ | `AddExpr `__ | `ArithmeticBinaryExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``-`` `Expr `__ | `SubExpr `__ | `ArithmeticBinaryExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``<<`` `Expr `__ | `ShlExpr `__ | `ShiftExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``>>`` `Expr `__ | `ShrExpr `__ | `ShiftExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``&&`` `Expr `__ | `LandExpr `__ | `LogicalBinaryExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``||`` `Expr `__ | `LorExpr `__ | `LogicalBinaryExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``<`` `Expr `__ | `LssExpr `__ | `RelationalComparisonExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``>`` `Expr `__ | `GtrExpr `__ | `RelationalComparisonExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``<=`` `Expr `__ | `LeqExpr `__ | `RelationalComparisonExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``>=`` `Expr `__ | `GeqExpr `__ | `RelationalComparisonExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``==`` `Expr `__ | `EqlExpr `__ | `EqualityTestExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``!=`` `Expr `__ | `NeqExpr `__ | `EqualityTestExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``&`` `Expr `__ | `AndExpr `__ | `BitwiseBinaryExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``|`` `Expr `__ | `OrExpr `__ | `BitwiseBinaryExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``^`` `Expr `__ | `XorExpr `__ | `BitwiseBinaryExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__ ``&^`` `Expr `__ | `AndNotExpr `__ | `BitwiseBinaryExpr `__ | ++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+ + +Type expressions +~~~~~~~~~~~~~~~~ + +All classes in this subsection are subclasses of +`TypeExpr `__. + ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| Expression syntax | CodeQL class | Superclasses | ++=========================================================================================================================================================================================================+====================================================================================================================+====================================================================================================+ +| ``[``\ `Expr `__\ ``]`` `TypeExpr `__ | `ArrayTypeExpr `__ | | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| ``struct { ... }`` | `StructTypeExpr `__ | | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| ``func`` `FunctionName `__\ ``(...) (...)`` | `FuncTypeExpr `__ | | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| ``interface { ... }`` | `InterfaceTypeExpr `__ | | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| ``map[``\ `TypeExpr `__\ ``]``\ `TypeExpr `__ | `MapTypeExpr `__ | | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| ``chan<-`` `TypeExpr `__ | `SendChanTypeExpr `__ | `ChanTypeExpr `__ | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| ``<-chan`` `TypeExpr `__ | `RecvChanTypeExpr `__ | `ChanTypeExpr `__ | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| ``chan`` `TypeExpr `__ | `SendRecvChanTypeExpr `__ | `ChanTypeExpr `__ | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+ + +Name expressions +~~~~~~~~~~~~~~~~ + +All classes in this subsection are subclasses of +`Name `__. + +The following classes relate to the structure of the name. + ++-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| Expression syntax | CodeQL class | Superclasses | ++===================================================================================================================================================================================+======================================================================================================+====================================================================================================+ +| `Ident `__ | `SimpleName `__ | `Ident `__ | ++-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+ +| `Ident `__\ ``.``\ `Ident `__ | `QualifiedName `__ | `SelectorExpr `__ | ++-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+ + +The following classes relate to what sort of entity the name refers to. + + +- `PackageName `__ +- `TypeName `__ +- `LabelName `__ +- `ValueName `__ + + - `ConstantName `__ + - `VariableName `__ + - `FunctionName `__ + +Miscellaneous +~~~~~~~~~~~~~ + ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Expression syntax | CodeQL class | Superclasses | Remarks | ++============================================================================================================================================================================================================================================================================================================================================================================+========================================================================================================+====================================================================================================================+==========================================================================================================================================================================================================================+ +| ``foo`` | `Ident `__ | | | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``_`` | `BlankIdent `__ | | | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``...`` | `Ellipsis `__ | | | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``(``\ `Expr `__\ ``)`` | `ParenExpr `__ | | | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `Ident `__\ ``.``\ `Ident `__ | `SelectorExpr `__ | | | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__\ ``[``\ `Expr `__\ ``]`` | `IndexExpr `__ | | | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__\ ``[``\ `Expr `__\ ``:``\ `Expr `__\ ``:``\ `Expr `__\ ``]`` | `SliceExpr `__ | | | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__\ ``.(``\ `TypeExpr `__\ ``)`` | `TypeAssertExpr `__ | | | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``*``\ `Expr `__ | `StarExpr `__ | | can be a `ValueExpr `__ or `TypeExpr `__ depending on context | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__\ ``:`` `Expr `__ | `KeyValueExpr `__ | | | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `TypeExpr `__\ ``(``\ `Expr `__\ ``)`` | `ConversionExpr `__ | `CallOrConversionExpr `__ | | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `Expr `__\ ``(...)`` | `CallExpr `__ | `CallOrConversionExpr `__ | | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| (anything unparseable) | `BadExpr `__ | | | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +The following classes organize expressions by the kind of entity they refer to. + ++------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| CodeQL class | Explanation | ++======================================================================================================+=========================================================================================================================================================================================================================================================+ +| `TypeExpr `__ | an expression that denotes a type | ++------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `ReferenceExpr `__ | an expression that refers to a variable, a constant, a function, a field, or an element of an array or a slice | ++------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `ValueExpr `__ | an expression that can be evaluated to a value (as opposed to expressions that refer to a package, a type, or a statement label). This generalizes `ReferenceExpr `__ | ++------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Further reading +--------------- + +.. include:: ../../reusables/go-further-reading.rst +.. include:: ../../reusables/codeql-ref-tools-further-reading.rst \ No newline at end of file diff --git a/go/docs/language/learn-ql/go/library-modeling-go.rst b/go/docs/language/learn-ql/go/library-modeling-go.rst new file mode 100644 index 00000000000..ef7f50bf7cb --- /dev/null +++ b/go/docs/language/learn-ql/go/library-modeling-go.rst @@ -0,0 +1,122 @@ +Modeling data flow in Go libraries +================================== + +When analyzing a Go program, CodeQL does not examine the source code for +external packages. To track the flow of untrusted data through a library, you +can create a model of the library. + +You can find existing models in the ``go/ql/lib/semmle/go/frameworks/`` folder of the +`CodeQL repository `__. +To add a new model, you should make a new file in that folder, named after the library. + +Sources +------- + +To mark a source of data that is controlled by an untrusted user, we +create a class extending ``UntrustedFlowSource::Range``. Inheritance and +the characteristic predicate of the class should be used to specify +exactly the dataflow node that introduces the data. Here is a short +example from ``Mux.qll``. + +.. code-block:: ql + + class RequestVars extends DataFlow::UntrustedFlowSource::Range, DataFlow::CallNode { + RequestVars() { this.getTarget().hasQualifiedName("github.com/gorilla/mux", "Vars") } + } + +This has the effect that all calls to `the function Vars from the +package mux `__ are +treated as sources of untrusted data. + +Flow propagation +---------------- + +By default, we assume that all functions in libraries do not have +any data flow. To indicate that a particular function does have data flow, +create a class extending ``TaintTracking::FunctionModel`` (or +``DataFlow::FunctionModel`` if the untrusted user data is passed on +without being modified). + +Inheritance and the characteristic predicate of the class should specify +the function. The class should also have a member predicate with the signature +``override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp)`` +(or +``override predicate hasDataFlow(FunctionInput inp, FunctionOutput outp)`` +if extending ``DataFlow::FunctionModel``). The body should constrain +``inp`` and ``outp``. + +``FunctionInput`` is an abstract representation of the inputs to a +function. The options are: + +* the receiver (``inp.isReceiver()``) +* one of the parameters (``inp.isParameter(i)``) +* one of the results (``inp.isResult(i)``, or ``inp.isResult`` if there is only one result) + +Note that it may seem strange that the result of a function could be +considered as a function input, but it is needed in some cases. For +instance, the function ``bufio.NewWriter`` returns a writer ``bw`` that +buffers write operations to an underlying writer ``w``. If tainted data +is written to ``bw``, then it makes sense to propagate that taint back +to the underlying writer ``w``, which can be modeled by saying that +``bufio.NewWriter`` propagates taint from its result to its first +argument. + +Similarly, ``FunctionOutput`` is an abstract representation of the +outputs to a function. The options are: + +* the receiver (``outp.isReceiver()``) +* one of the parameters (``outp.isParameter(i)``) +* one of the results (``outp.isResult(i)``, or ``outp.isResult`` if there is only one result) + +Here is an example from ``Gin.qll``, which has been slightly simplified. + +.. code-block:: ql + + private class ParamsGet extends TaintTracking::FunctionModel, Method { + ParamsGet() { this.hasQualifiedName("github.com/gin-gonic/gin", "Params", "Get") } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp.isReceiver() and outp.isResult(0) + } + } + +This has the effect that calls to the ``Get`` method with receiver type +``Params`` from the ``gin-gonic/gin`` package allow taint to flow from +the receiver to the first result. In other words, if ``p`` has type +``Params`` and taint can flow to it, then after the line +``x := p.Get("foo")`` taint can also flow to ``x``. + +Sanitizers +---------- + +It is not necessary to indicate that library functions are sanitizers. +Their bodies are not analyzed, so it is assumed that data does not +flow through them. + +Sinks +----- + +Data-flow sinks are specified by queries rather than by library models. +However, you can use library models to indicate when functions belong to +special categories. Queries can then use these categories when specifying +sinks. Classes representing these special categories are contained in +``go/ql/lib/semmle/go/Concepts.qll`` in the `CodeQL for Go repository +`__. +``Concepts.qll`` includes classes for logger mechanisms, +HTTP response writers, HTTP redirects, and marshaling and unmarshaling +functions. + +Here is a short example from ``Stdlib.qll``, which has been slightly simplified. + +.. code-block:: ql + + private class PrintfCall extends LoggerCall::Range, DataFlow::CallNode { + PrintfCall() { this.getTarget().hasQualifiedName("fmt", ["Print", "Printf", "Println"]) } + + override DataFlow::Node getAMessageComponent() { result = this.getAnArgument() } + } + +This has the effect that any call to ``Print``, ``Printf``, or +``Println`` in the package ``fmt`` is recognized as a logger call. +Any query that uses logger calls as a sink will then identify when tainted data +has been passed as an argument to ``Print``, ``Printf``, or ``Println``. \ No newline at end of file diff --git a/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/exprs.ql b/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/exprs.ql new file mode 100644 index 00000000000..b4b7498e27c --- /dev/null +++ b/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/exprs.ql @@ -0,0 +1,41 @@ +class Expr_ extends @expr { + string toString() { result = "Expr" } +} + +class ExprParent_ extends @exprparent { + string toString() { result = "ExprParent" } +} + +/** + * Two new kinds have been inserted such that `@sliceexpr` which used to have + * index 13 now has index 15. Another new kind has been inserted such that + * `@plusexpr` which used to have index 23 now has index 26. Entries with + * indices lower than 13 are unchanged. + */ +bindingset[new_index] +int old_index(int new_index) { + if new_index < 13 + then result = new_index + else + if new_index = [13, 14] + then result = 0 // badexpr + else + if new_index < 23 + then result + (15 - 13) = new_index + else + if new_index = 23 + then result = 0 // badexpr + else result + (26 - 23) = new_index +} + +// The schema for exprs is: +// +// exprs(unique int id: @expr, +// int kind: int ref, +// int parent: @exprparent ref, +// int idx: int ref); +from Expr_ expr, int new_kind, ExprParent_ parent, int idx, int old_kind +where + exprs(expr, new_kind, parent, idx) and + old_kind = old_index(new_kind) +select expr, old_kind, parent, idx diff --git a/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/go.dbscheme b/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/go.dbscheme new file mode 100644 index 00000000000..8f168c8af3f --- /dev/null +++ b/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/go.dbscheme @@ -0,0 +1,531 @@ +/** Auto-generated dbscheme; do not edit. */ + + +/** 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); + +#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: @namedtype 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 named: @namedtype 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); + +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); + +@container = @file | @folder; + +@locatable = @xmllocatable | @node | @localscope; + +@node = @documentable | @exprparent | @modexprparent | @fieldparent | @stmtparent | @declparent | @scopenode + | @comment_group | @comment; + +@documentable = @file | @field | @spec | @gendecl | @funcdecl | @modexpr; + +@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @spec; + +@modexprparent = @file | @modexpr; + +@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr; + +@stmtparent = @funcdef | @stmt | @decl; + +@declparent = @file | @declstmt; + +@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 = @sliceexpr +| 14 = @typeassertexpr +| 15 = @callorconversionexpr +| 16 = @starexpr +| 17 = @keyvalueexpr +| 18 = @arraytypeexpr +| 19 = @structtypeexpr +| 20 = @functypeexpr +| 21 = @interfacetypeexpr +| 22 = @maptypeexpr +| 23 = @plusexpr +| 24 = @minusexpr +| 25 = @notexpr +| 26 = @complementexpr +| 27 = @derefexpr +| 28 = @addressexpr +| 29 = @arrowexpr +| 30 = @lorexpr +| 31 = @landexpr +| 32 = @eqlexpr +| 33 = @neqexpr +| 34 = @lssexpr +| 35 = @leqexpr +| 36 = @gtrexpr +| 37 = @geqexpr +| 38 = @addexpr +| 39 = @subexpr +| 40 = @orexpr +| 41 = @xorexpr +| 42 = @mulexpr +| 43 = @quoexpr +| 44 = @remexpr +| 45 = @shlexpr +| 46 = @shrexpr +| 47 = @andexpr +| 48 = @andnotexpr +| 49 = @sendchantypeexpr +| 50 = @recvchantypeexpr +| 51 = @sendrcvchantypeexpr +| 52 = @errorexpr; + +@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; + +@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 = @arraytype +| 27 = @slicetype +| 28 = @structtype +| 29 = @pointertype +| 30 = @interfacetype +| 31 = @tupletype +| 32 = @signaturetype +| 33 = @maptype +| 34 = @sendchantype +| 35 = @recvchantype +| 36 = @sendrcvchantype +| 37 = @namedtype; + +@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 = @containertype | @structtype | @pointertype | @interfacetype | @tupletype | @signaturetype | @namedtype; + +@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/90fa7836e0a239f69bbebffcf342e92c240d54bc/old.dbscheme b/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/old.dbscheme new file mode 100644 index 00000000000..90fa7836e0a --- /dev/null +++ b/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/old.dbscheme @@ -0,0 +1,547 @@ +/** Auto-generated dbscheme; do not edit. */ + + +/** 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: @namedtype 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 named: @namedtype 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); + +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 +| 55 = @errorexpr; + +@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 = @namedtype +| 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 | @namedtype | @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/90fa7836e0a239f69bbebffcf342e92c240d54bc/types.ql b/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/types.ql new file mode 100644 index 00000000000..0b02cc68085 --- /dev/null +++ b/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/types.ql @@ -0,0 +1,31 @@ +class Type_ extends @type { + string toString() { result = "Type" } +} + +/** + * A new kind has been inserted such that `@arraytype` which used to have index + * 26 now has index 27. Another new kind has been inserted at 39, which is the + * end of the list. Entries with lower indices are unchanged. + */ +bindingset[new_index] +int old_index(int new_index) { + if new_index < 26 + then result = new_index + else + if new_index = 26 + then result = 0 // invalidtype + else + if new_index < 39 + then result + (27 - 26) = new_index + else result = 0 // invalidtype +} + +// The schema for types is: +// +// types(unique int id: @type, +// int kind: int ref); +from Type_ type, int new_kind, int old_kind +where + types(type, new_kind) and + old_kind = old_index(new_kind) +select type, old_kind diff --git a/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/upgrade.properties b/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/upgrade.properties new file mode 100644 index 00000000000..a233cc281c8 --- /dev/null +++ b/go/downgrades/90fa7836e0a239f69bbebffcf342e92c240d54bc/upgrade.properties @@ -0,0 +1,6 @@ +description: Add generic instantiation expressions and type parameter types +compatibility: full +exprs.rel: run exprs.qlo +types.rel: run types.qlo +typeparamdecls.rel: delete +typeparam.rel: delete \ No newline at end of file diff --git a/go/downgrades/initial/go.dbscheme b/go/downgrades/initial/go.dbscheme new file mode 100644 index 00000000000..8f168c8af3f --- /dev/null +++ b/go/downgrades/initial/go.dbscheme @@ -0,0 +1,531 @@ +/** Auto-generated dbscheme; do not edit. */ + + +/** 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); + +#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: @namedtype 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 named: @namedtype 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); + +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); + +@container = @file | @folder; + +@locatable = @xmllocatable | @node | @localscope; + +@node = @documentable | @exprparent | @modexprparent | @fieldparent | @stmtparent | @declparent | @scopenode + | @comment_group | @comment; + +@documentable = @file | @field | @spec | @gendecl | @funcdecl | @modexpr; + +@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @spec; + +@modexprparent = @file | @modexpr; + +@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr; + +@stmtparent = @funcdef | @stmt | @decl; + +@declparent = @file | @declstmt; + +@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 = @sliceexpr +| 14 = @typeassertexpr +| 15 = @callorconversionexpr +| 16 = @starexpr +| 17 = @keyvalueexpr +| 18 = @arraytypeexpr +| 19 = @structtypeexpr +| 20 = @functypeexpr +| 21 = @interfacetypeexpr +| 22 = @maptypeexpr +| 23 = @plusexpr +| 24 = @minusexpr +| 25 = @notexpr +| 26 = @complementexpr +| 27 = @derefexpr +| 28 = @addressexpr +| 29 = @arrowexpr +| 30 = @lorexpr +| 31 = @landexpr +| 32 = @eqlexpr +| 33 = @neqexpr +| 34 = @lssexpr +| 35 = @leqexpr +| 36 = @gtrexpr +| 37 = @geqexpr +| 38 = @addexpr +| 39 = @subexpr +| 40 = @orexpr +| 41 = @xorexpr +| 42 = @mulexpr +| 43 = @quoexpr +| 44 = @remexpr +| 45 = @shlexpr +| 46 = @shrexpr +| 47 = @andexpr +| 48 = @andnotexpr +| 49 = @sendchantypeexpr +| 50 = @recvchantypeexpr +| 51 = @sendrcvchantypeexpr +| 52 = @errorexpr; + +@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; + +@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 = @arraytype +| 27 = @slicetype +| 28 = @structtype +| 29 = @pointertype +| 30 = @interfacetype +| 31 = @tupletype +| 32 = @signaturetype +| 33 = @maptype +| 34 = @sendchantype +| 35 = @recvchantype +| 36 = @sendrcvchantype +| 37 = @namedtype; + +@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 = @containertype | @structtype | @pointertype | @interfacetype | @tupletype | @signaturetype | @namedtype; + +@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/qlpack.yml b/go/downgrades/qlpack.yml new file mode 100644 index 00000000000..d3e056bea64 --- /dev/null +++ b/go/downgrades/qlpack.yml @@ -0,0 +1,4 @@ +name: codeql/go-downgrades +groups: go +downgrades: . +library: true diff --git a/go/external-packs/codeql/suite-helpers/0.0.2/code-scanning-selectors.yml b/go/external-packs/codeql/suite-helpers/0.0.2/code-scanning-selectors.yml new file mode 100644 index 00000000000..116d7288ddf --- /dev/null +++ b/go/external-packs/codeql/suite-helpers/0.0.2/code-scanning-selectors.yml @@ -0,0 +1,27 @@ +- description: Selectors for selecting the Code-Scanning-relevant queries for a language +- include: + kind: + - problem + - path-problem + - alert + - path-alert + precision: + - high + - very-high + problem.severity: + - error + - warning + tags contain: + - security +- include: + kind: + - diagnostic +- include: + kind: + - metric + tags contain: + - summary +- exclude: + deprecated: // +- exclude: + query path: /^experimental\/.*/ diff --git a/go/external-packs/codeql/suite-helpers/0.0.2/lgtm-displayed-only.yml b/go/external-packs/codeql/suite-helpers/0.0.2/lgtm-displayed-only.yml new file mode 100644 index 00000000000..1b7237495e2 --- /dev/null +++ b/go/external-packs/codeql/suite-helpers/0.0.2/lgtm-displayed-only.yml @@ -0,0 +1,12 @@ +- description: Selectors for excluding queries that LGTM doesn't display by default +- exclude: + kind: + - problem + - path-problem + precision: medium +- exclude: + kind: + - problem + - path-problem + precision: high + problem.severity: recommendation diff --git a/go/external-packs/codeql/suite-helpers/0.0.2/lgtm-selectors.yml b/go/external-packs/codeql/suite-helpers/0.0.2/lgtm-selectors.yml new file mode 100644 index 00000000000..c83484cb1a4 --- /dev/null +++ b/go/external-packs/codeql/suite-helpers/0.0.2/lgtm-selectors.yml @@ -0,0 +1,25 @@ +- description: Selectors for selecting the LGTM-relevant queries for a language +- include: + kind: + - problem + - path-problem + precision: + - high + - very-high +- include: + kind: + - problem + - path-problem + precision: medium + problem.severity: + - error + - warning +- include: + kind: + - definitions + - alert-suppression + - file-classifier +- exclude: + deprecated: // +- exclude: + query path: /^experimental\/.*/ diff --git a/go/external-packs/codeql/suite-helpers/0.0.2/qlpack.yml b/go/external-packs/codeql/suite-helpers/0.0.2/qlpack.yml new file mode 100644 index 00000000000..ca0a6732f5a --- /dev/null +++ b/go/external-packs/codeql/suite-helpers/0.0.2/qlpack.yml @@ -0,0 +1,3 @@ +name: codeql/suite-helpers +version: 0.0.2 +library: true diff --git a/go/external-packs/codeql/suite-helpers/0.0.2/security-and-quality-selectors.yml b/go/external-packs/codeql/suite-helpers/0.0.2/security-and-quality-selectors.yml new file mode 100644 index 00000000000..61466f53886 --- /dev/null +++ b/go/external-packs/codeql/suite-helpers/0.0.2/security-and-quality-selectors.yml @@ -0,0 +1,29 @@ +- description: Selectors for selecting the security-and-quality queries for a language +- include: + kind: + - problem + - path-problem + precision: + - high + - very-high +- include: + kind: + - problem + - path-problem + precision: medium + problem.severity: + - error + - warning +- include: + kind: + - diagnostic +- include: + kind: + - metric + tags contain: + - summary +- exclude: + deprecated: // +- exclude: + query path: /^experimental\/.*/ + diff --git a/go/external-packs/codeql/suite-helpers/0.0.2/security-extended-selectors.yml b/go/external-packs/codeql/suite-helpers/0.0.2/security-extended-selectors.yml new file mode 100644 index 00000000000..c3a82de14f2 --- /dev/null +++ b/go/external-packs/codeql/suite-helpers/0.0.2/security-extended-selectors.yml @@ -0,0 +1,34 @@ +- description: Selectors for selecting the security-extended queries for a language +- include: + kind: + - problem + - path-problem + precision: + - high + - very-high + tags contain: + - security +- include: + kind: + - problem + - path-problem + precision: + - medium + problem.severity: + - error + - warning + tags contain: + - security +- include: + kind: + - diagnostic +- include: + kind: + - metric + tags contain: + - summary +- exclude: + deprecated: // +- exclude: + query path: /^experimental\/.*/ + diff --git a/go/extractor-smoke-test/.gitignore b/go/extractor-smoke-test/.gitignore new file mode 100644 index 00000000000..e32b11d7ee1 --- /dev/null +++ b/go/extractor-smoke-test/.gitignore @@ -0,0 +1,4 @@ +*.bqrs +tracing-out.csv +notracing-out.csv +testdb diff --git a/go/extractor-smoke-test/expected.csv b/go/extractor-smoke-test/expected.csv new file mode 100644 index 00000000000..cb0eb08f8f4 --- /dev/null +++ b/go/extractor-smoke-test/expected.csv @@ -0,0 +1,12 @@ +"1","assignment to i" +"assignment to i","selection of Println" +"call to Println","exit" +"entry","skip" +"entry","skip" +"function declaration","exit" +"i","call to Println" +"nd","col1" +"selection of Println","i" +"skip","1" +"skip","function declaration" +"skip","skip" diff --git a/go/extractor-smoke-test/go.mod b/go/extractor-smoke-test/go.mod new file mode 100644 index 00000000000..0659b4eaec8 --- /dev/null +++ b/go/extractor-smoke-test/go.mod @@ -0,0 +1,3 @@ +module github.com/codeql-go-extractor-smoke-test + +go 1.14 diff --git a/go/extractor-smoke-test/main.go b/go/extractor-smoke-test/main.go new file mode 100644 index 00000000000..2f7b1325daa --- /dev/null +++ b/go/extractor-smoke-test/main.go @@ -0,0 +1,8 @@ +package main + +import "fmt" + +func main() { + var i int = 1 + fmt.Println(i) +} diff --git a/go/extractor-smoke-test/test.sh b/go/extractor-smoke-test/test.sh new file mode 100755 index 00000000000..46a7f8a5956 --- /dev/null +++ b/go/extractor-smoke-test/test.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +set -e + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +cd $DIR + +rm -rf testdb + +codeql database create --language=go testdb --search-path ../build/codeql-extractor-go +codeql dataset check testdb/db-go +codeql query run ../ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/ControlFlowNode_getASuccessor.ql --database=testdb --output=notracing-out.bqrs --search-path .. +codeql bqrs decode notracing-out.bqrs --format=csv --output=notracing-out.csv +diff -w -u <(sort notracing-out.csv) expected.csv + +# Now do it again with tracing enabled + +export CODEQL_EXTRACTOR_GO_BUILD_TRACING=on + +rm -rf testdb + +codeql database create --language=go testdb --search-path ../build/codeql-extractor-go +codeql dataset check testdb/db-go +codeql query run ../ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/ControlFlowNode_getASuccessor.ql --database=testdb --output=tracing-out.bqrs --search-path .. +codeql bqrs decode tracing-out.bqrs --format=csv --output=tracing-out.csv +diff -w -u <(sort tracing-out.csv) expected.csv diff --git a/go/extractor/autobuilder/autobuilder.go b/go/extractor/autobuilder/autobuilder.go new file mode 100644 index 00000000000..11c49735eaa --- /dev/null +++ b/go/extractor/autobuilder/autobuilder.go @@ -0,0 +1,81 @@ +// Package autobuilder implements a simple system that attempts to run build commands for common +// build frameworks, if the relevant files exist. +package autobuilder + +import ( + "log" + "os" + "os/exec" + + "github.com/github/codeql-go/extractor/util" +) + +// CheckExtracted sets whether the autobuilder should check whether source files have been extracted +// to the CodeQL source directory as well as whether the build command executed successfully. +var CheckExtracted = false + +// checkEmpty checks whether a directory either doesn't exist or is empty. +func checkEmpty(dir string) (bool, error) { + if !util.DirExists(dir) { + return true, nil + } + + d, err := os.Open(dir) + if err != nil { + return false, err + } + defer d.Close() + + names, err := d.Readdirnames(-1) + if err != nil { + return false, err + } + return len(names) == 0, nil +} + +// checkExtractorRun checks whether the CodeQL Go extractor has run, by checking if the source +// archive directory is empty or not. +func checkExtractorRun() bool { + srcDir := os.Getenv("CODEQL_EXTRACTOR_GO_SOURCE_ARCHIVE_DIR") + if srcDir != "" { + empty, err := checkEmpty(srcDir) + if err != nil { + log.Fatalf("Unable to read source archive directory %s.", srcDir) + } + if empty { + log.Printf("No Go code seen; continuing to try other builds.") + return false + } + return true + } else { + log.Fatalf("No source directory set.\nThis binary should not be run manually; instead, use the CodeQL CLI or VSCode extension. See https://securitylab.github.com/tools/codeql.") + return false + } +} + +// tryBuildIfExists tries to run the command `cmd args...` if the file `buildFile` exists and is not +// a directory. Returns true if the command was successful and false if not. +func tryBuildIfExists(buildFile, cmd string, args ...string) bool { + if util.FileExists(buildFile) { + log.Printf("%s found.\n", buildFile) + return tryBuild(cmd, args...) + } + return false +} + +// tryBuild tries to run `cmd args...`, returning true if successful and false if not. +func tryBuild(cmd string, args ...string) bool { + log.Printf("Trying build command %s %v", cmd, args) + res := util.RunCmd(exec.Command(cmd, args...)) + return res && (!CheckExtracted || checkExtractorRun()) +} + +// Autobuild attempts to detect build system and run the corresponding command. +func Autobuild() bool { + return tryBuildIfExists("Makefile", "make") || + tryBuildIfExists("makefile", "make") || + tryBuildIfExists("GNUmakefile", "make") || + tryBuildIfExists("build.ninja", "ninja") || + tryBuildIfExists("build", "./build") || + tryBuildIfExists("build.sh", "./build.sh") +} diff --git a/go/extractor/cli/go-autobuilder/go-autobuilder.go b/go/extractor/cli/go-autobuilder/go-autobuilder.go new file mode 100644 index 00000000000..07b8a6cb478 --- /dev/null +++ b/go/extractor/cli/go-autobuilder/go-autobuilder.go @@ -0,0 +1,588 @@ +package main + +import ( + "fmt" + "io/ioutil" + "log" + "net/url" + "os" + "os/exec" + "path/filepath" + "regexp" + "runtime" + "strings" + + "golang.org/x/mod/semver" + + "github.com/github/codeql-go/extractor/autobuilder" + "github.com/github/codeql-go/extractor/util" +) + +func usage() { + fmt.Fprintf(os.Stderr, + `%s is a wrapper script that installs dependencies and calls the extractor. + +When LGTM_SRC is not set, the script installs dependencies as described below, and then invokes the +extractor in the working directory. + +If LGTM_SRC is set, it checks for the presence of the files 'go.mod', 'Gopkg.toml', and +'glide.yaml' to determine how to install dependencies: if a 'Gopkg.toml' file is present, it uses +'dep ensure', if there is a 'glide.yaml' it uses 'glide install', and otherwise 'go get'. +Additionally, unless a 'go.mod' file is detected, it sets up a temporary GOPATH and moves all +source files into a folder corresponding to the package's import path before installing +dependencies. + +This behavior can be further customized using environment variables: setting LGTM_INDEX_NEED_GOPATH +to 'false' disables the GOPATH set-up, CODEQL_EXTRACTOR_GO_BUILD_COMMAND (or alternatively +LGTM_INDEX_BUILD_COMMAND), can be set to a newline-separated list of commands to run in order to +install dependencies, and LGTM_INDEX_IMPORT_PATH can be used to override the package import path, +which is otherwise inferred from the SEMMLE_REPO_URL or GITHUB_REPOSITORY environment variables. + +In resource-constrained environments, the environment variable CODEQL_EXTRACTOR_GO_MAX_GOROUTINES +(or its legacy alias SEMMLE_MAX_GOROUTINES) can be used to limit the number of parallel goroutines +started by the extractor, which reduces CPU and memory requirements. The default value for this +variable is 32. +`, + os.Args[0]) + fmt.Fprintf(os.Stderr, "Usage:\n\n %s\n", os.Args[0]) +} + +var goVersion = "" + +// Returns the current Go version as returned by 'go version', e.g. go1.14.4 +func getEnvGoVersion() string { + if goVersion == "" { + gover, err := exec.Command("go", "version").CombinedOutput() + if err != nil { + log.Fatalf("Unable to run the go command, is it installed?\nError: %s", err.Error()) + } + goVersion = strings.Fields(string(gover))[2] + } + return goVersion +} + +// Returns the current Go version in semver format, e.g. v1.14.4 +func getEnvGoSemVer() string { + goVersion := getEnvGoVersion() + if !strings.HasPrefix(goVersion, "go") { + log.Fatalf("Expected 'go version' output of the form 'go1.2.3'; got '%s'", goVersion) + } + return "v" + goVersion[2:] +} + +func tryBuild(buildFile, cmd string, args ...string) bool { + if util.FileExists(buildFile) { + log.Printf("%s found, running %s\n", buildFile, cmd) + return util.RunCmd(exec.Command(cmd, args...)) + } + return false +} + +func getImportPath() (importpath string) { + importpath = os.Getenv("LGTM_INDEX_IMPORT_PATH") + if importpath == "" { + repourl := os.Getenv("SEMMLE_REPO_URL") + if repourl == "" { + githubrepo := os.Getenv("GITHUB_REPOSITORY") + if githubrepo == "" { + log.Printf("Unable to determine import path, as neither LGTM_INDEX_IMPORT_PATH nor GITHUB_REPOSITORY is set\n") + return "" + } else { + importpath = "github.com/" + githubrepo + } + } else { + importpath = getImportPathFromRepoURL(repourl) + if importpath == "" { + log.Printf("Failed to determine import path from SEMMLE_REPO_URL '%s'\n", repourl) + return + } + } + } + log.Printf("Import path is '%s'\n", importpath) + return +} + +func getImportPathFromRepoURL(repourl string) string { + // check for scp-like URL as in "git@github.com:github/codeql-go.git" + shorturl := regexp.MustCompile("^([^@]+@)?([^:]+):([^/].*?)(\\.git)?$") + m := shorturl.FindStringSubmatch(repourl) + if m != nil { + return m[2] + "/" + m[3] + } + + // otherwise parse as proper URL + u, err := url.Parse(repourl) + if err != nil { + log.Fatalf("Malformed repository URL '%s'\n", repourl) + } + + if u.Scheme == "file" { + // we can't determine import paths from file paths + return "" + } + + if u.Hostname() == "" || u.Path == "" { + return "" + } + + host := u.Hostname() + path := u.Path + // strip off leading slashes and trailing `.git` if present + path = regexp.MustCompile("^/+|\\.git$").ReplaceAllString(path, "") + return host + "/" + path +} + +func restoreRepoLayout(fromDir string, dirEntries []string, scratchDirName string, toDir string) { + for _, dirEntry := range dirEntries { + if dirEntry != scratchDirName { + log.Printf("Restoring %s/%s to %s/%s.\n", fromDir, dirEntry, toDir, dirEntry) + err := os.Rename(filepath.Join(fromDir, dirEntry), filepath.Join(toDir, dirEntry)) + if err != nil { + log.Printf("Failed to move file/directory %s from directory %s to directory %s: %s\n", dirEntry, fromDir, toDir, err.Error()) + } + } + } +} + +// DependencyInstallerMode is an enum describing how dependencies should be installed +type DependencyInstallerMode int + +const ( + // GoGetNoModules represents dependency installation using `go get` without modules + GoGetNoModules DependencyInstallerMode = iota + // GoGetWithModules represents dependency installation using `go get` with modules + GoGetWithModules + // Dep represent dependency installation using `dep ensure` + Dep + // Glide represents dependency installation using `glide install` + Glide +) + +// ModMode corresponds to the possible values of the -mod flag for the Go compiler +type ModMode int + +const ( + ModUnset ModMode = iota + ModReadonly + ModMod + ModVendor +) + +func (m ModMode) argsForGoVersion(version string) []string { + switch m { + case ModUnset: + return []string{} + case ModReadonly: + return []string{"-mod=readonly"} + case ModMod: + if !semver.IsValid(version) { + log.Fatalf("Invalid Go semver: '%s'", version) + } + if semver.Compare(version, "v1.14") < 0 { + return []string{} // -mod=mod is the default behaviour for go <= 1.13, and is not accepted as an argument + } else { + return []string{"-mod=mod"} + } + case ModVendor: + return []string{"-mod=vendor"} + } + return nil +} + +// addVersionToMod add a go version directive, e.g. `go 1.14` to a `go.mod` file. +func addVersionToMod(goMod []byte, version string) bool { + cmd := exec.Command("go", "mod", "edit", "-go="+version) + return util.RunCmd(cmd) +} + +// checkVendor tests to see whether a vendor directory is inconsistent according to the go frontend +func checkVendor() bool { + vendorCheckCmd := exec.Command("go", "list", "-mod=vendor", "./...") + outp, err := vendorCheckCmd.CombinedOutput() + if err != nil { + badVendorRe := regexp.MustCompile(`(?m)^go: inconsistent vendoring in .*:$`) + return !badVendorRe.Match(outp) + } + + return true +} + +func main() { + if len(os.Args) > 1 { + usage() + os.Exit(2) + } + + log.Printf("Autobuilder was built with %s, environment has %s\n", runtime.Version(), getEnvGoVersion()) + + srcdir := os.Getenv("LGTM_SRC") + inLGTM := srcdir != "" + if inLGTM { + log.Printf("LGTM_SRC is %s\n", srcdir) + } else { + cwd, err := os.Getwd() + if err != nil { + log.Fatalln("Failed to get current working directory.") + } + log.Printf("LGTM_SRC is not set; defaulting to current working directory %s\n", cwd) + srcdir = cwd + } + + // 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 + depMode := GoGetNoModules + modMode := ModUnset + needGopath := true + if _, present := os.LookupEnv("GO111MODULE"); !present { + os.Setenv("GO111MODULE", "auto") + } + if util.FileExists("go.mod") { + depMode = GoGetWithModules + needGopath = false + log.Println("Found go.mod, enabling go modules") + } else if util.FileExists("Gopkg.toml") { + depMode = Dep + log.Println("Found Gopkg.toml, using dep instead of go get") + } else if util.FileExists("glide.yaml") { + depMode = Glide + log.Println("Found glide.yaml, enabling go modules") + } + + if depMode == GoGetWithModules { + // if a vendor/modules.txt file exists, we assume that there are vendored Go dependencies, and + // skip the dependency installation step and run the extractor with `-mod=vendor` + if util.FileExists("vendor/modules.txt") { + modMode = ModVendor + } else if util.DirExists("vendor") { + modMode = ModMod + } + } + + if modMode == ModVendor { + // fix go vendor issues with go versions >= 1.14 when no go version is specified in the go.mod + // if this is the case, and dependencies were vendored with an old go version (and therefore + // do not contain a '## explicit' annotation, the go command will fail and refuse to do any + // work + // + // we work around this by adding an explicit go version of 1.13, which is the last version + // where this is not an issue + if depMode == GoGetWithModules { + goMod, err := ioutil.ReadFile("go.mod") + if err != nil { + log.Println("Failed to read go.mod to check for missing Go version") + } else if versionRe := regexp.MustCompile(`(?m)^go[ \t\r]+[0-9]+\.[0-9]+$`); !versionRe.Match(goMod) { + // if the go.mod does not contain a version line + modulesTxt, err := ioutil.ReadFile("vendor/modules.txt") + if err != nil { + log.Println("Failed to read vendor/modules.txt to check for mismatched Go version") + } else if explicitRe := regexp.MustCompile("(?m)^## explicit$"); !explicitRe.Match(modulesTxt) { + // and the modules.txt does not contain an explicit annotation + log.Println("Adding a version directive to the go.mod file as the modules.txt does not have explicit annotations") + if !addVersionToMod(goMod, "1.13") { + log.Println("Failed to add a version to the go.mod file to fix explicitly required package bug; not using vendored dependencies") + modMode = ModMod + } + } + } + } + } + + // Go 1.16 and later won't automatically attempt to update go.mod / go.sum during package loading, so try to update them here: + if depMode == GoGetWithModules && semver.Compare(getEnvGoSemVer(), "1.16") >= 0 { + // stat go.mod and go.sum + beforeGoModFileInfo, beforeGoModErr := os.Stat("go.mod") + if beforeGoModErr != nil { + log.Println("Failed to stat go.mod before running `go mod tidy -e`") + } + + beforeGoSumFileInfo, beforeGoSumErr := os.Stat("go.sum") + + // run `go mod tidy -e` + res := util.RunCmd(exec.Command("go", "mod", "tidy", "-e")) + + if !res { + log.Println("Failed to run `go mod tidy -e`") + } else { + if beforeGoModFileInfo != nil { + afterGoModFileInfo, afterGoModErr := os.Stat("go.mod") + if afterGoModErr != nil { + log.Println("Failed to stat go.mod after running `go mod tidy -e`") + } else if afterGoModFileInfo.ModTime().After(beforeGoModFileInfo.ModTime()) { + // if go.mod has been changed then notify the user + log.Println("We have run `go mod tidy -e` and it altered go.mod. You may wish to check these changes into version control. ") + } + } + + afterGoSumFileInfo, afterGoSumErr := os.Stat("go.sum") + if afterGoSumErr != nil { + log.Println("Failed to stat go.sum after running `go mod tidy -e`") + } else { + if beforeGoSumErr != nil || afterGoSumFileInfo.ModTime().After(beforeGoSumFileInfo.ModTime()) { + // if go.sum has been changed then notify the user + log.Println("We have run `go mod tidy -e` and it altered go.sum. You may wish to check these changes into version control. ") + } + } + } + } + + // if `LGTM_INDEX_NEED_GOPATH` is set, it overrides the value for `needGopath` inferred above + if needGopathOverride := os.Getenv("LGTM_INDEX_NEED_GOPATH"); needGopathOverride != "" { + inLGTM = true + if needGopathOverride == "true" { + needGopath = true + } else if needGopathOverride == "false" { + needGopath = false + } else { + log.Fatalf("Unexpected value for Boolean environment variable LGTM_NEED_GOPATH: %v.\n", needGopathOverride) + } + } + + importpath := getImportPath() + if needGopath && importpath == "" { + log.Printf("Failed to determine import path, not setting up GOPATH") + needGopath = false + } + + if inLGTM && needGopath { + // a temporary directory where everything is moved while the correct + // directory structure is created. + scratch, err := ioutil.TempDir(srcdir, "scratch") + if err != nil { + log.Fatalf("Failed to create temporary directory %s in directory %s: %s\n", + scratch, srcdir, err.Error()) + } + log.Printf("Temporary directory is %s.\n", scratch) + + // move all files in `srcdir` to `scratch` + dir, err := os.Open(srcdir) + if err != nil { + log.Fatalf("Failed to open source directory %s for reading: %s\n", srcdir, err.Error()) + } + files, err := dir.Readdirnames(-1) + if err != nil { + log.Fatalf("Failed to read source directory %s: %s\n", srcdir, err.Error()) + } + for _, file := range files { + if file != filepath.Base(scratch) { + log.Printf("Moving %s/%s to %s/%s.\n", srcdir, file, scratch, file) + err := os.Rename(filepath.Join(srcdir, file), filepath.Join(scratch, file)) + if err != nil { + log.Fatalf("Failed to move file %s to the temporary directory: %s\n", file, err.Error()) + } + } + } + + // create a new folder which we will add to GOPATH below + // Note we evaluate all symlinks here for consistency: otherwise os.Chdir below + // will follow links but other references to the path may not, which can lead to + // disagreements between GOPATH and the working directory. + realSrc, err := filepath.EvalSymlinks(srcdir) + if err != nil { + log.Fatalf("Failed to evaluate symlinks in %s: %s\n", srcdir, err.Error()) + } + + root := filepath.Join(realSrc, "root") + + // move source files to where Go expects them to be + newdir := filepath.Join(root, "src", importpath) + err = os.MkdirAll(filepath.Dir(newdir), 0755) + if err != nil { + log.Fatalf("Failed to create directory %s: %s\n", newdir, err.Error()) + } + log.Printf("Moving %s to %s.\n", scratch, newdir) + err = os.Rename(scratch, newdir) + if err != nil { + log.Fatalf("Failed to rename %s to %s: %s\n", scratch, newdir, err.Error()) + } + + // schedule restoring the contents of newdir to their original location after this function completes: + defer restoreRepoLayout(newdir, files, filepath.Base(scratch), srcdir) + + err = os.Chdir(newdir) + if err != nil { + 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 + // match the original source location, not the location we moved it to + pt, err := ioutil.TempFile("", "path-transformer") + if err != nil { + log.Fatalf("Unable to create path transformer file: %s.", err.Error()) + } + defer os.Remove(pt.Name()) + _, err = pt.WriteString("#" + realSrc + "\n" + newdir + "//\n") + if err != nil { + log.Fatalf("Unable to write path transformer file: %s.", err.Error()) + } + err = pt.Close() + if err != nil { + log.Fatalf("Unable to close path transformer file: %s.", err.Error()) + } + err = os.Setenv("SEMMLE_PATH_TRANSFORMER", pt.Name()) + if err != nil { + log.Fatalf("Unable to set SEMMLE_PATH_TRANSFORMER environment variable: %s.\n", err.Error()) + } + + // set/extend GOPATH + oldGopath := os.Getenv("GOPATH") + var newGopath string + if oldGopath != "" { + newGopath = strings.Join( + []string{root, oldGopath}, + string(os.PathListSeparator), + ) + } else { + newGopath = root + } + err = os.Setenv("GOPATH", newGopath) + if err != nil { + log.Fatalf("Unable to set GOPATH to %s: %s\n", newGopath, err.Error()) + } + log.Printf("GOPATH set to %s.\n", newGopath) + } + + // check whether an explicit dependency installation command was provided + inst := util.Getenv("CODEQL_EXTRACTOR_GO_BUILD_COMMAND", "LGTM_INDEX_BUILD_COMMAND") + shouldInstallDependencies := false + if inst == "" { + // try to build the project + buildSucceeded := autobuilder.Autobuild() + + // Build failed or there are still dependency errors; we'll try to install dependencies + // ourselves + if !buildSucceeded { + log.Println("Build failed, continuing to install dependencies.") + + shouldInstallDependencies = true + } else if util.DepErrors("./...", modMode.argsForGoVersion(getEnvGoSemVer())...) { + log.Println("Dependencies are still not resolving after the build, continuing to install dependencies.") + + shouldInstallDependencies = true + } + } else { + // write custom build commands into a script, then run it + var ( + ext = "" + header = "" + footer = "" + ) + if runtime.GOOS == "windows" { + ext = ".cmd" + header = "@echo on\n@prompt +$S\n" + footer = "\nIF %ERRORLEVEL% NEQ 0 EXIT" + } else { + ext = ".sh" + header = "#! /bin/bash\nset -xe +u\n" + } + script, err := ioutil.TempFile("", "go-build-command-*"+ext) + if err != nil { + log.Fatalf("Unable to create temporary script holding custom build commands: %s\n", err.Error()) + } + defer os.Remove(script.Name()) + _, err = script.WriteString(header + inst + footer) + if err != nil { + log.Fatalf("Unable to write to temporary script holding custom build commands: %s\n", err.Error()) + } + err = script.Close() + if err != nil { + log.Fatalf("Unable to close temporary script holding custom build commands: %s\n", err.Error()) + } + os.Chmod(script.Name(), 0700) + log.Println("Installing dependencies using custom build command.") + util.RunCmd(exec.Command(script.Name())) + } + + if modMode == ModVendor { + // test if running `go` with -mod=vendor works, and if it doesn't, try to fallback to -mod=mod + // or not set if the go version < 1.14. Note we check this post-build in case the build brings + // the vendor directory up to date. + if !checkVendor() { + modMode = ModMod + log.Println("The vendor directory is not consistent with the go.mod; not using vendored dependencies.") + } + } + + if shouldInstallDependencies { + if modMode == ModVendor { + log.Printf("Skipping dependency installation because a Go vendor directory was found.") + } else { + // automatically determine command to install dependencies + var install *exec.Cmd + if depMode == Dep { + // set up the dep cache if SEMMLE_CACHE is set + cacheDir := os.Getenv("SEMMLE_CACHE") + if cacheDir != "" { + depCacheDir := filepath.Join(cacheDir, "go", "dep") + log.Printf("Attempting to create dep cache dir %s\n", depCacheDir) + err := os.MkdirAll(depCacheDir, 0755) + if err != nil { + log.Printf("Failed to create dep cache directory: %s\n", err.Error()) + } else { + log.Printf("Setting dep cache directory to %s\n", depCacheDir) + err = os.Setenv("DEPCACHEDIR", depCacheDir) + if err != nil { + log.Println("Failed to set dep cache directory") + } else { + err = os.Setenv("DEPCACHEAGE", "720h") // 30 days + if err != nil { + log.Println("Failed to set dep cache age") + } + } + } + } + + if util.FileExists("Gopkg.lock") { + // if Gopkg.lock exists, don't update it and only vendor dependencies + install = exec.Command("dep", "ensure", "-v", "-vendor-only") + } else { + install = exec.Command("dep", "ensure", "-v") + } + log.Println("Installing dependencies using `dep ensure`.") + } else if depMode == Glide { + install = exec.Command("glide", "install") + log.Println("Installing dependencies using `glide install`") + } else { + // explicitly set go module support + if depMode == GoGetWithModules { + os.Setenv("GO111MODULE", "on") + } else if depMode == GoGetNoModules { + os.Setenv("GO111MODULE", "off") + } + + // get dependencies + install = exec.Command("go", "get", "-v", "./...") + log.Println("Installing dependencies using `go get -v ./...`.") + } + util.RunCmd(install) + } + } + + // extract + extractor, err := util.GetExtractorPath() + if err != nil { + log.Fatalf("Could not determine path of extractor: %v.\n", err) + } + + cwd, err := os.Getwd() + if err != nil { + log.Fatalf("Unable to determine current directory: %s\n", err.Error()) + } + + extractorArgs := []string{} + if depMode == GoGetWithModules { + extractorArgs = append(extractorArgs, modMode.argsForGoVersion(getEnvGoSemVer())...) + } + extractorArgs = append(extractorArgs, "./...") + + log.Printf("Running extractor command '%s %v' from directory '%s'.\n", extractor, extractorArgs, cwd) + cmd := exec.Command(extractor, extractorArgs...) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err = cmd.Run() + if err != nil { + log.Fatalf("Extraction failed: %s\n", err.Error()) + } +} diff --git a/go/extractor/cli/go-autobuilder/go-autobuilder_test.go b/go/extractor/cli/go-autobuilder/go-autobuilder_test.go new file mode 100644 index 00000000000..f4e8405fe36 --- /dev/null +++ b/go/extractor/cli/go-autobuilder/go-autobuilder_test.go @@ -0,0 +1,22 @@ +package main + +import "testing" + +func TestGetImportPathFromRepoURL(t *testing.T) { + tests := map[string]string{ + "git@github.com:github/codeql-go.git": "github.com/github/codeql-go", + "git@github.com:github/codeql-go": "github.com/github/codeql-go", + "https://github.com/github/codeql-go.git": "github.com/github/codeql-go", + "https://github.com:12345/github/codeql-go": "github.com/github/codeql-go", + "gitolite@some.url:some/repo": "some.url/some/repo", + "file:///C:/some/path": "", + "https:///no/hostname": "", + "https://hostnameonly": "", + } + for input, expected := range tests { + actual := getImportPathFromRepoURL(input) + if actual != expected { + t.Errorf("Expected getImportPathFromRepoURL(\"%s\") to be \"%s\", but got \"%s\".", input, expected, actual) + } + } +} diff --git a/go/extractor/cli/go-bootstrap/go-bootstrap.go b/go/extractor/cli/go-bootstrap/go-bootstrap.go new file mode 100644 index 00000000000..603da2b8027 --- /dev/null +++ b/go/extractor/cli/go-bootstrap/go-bootstrap.go @@ -0,0 +1,54 @@ +package main + +import ( + "fmt" + "io/ioutil" + "log" + "os" + "regexp" +) + +// A utility program for generating `project` and `variable` files for SemmleCore Go projects +// +// This program should not normally be run directly; it is usually executed as part of +// `odasa bootstrap`, and expects two files as arguments: a (partial) `variables` file and +// an empty file to be filled in with an `` element containing build steps. +// +// The `variables` file is extended with a definition of `LGTM_SRC` and, if it defines the +// `repository` variable, `SEMMLE_REPO_URL`. The only build step is an invocation of the +// Go autobuilder. +func main() { + vars := os.Args[1] + buildSteps := os.Args[2] + + haveRepo := false + content, err := ioutil.ReadFile(vars) + if err != nil { + log.Fatal(err) + } + re := regexp.MustCompile(`(^|\n)repository=`) + haveRepo = re.Find(content) != nil + + additionalVars := "LGTM_SRC=${src}\n" + if haveRepo { + additionalVars += "SEMMLE_REPO_URL=${repository}\n" + } + content = append(content, []byte(additionalVars)...) + err = ioutil.WriteFile(vars, content, 0644) + if err != nil { + log.Fatal(err) + } + + export := "LGTM_SRC" + if haveRepo { + export += ",SEMMLE_REPO_URL" + } + content = []byte(fmt.Sprintf(` + ${semmle_dist}/language-packs/go/tools/platform/${semmle_platform}/bin/go-autobuilder + +`, export)) + err = ioutil.WriteFile(buildSteps, content, 0644) + if err != nil { + log.Fatal(err) + } +} diff --git a/go/extractor/cli/go-build-runner/go-build-runner.go b/go/extractor/cli/go-build-runner/go-build-runner.go new file mode 100644 index 00000000000..118de5caf2e --- /dev/null +++ b/go/extractor/cli/go-build-runner/go-build-runner.go @@ -0,0 +1,36 @@ +package main + +import ( + "github.com/github/codeql-go/extractor/util" + "log" + "os" + "os/exec" + "path/filepath" + "runtime" + + "github.com/github/codeql-go/extractor/autobuilder" +) + +func main() { + // check if a build command has successfully extracted something + autobuilder.CheckExtracted = true + if autobuilder.Autobuild() { + return + } + + // if the autobuilder fails, invoke the extractor manually + // we cannot simply call `go build` here, because the tracer is not able to trace calls made by + // this binary + log.Printf("No build commands succeeded, falling back to go build ./...") + + mypath, err := os.Executable() + if err != nil { + log.Fatalf("Could not determine path of extractor: %v.\n", err) + } + extractor := filepath.Join(filepath.Dir(mypath), "go-extractor") + if runtime.GOOS == "windows" { + extractor = extractor + ".exe" + } + + util.RunCmd(exec.Command(extractor, "./...")) +} diff --git a/go/extractor/cli/go-extractor/go-extractor.go b/go/extractor/cli/go-extractor/go-extractor.go new file mode 100644 index 00000000000..59ab35da4a9 --- /dev/null +++ b/go/extractor/cli/go-extractor/go-extractor.go @@ -0,0 +1,132 @@ +package main + +import ( + "fmt" + "log" + "os" + "runtime" + "runtime/pprof" + "strings" + + "github.com/github/codeql-go/extractor" +) + +var cpuprofile, memprofile string + +func usage() { + fmt.Fprintf(os.Stderr, "%s is a program for building a snapshot of a Go code base.\n\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "Usage:\n\n %s [...] [...] [--] ...\n\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "Flags:\n\n") + fmt.Fprintf(os.Stderr, "--help Print this help.\n") +} + +func parseFlags(args []string, mimic bool) ([]string, []string) { + i := 0 + buildFlags := []string{} + for ; i < len(args) && strings.HasPrefix(args[i], "-"); i++ { + if args[i] == "--" { + i++ + break + } + + if !mimic { + // we're not in mimic mode, try to parse our arguments + switch args[i] { + case "--help": + usage() + os.Exit(0) + case "--mimic": + if i+1 < len(args) { + i++ + compiler := args[i] + log.Printf("Compiler: %s", compiler) + if i+1 < len(args) { + i++ + command := args[i] + if command == "build" || command == "install" || command == "run" { + log.Printf("Intercepting build") + return parseFlags(args[i+1:], true) + } else { + log.Printf("Non-build command '%s'; skipping", strings.Join(args[1:], " ")) + os.Exit(0) + } + } else { + log.Printf("Non-build command '%s'; skipping", strings.Join(args[1:], " ")) + os.Exit(0) + } + } else { + log.Fatalf("--mimic requires an argument, e.g. --mimic go") + } + } + } + + // parse go build flags + switch args[i] { + // skip `-o output` and `-i`, if applicable + case "-o": + if i+1 < len(args) { + i++ + } + case "-i": + case "-p", "-asmflags", "-buildmode", "-compiler", "-gccgoflags", "-gcflags", "-installsuffix", + "-ldflags", "-mod", "-modfile", "-pkgdir", "-tags", "-toolexec", "-overlay": + if i+1 < len(args) { + buildFlags = append(buildFlags, args[i], args[i+1]) + i++ + } else { + buildFlags = append(buildFlags, args[i]) + } + default: + if strings.HasPrefix(args[i], "-") { + buildFlags = append(buildFlags, args[i]) + } else { + // stop parsing if the argument is not a flag (and so is positional) + break + } + } + } + + cpuprofile = os.Getenv("CODEQL_EXTRACTOR_GO_CPU_PROFILE") + memprofile = os.Getenv("CODEQL_EXTRACTOR_GO_MEM_PROFILE") + + return buildFlags, args[i:] +} + +func main() { + buildFlags, patterns := parseFlags(os.Args[1:], false) + + if cpuprofile != "" { + f, err := os.Create(cpuprofile) + if err != nil { + log.Fatalf("Unable to create CPU profile: %v.", err) + } + defer f.Close() + if err := pprof.StartCPUProfile(f); err != nil { + log.Fatalf("Unable to start CPU profile: %v.", err) + } + defer pprof.StopCPUProfile() + } + + if len(patterns) == 0 { + log.Println("No packages explicitly provided, adding '.'") + patterns = []string{"."} + } + + log.Printf("Build flags: '%s'; patterns: '%s'\n", strings.Join(buildFlags, " "), strings.Join(patterns, " ")) + err := extractor.ExtractWithFlags(buildFlags, patterns) + if err != nil { + log.Fatalf("Error running go tooling: %s\n", err.Error()) + } + + if memprofile != "" { + f, err := os.Create(memprofile) + if err != nil { + log.Fatalf("Unable to create memory profile: %v", err) + } + defer f.Close() + runtime.GC() // get up-to-date statistics + if err := pprof.WriteHeapProfile(f); err != nil { + log.Fatal("Unable to write memory profile: ", err) + } + } +} diff --git a/go/extractor/cli/go-gen-dbscheme/go-gen-dbscheme.go b/go/extractor/cli/go-gen-dbscheme/go-gen-dbscheme.go new file mode 100644 index 00000000000..94831c2b451 --- /dev/null +++ b/go/extractor/cli/go-gen-dbscheme/go-gen-dbscheme.go @@ -0,0 +1,31 @@ +package main + +import ( + "fmt" + "os" + + "github.com/github/codeql-go/extractor/dbscheme" +) + +func usage() { + fmt.Fprintf(os.Stderr, "%s is a program for generating the dbscheme for CodeQL Go databases.\n\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "Usage:\n\n %s \n\n", os.Args[0]) +} + +func main() { + if len(os.Args) != 2 { + usage() + os.Exit(2) + } + + out := os.Args[1] + + f, err := os.Create(out) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to open file %s for writing.\n", out) + os.Exit(1) + } + dbscheme.PrintDbScheme(f) + f.Close() + fmt.Printf("Dbscheme written to file %s.\n", out) +} diff --git a/go/extractor/cli/go-tokenizer/go-tokenizer.go b/go/extractor/cli/go-tokenizer/go-tokenizer.go new file mode 100644 index 00000000000..ec4a4057173 --- /dev/null +++ b/go/extractor/cli/go-tokenizer/go-tokenizer.go @@ -0,0 +1,57 @@ +package main + +import ( + "encoding/csv" + "flag" + "fmt" + "go/scanner" + "go/token" + "io/ioutil" + "log" + "os" + "strings" +) + +func main() { + flag.Parse() + + fs := token.NewFileSet() + csv := csv.NewWriter(os.Stdout) + defer csv.Flush() + + for _, fileName := range flag.Args() { + src, err := ioutil.ReadFile(fileName) + if err != nil { + log.Fatalf("Unable to read file %s.", fileName) + } + f := fs.AddFile(fileName, -1, len(src)) + + var s scanner.Scanner + s.Init(f, src, nil, 0) + for { + beginPos, tok, text := s.Scan() + + if strings.TrimSpace(text) != "" { + var fuzzyText string + if tok.IsLiteral() { + fuzzyText = tok.String() + } else { + fuzzyText = text + } + + endPos := f.Pos(f.Offset(beginPos) + len(text)) + beginLine := fmt.Sprintf("%d", f.Position(beginPos).Line) + beginColumn := fmt.Sprintf("%d", f.Position(beginPos).Column) + endLine := fmt.Sprintf("%d", f.Position(endPos).Line) + endColumn := fmt.Sprintf("%d", f.Position(endPos).Column) + err = csv.Write([]string{text, fuzzyText, beginLine, beginColumn, endLine, endColumn}) + if err != nil { + log.Fatalf("Unable to write CSV data: %v", err) + } + } + if tok == token.EOF { + break + } + } + } +} diff --git a/go/extractor/dbscheme/dbscheme.go b/go/extractor/dbscheme/dbscheme.go new file mode 100644 index 00000000000..923fda859db --- /dev/null +++ b/go/extractor/dbscheme/dbscheme.go @@ -0,0 +1,426 @@ +package dbscheme + +import ( + "fmt" + "io" + "log" + "reflect" + "strings" + + "github.com/github/codeql-go/extractor/trap" +) + +// A Type represents a database type +type Type interface { + def() string + ref() string + repr() string + valid(val interface{}) bool +} + +// A PrimitiveType represents a primitive dataase type +type PrimitiveType int + +const ( + // INT represents the primitive database type `int` + INT PrimitiveType = iota + // FLOAT represents the primitive database type `float` + FLOAT + // BOOLEAN represents the primitive database type `boolean` + BOOLEAN + // DATE represents the primitive database type `date` + DATE + // STRING represents the primitive database type `string` + STRING +) + +// A PrimaryKeyType represents a database type defined by a primary key column +type PrimaryKeyType struct { + name string +} + +// A UnionType represents a database type defined as the union of other database types +type UnionType struct { + name string + components []Type +} + +// An AliasType represents a database type which is an alias of another database type +type AliasType struct { + name string + underlying Type +} + +// A CaseType represents a database type defined by a primary key column with a supplementary kind column +type CaseType struct { + base Type + column string + branches []*BranchType +} + +// A BranchType represents one branch of a case type +type BranchType struct { + idx int + name string +} + +func (pt PrimitiveType) def() string { + return "" +} + +func (pt PrimitiveType) ref() string { + switch pt { + case INT: + return "int" + case FLOAT: + return "float" + case BOOLEAN: + return "boolean" + case DATE: + return "date" + case STRING: + return "string" + default: + panic(fmt.Sprintf("Unexpected primitive type %d", pt)) + } +} + +func (pt PrimitiveType) repr() string { + switch pt { + case INT: + return "int" + case FLOAT: + return "float" + case BOOLEAN: + return "boolean" + case DATE: + return "date" + case STRING: + return "string" + default: + panic(fmt.Sprintf("Unexpected primitive type %d", pt)) + } +} + +func (pt PrimitiveType) valid(value interface{}) bool { + switch value.(type) { + case int: + return pt == INT + case float64: + return pt == FLOAT + case bool: + return pt == BOOLEAN + case string: + return pt == STRING + } + return false +} + +func (pkt PrimaryKeyType) def() string { + return "" +} + +func (pkt PrimaryKeyType) ref() string { + return pkt.name +} + +func (pkt PrimaryKeyType) repr() string { + return "int" +} + +func (pkt PrimaryKeyType) valid(value interface{}) bool { + _, ok := value.(trap.Label) + return ok +} + +func (ut UnionType) def() string { + var b strings.Builder + nl := 0 + fmt.Fprintf(&b, "%s = ", ut.name) + for i, comp := range ut.components { + if i > 0 { + if i < len(ut.components)-1 && b.Len()-nl > 100 { + fmt.Fprintf(&b, "\n%s", strings.Repeat(" ", len(ut.name))) + nl = b.Len() + } + fmt.Fprint(&b, " | ") + } + fmt.Fprint(&b, comp.ref()) + } + fmt.Fprint(&b, ";") + return b.String() +} + +func (ut UnionType) ref() string { + return ut.name +} + +func (ut UnionType) repr() string { + return "int" +} + +func (ut UnionType) valid(value interface{}) bool { + _, ok := value.(trap.Label) + return ok +} + +func (at AliasType) def() string { + return at.name + " = " + at.underlying.ref() + ";" +} + +func (at AliasType) ref() string { + return at.name +} + +func (at AliasType) repr() string { + return at.underlying.repr() +} + +func (at AliasType) valid(value interface{}) bool { + return at.underlying.valid(value) +} + +func (ct CaseType) def() string { + var b strings.Builder + fmt.Fprintf(&b, "case %s.%s of", ct.base.ref(), ct.column) + sep := " " + for _, branch := range ct.branches { + fmt.Fprintf(&b, "\n%s%s", sep, branch.def()) + sep = "| " + } + fmt.Fprint(&b, ";") + return b.String() +} + +func (ct CaseType) ref() string { + panic("case types do not have a name") +} + +func (ct CaseType) repr() string { + return "int" +} + +func (ct CaseType) valid(value interface{}) bool { + _, ok := value.(trap.Label) + return ok +} + +func (bt BranchType) def() string { + return fmt.Sprintf("%d = %s", bt.idx, bt.name) +} + +func (bt BranchType) ref() string { + return bt.name +} + +func (bt BranchType) repr() string { + return "int" +} + +func (bt BranchType) valid(value interface{}) bool { + _, ok := value.(trap.Label) + return ok +} + +// Index returns the numeric index of this branch type +func (bt BranchType) Index() int { + return bt.idx +} + +// A Column represents a column in a database table +type Column struct { + columnName string + columnType Type + unique bool + ref bool +} + +func (col Column) String() string { + var b strings.Builder + if col.unique { + fmt.Fprint(&b, "unique ") + } + fmt.Fprintf(&b, "%s %s: %s", col.columnType.repr(), col.columnName, col.columnType.ref()) + if col.ref { + fmt.Fprint(&b, " ref") + } + return b.String() +} + +// Key returns a new column that is the same as this column, but has the `key` flag set to `true` +func (col Column) Key() Column { + return Column{col.columnName, col.columnType, true, false} +} + +// Unique returns a new column that is the same as this column, but has the `unique` flag set to `true` +func (col Column) Unique() Column { + return Column{col.columnName, col.columnType, true, col.ref} +} + +// EntityColumn constructs a column with name `columnName` holding entities of type `columnType` +func EntityColumn(columnType Type, columnName string) Column { + return Column{columnName, columnType, false, true} +} + +// StringColumn constructs a column with name `columnName` holding string values +func StringColumn(columnName string) Column { + return Column{columnName, STRING, false, true} +} + +// IntColumn constructs a column with name `columnName` holding integer values +func IntColumn(columnName string) Column { + return Column{columnName, INT, false, true} +} + +// FloatColumn constructs a column with name `columnName` holding floating point number values +func FloatColumn(columnName string) Column { + return Column{columnName, FLOAT, false, true} +} + +// A Table represents a database table +type Table struct { + name string + schema []Column + keysets [][]string +} + +// KeySet adds `keys` as a keyset to this table +func (tbl *Table) KeySet(keys ...string) *Table { + tbl.keysets = append(tbl.keysets, keys) + return tbl +} + +func (tbl Table) String() string { + var b strings.Builder + for _, keyset := range tbl.keysets { + fmt.Fprint(&b, "#keyset[") + sep := "" + for _, key := range keyset { + fmt.Fprintf(&b, "%s%s", sep, key) + sep = ", " + } + fmt.Fprint(&b, "]\n") + } + fmt.Fprint(&b, tbl.name) + fmt.Fprint(&b, "(") + nl := 0 + for i, column := range tbl.schema { + if i > 0 { + // wrap >100 char lines + if i < len(tbl.schema)-1 && b.Len()-nl > 100 { + fmt.Fprintf(&b, ",\n%s", strings.Repeat(" ", len(tbl.name)+1)) + nl = b.Len() + } else { + fmt.Fprint(&b, ", ") + } + } + fmt.Fprint(&b, column.String()) + } + fmt.Fprint(&b, ");") + return b.String() +} + +// Emit outputs a tuple of `values` for this table using trap writer `tw` +// and panicks if the tuple does not have the right schema +func (tbl Table) Emit(tw *trap.Writer, values ...interface{}) { + if ncol, nval := len(tbl.schema), len(values); ncol != nval { + log.Fatalf("wrong number of values for table %s; expected %d, but got %d", tbl.name, ncol, nval) + } + for i, col := range tbl.schema { + if !col.columnType.valid(values[i]) { + panic(fmt.Sprintf("Invalid value for column %d of table %s; expected a %s, but got %s which is a %s", i, tbl.name, col.columnType.ref(), values[i], reflect.TypeOf(values[i]))) + } + } + tw.Emit(tbl.name, values) +} + +var tables = []*Table{} +var types = []Type{} +var defaultSnippets = []string{} + +// NewTable constructs a new table with the given `name` and `columns` +func NewTable(name string, columns ...Column) *Table { + tbl := &Table{name, columns, [][]string{}} + tables = append(tables, tbl) + return tbl +} + +// NewPrimaryKeyType constructs a new primary key type with the given `name`, +// and adds it to the union types `parents` (if any) +func NewPrimaryKeyType(name string, parents ...*UnionType) *PrimaryKeyType { + tp := &PrimaryKeyType{name} + types = append(types, tp) + for _, parent := range parents { + parent.components = append(parent.components, tp) + } + return tp +} + +// NewUnionType constructs a new union type with the given `name`, +// and adds it to the union types `parents` (if any) +func NewUnionType(name string, parents ...*UnionType) *UnionType { + tp := &UnionType{name, []Type{}} + types = append(types, tp) + for _, parent := range parents { + parent.components = append(parent.components, tp) + } + return tp +} + +// AddChild adds the type with given `name` to the union type. +// This is useful if a type defined in a snippet should be a child of a type defined in Go. +func (parent *UnionType) AddChild(name string) bool { + tp := &PrimaryKeyType{name} + // don't add tp to types; it's expected that it's already in the db somehow. + parent.components = append(parent.components, tp) + return true +} + +// NewAliasType constructs a new alias type with the given `name` that aliases `underlying` +func NewAliasType(name string, underlying Type) *AliasType { + tp := &AliasType{name, underlying} + types = append(types, tp) + return tp +} + +// NewCaseType constructs a new case type on the given `base` type whose discriminator values +// come from `column` +func NewCaseType(base Type, column string) *CaseType { + tp := &CaseType{base, column, []*BranchType{}} + types = append(types, tp) + return tp +} + +// NewBranch adds a new branch with the given `name` to this case type +// and adds it to the union types `parents` (if any) +func (ct *CaseType) NewBranch(name string, parents ...*UnionType) *BranchType { + tp := &BranchType{len(ct.branches), name} + ct.branches = append(ct.branches, tp) + for _, parent := range parents { + parent.components = append(parent.components, tp) + } + return tp +} + +// AddDefaultSnippet adds the given text `snippet` to the schema of this database +func AddDefaultSnippet(snippet string) bool { + defaultSnippets = append(defaultSnippets, snippet) + return true +} + +// PrintDbScheme prints the schema of this database to the writer `w` +func PrintDbScheme(w io.Writer) { + fmt.Fprintf(w, "/** Auto-generated dbscheme; do not edit. */\n\n") + for _, snippet := range defaultSnippets { + fmt.Fprintf(w, "%s\n", snippet) + } + for _, table := range tables { + fmt.Fprintf(w, "%s\n\n", table.String()) + } + for _, tp := range types { + def := tp.def() + if def != "" { + fmt.Fprintf(w, "%s\n\n", def) + } + } +} diff --git a/go/extractor/dbscheme/tables.go b/go/extractor/dbscheme/tables.go new file mode 100644 index 00000000000..63332aa3b59 --- /dev/null +++ b/go/extractor/dbscheme/tables.go @@ -0,0 +1,1222 @@ +package dbscheme + +import ( + "go/ast" + "go/token" + gotypes "go/types" + + "golang.org/x/tools/go/packages" +) + +var defaultSnippet = AddDefaultSnippet(` +/** 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); +`) + +// Copied directly from the XML dbscheme +var xmlSnippet = AddDefaultSnippet(` +/* + * 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; +`) + +// Compiler diagnostic tables +var CompilationType = NewPrimaryKeyType("@compilation") + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * go build a.go b.go c.go + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +var CompilationsTable = NewTable("compilations", + EntityColumn(CompilationType, "id").Key(), + StringColumn("cwd"), +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * go build a.go b.go c.go + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--` + * 2 | a.go + * 3 | b.go + * 4 | c.go + */ +var CompilationArgsTable = NewTable("compilation_args", + EntityColumn(CompilationType, "id"), + IntColumn("num"), + StringColumn("arg"), +).KeySet("id", "num") + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * go build a.go b.go c.go + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | a.go + * 1 | b.go + * 2 | c.go + */ +var CompilationCompilingFilesTable = NewTable("compilation_compiling_files", + EntityColumn(CompilationType, "id"), + IntColumn("num"), + EntityColumn(FileType, "file"), +).KeySet("id", "num") + +type CompilationTypeKind int + +const ( + FRONTEND_CPU_SECONDS = iota + FRONTEND_ELAPSED_SECONDS + EXTRACTOR_CPU_SECONDS + EXTRACTOR_ELAPSED_SECONDS +) + +/** + * 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 + */ +var CompilationTimeTable = NewTable("compilation_time", + EntityColumn(CompilationType, "id"), + IntColumn("num"), + IntColumn("kind"), + FloatColumn("secs"), +).KeySet("id", "num", "kind") + +var DiagnosticType = NewPrimaryKeyType("@diagnostic") + +/** + * 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. + */ +var DiagnosticForTable = NewTable("diagnostic_for", + EntityColumn(DiagnosticType, "diagnostic").Unique(), + EntityColumn(CompilationType, "compilation"), + IntColumn("file_number"), + IntColumn("file_number_diagnostic_number"), +) + +/** + * 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`. + */ +var CompilationFinishedTable = NewTable("compilation_finished", + EntityColumn(CompilationType, "id").Unique(), + FloatColumn("cpu_seconds"), + FloatColumn("elapsed_seconds"), +) + +var DiagnosticsTable = NewTable("diagnostics", + EntityColumn(DiagnosticType, "id").Key(), + IntColumn("severity"), + StringColumn("error_tag"), + StringColumn("error_message"), + StringColumn("full_error_message"), + EntityColumn(LocationType, "location"), +) + +// ContainerType is the type of files and folders +var ContainerType = NewUnionType("@container") + +// LocatableType is the type of program entities that have locations +var LocatableType = NewUnionType("@locatable") + +// Adds xmllocatable as a locatable +var XmlLocatableAsLocatable = LocatableType.AddChild("@xmllocatable") + +// NodeType is the type of AST nodes +var NodeType = NewUnionType("@node", LocatableType) + +// DocumentableType is the type of AST nodes to which documentation can be attached +var DocumentableType = NewUnionType("@documentable", NodeType) + +// ExprParentType is the type of AST nodes that can have expressions as children +var ExprParentType = NewUnionType("@exprparent", NodeType) + +// ModExprParentType is the type of go.mod nodes that can have go.mod expressions as children +var ModExprParentType = NewUnionType("@modexprparent", NodeType) + +// FieldParentType is the type of AST nodes that can have fields as children +var FieldParentType = NewUnionType("@fieldparent", NodeType) + +// StmtParentType is the type of AST nodes that can have statements as children +var StmtParentType = NewUnionType("@stmtparent", NodeType) + +// DeclParentType is the type of AST nodes that can have declarations as children +var DeclParentType = NewUnionType("@declparent", NodeType) + +// TypeParamDeclParentType is the type of AST nodes that can have type parameter declarations as children +var TypeParamDeclParentType = NewUnionType("@typeparamdeclparent", NodeType) + +// FuncDefType is the type of AST nodes that define functions, that is, function +// declarations and function literals +var FuncDefType = NewUnionType("@funcdef", StmtParentType, ExprParentType) + +// ScopeNodeType is the type of AST nodes that may have a scope attached to them +var ScopeNodeType = NewUnionType("@scopenode", NodeType) + +// LocationDefaultType is the type of source locations +var LocationDefaultType = NewPrimaryKeyType("@location_default") + +// FileType is the type of file AST nodes +var FileType = NewPrimaryKeyType("@file", ContainerType, DocumentableType, ExprParentType, ModExprParentType, DeclParentType, ScopeNodeType) + +// FolderType is the type of folders +var FolderType = NewPrimaryKeyType("@folder", ContainerType) + +// CommentGroupType is the type of comment groups +var CommentGroupType = NewPrimaryKeyType("@comment_group", NodeType) + +// CommentType is the type of comments +var CommentType = NewPrimaryKeyType("@comment", NodeType) + +// ExprType is the type of expression AST nodes +var ExprType = NewPrimaryKeyType("@expr", ExprParentType) + +// FieldType is the type of field AST nodes +var FieldType = NewPrimaryKeyType("@field", DocumentableType, ExprParentType) + +// StmtType is the type of statement AST nodes +var StmtType = NewPrimaryKeyType("@stmt", ExprParentType, StmtParentType) + +// DeclType is the type of declaration AST nodes +var DeclType = NewPrimaryKeyType("@decl", ExprParentType, StmtParentType, FieldParentType) + +// TypeParamDeclType is the type of type parameter declaration AST nodes +var TypeParamDeclType = NewPrimaryKeyType("@typeparamdecl", DocumentableType, ExprParentType) + +// SpecType is the type of spec AST nodes +var SpecType = NewPrimaryKeyType("@spec", ExprParentType, DocumentableType) + +// TypeType is the type of types +var TypeType = NewPrimaryKeyType("@type") + +// LocationType is an alias for LocationDefaultType +var LocationType = NewAliasType("@location", LocationDefaultType) + +// SourceLineType is an alias for LocatableType +var SourceLineType = NewAliasType("@sourceline", LocatableType) + +// CommentKind is a case type for distinguishing different kinds of comments +var CommentKind = NewCaseType(CommentType, "kind") + +// SlashSlashComment is the type of single-line comments starting with a double slash +var SlashSlashComment = CommentKind.NewBranch("@slashslashcomment") + +// SlashStarComment is the type of block comments delimited by stars and slashes +var SlashStarComment = CommentKind.NewBranch("@slashstarcomment") + +// ExprKind is a case type for distinguishing different kinds of expression AST nodes +var ExprKind = NewCaseType(ExprType, "kind") + +// BadExpr is type of bad (that is, unparseable) expression AST nodes +var BadExpr = ExprKind.NewBranch("@badexpr") + +// IdentExpr is the type of identifier expression AST nodes +var IdentExpr = ExprKind.NewBranch("@ident") + +// EllipsisExpr is the type of ellipsis expression AST nodes +var EllipsisExpr = ExprKind.NewBranch("@ellipsis") + +// BasicLitExpr is the type of basic (that is, primitive) literal expression AST nodes +var BasicLitExpr = NewUnionType("@basiclit") + +// IntLitExpr is a case type for dishinguishing different kinds of literal expression AST nodes +var IntLitExpr = ExprKind.NewBranch("@intlit", BasicLitExpr) + +// FloatLitExpr is the type of floating-point literal expression AST nodes +var FloatLitExpr = ExprKind.NewBranch("@floatlit", BasicLitExpr) + +// ImagLitExpr is the type of imaginary literal expression AST nodes +var ImagLitExpr = ExprKind.NewBranch("@imaglit", BasicLitExpr) + +// CharLitExpr is the type of character literal expression AST nodes +var CharLitExpr = ExprKind.NewBranch("@charlit", BasicLitExpr) + +// StringLitExpr is the type of string literal expression AST nodes +var StringLitExpr = ExprKind.NewBranch("@stringlit", BasicLitExpr) + +// FuncLitExpr is the type of function literal expression AST nodes +var FuncLitExpr = ExprKind.NewBranch("@funclit", FuncDefType) + +// CompositeLitExpr is the type of composite literal expression AST nodes +var CompositeLitExpr = ExprKind.NewBranch("@compositelit") + +// ParenExpr is the type of parenthesis expression AST nodes +var ParenExpr = ExprKind.NewBranch("@parenexpr") + +// SelectorExpr is the type of selector expression AST nodes +var SelectorExpr = ExprKind.NewBranch("@selectorexpr") + +// IndexExpr is the type of AST nodes for index expressions and generic type +// instantiation expressions with one type argument. Note that syntactically +// unambiguous generic instantiations will be extracted as +// `GenericTypeInstantiationExpr`. +var IndexExpr = ExprKind.NewBranch("@indexexpr") + +// GenericFunctionInstantiationExpr is the type of AST nodes that represent an instantiation +// of a generic type. These correspond to some index expression AST nodes and all index +// list expression AST nodes. +var GenericFunctionInstantiationExpr = ExprKind.NewBranch("@genericfunctioninstantiationexpr") + +// GenericTypeInstantiationExpr is the type of AST nodes that represent an instantiation +// of a generic type. These correspond to some index expression AST nodes and all index +// list expression AST nodes. Note some syntactically ambiguous instantations are +// extracted as an `IndexExpr` to be disambiguated in QL later. +var GenericTypeInstantiationExpr = ExprKind.NewBranch("@generictypeinstantiationexpr") + +// SliceExpr is the type of slice expression AST nodes +var SliceExpr = ExprKind.NewBranch("@sliceexpr") + +// TypeAssertExpr is the type of type assertion expression AST nodes +var TypeAssertExpr = ExprKind.NewBranch("@typeassertexpr") + +// CallOrConversionExpr is the type of call and conversion expression AST nodes +// (which cannot be distinguished by purely syntactic criteria) +var CallOrConversionExpr = ExprKind.NewBranch("@callorconversionexpr") + +// StarExpr is the type of star expression AST nodes +var StarExpr = ExprKind.NewBranch("@starexpr") + +// OperatorExpr is the type of operator expression AST nodes +var OperatorExpr = NewUnionType("@operatorexpr") + +// LogicalExpr is the type of logical operator expression AST nodes +var LogicalExpr = NewUnionType("@logicalexpr", OperatorExpr) + +// ArithmeticExpr is the type of arithmetic operator expression AST nodes +var ArithmeticExpr = NewUnionType("@arithmeticexpr", OperatorExpr) + +// BitwiseExpr is the type of bitwise operator expression AST nodes +var BitwiseExpr = NewUnionType("@bitwiseexpr", OperatorExpr) + +// UnaryExpr is the type of unary operator expression AST nodes +var UnaryExpr = NewUnionType("@unaryexpr", OperatorExpr) + +// LogicalUnaryExpr is the type of logical unary operator expression AST nodes +var LogicalUnaryExpr = NewUnionType("@logicalunaryexpr", UnaryExpr, LogicalExpr) + +// BitwiseUnaryExpr is the type of bitwise unary operator expression AST nodes +var BitwiseUnaryExpr = NewUnionType("@bitwiseunaryexpr", UnaryExpr, BitwiseExpr) + +// ArithmeticUnaryExpr is the type of arithmetic unary operator expression AST nodes +var ArithmeticUnaryExpr = NewUnionType("@arithmeticunaryexpr", UnaryExpr, ArithmeticExpr) + +// BinaryExpr is the type of binary operator expression AST nodes +var BinaryExpr = NewUnionType("@binaryexpr", OperatorExpr) + +// LogicalBinaryExpr is the type of logical binary operator expression AST nodes +var LogicalBinaryExpr = NewUnionType("@logicalbinaryexpr", BinaryExpr, LogicalExpr) + +// BitwiseBinaryExpr is the type of bitwise binary operator expression AST nodes +var BitwiseBinaryExpr = NewUnionType("@bitwisebinaryexpr", BinaryExpr, BitwiseExpr) + +// ArithmeticBinaryExpr is the type of arithmetic binary operator expression AST nodes +var ArithmeticBinaryExpr = NewUnionType("@arithmeticbinaryexpr", BinaryExpr, ArithmeticExpr) + +// ShiftExpr is the type of shift operator expression AST nodes +var ShiftExpr = NewUnionType("@shiftexpr", BitwiseBinaryExpr) + +// Comparison is the type of comparison operator expression AST nodes +var Comparison = NewUnionType("@comparison", BinaryExpr) + +// EqualityTest is the type of equality operator expression AST nodes +var EqualityTest = NewUnionType("@equalitytest", Comparison) + +// RelationalComparison is the type of relational operator expression AST nodes +var RelationalComparison = NewUnionType("@relationalcomparison", Comparison) + +// KeyValueExpr is the type of key-value expression AST nodes +var KeyValueExpr = ExprKind.NewBranch("@keyvalueexpr") + +// ArrayTypeExpr is the type of array type AST nodes +var ArrayTypeExpr = ExprKind.NewBranch("@arraytypeexpr") + +// StructTypeExpr is the type of struct type AST nodes +var StructTypeExpr = ExprKind.NewBranch("@structtypeexpr", FieldParentType) + +// FuncTypeExpr is the type of function type AST nodes +var FuncTypeExpr = ExprKind.NewBranch("@functypeexpr", FieldParentType, ScopeNodeType) + +// InterfaceTypeExpr is the type of interface type AST nodes +var InterfaceTypeExpr = ExprKind.NewBranch("@interfacetypeexpr", FieldParentType) + +// MapTypeExpr is the type of map type AST nodes +var MapTypeExpr = ExprKind.NewBranch("@maptypeexpr") + +// TypeSetLiteralExpr is the type of type set literal type AST nodes +var TypeSetLiteralExpr = ExprKind.NewBranch("@typesetliteralexpr") + +// ChanTypeExpr is the type of channel type AST nodes +var ChanTypeExpr = NewUnionType("@chantypeexpr") + +// UnaryExprs is a map from unary operator tokens to the corresponding AST node type +var UnaryExprs = map[token.Token]*BranchType{ + token.ADD: ExprKind.NewBranch("@plusexpr", ArithmeticUnaryExpr), + token.SUB: ExprKind.NewBranch("@minusexpr", ArithmeticUnaryExpr), + token.NOT: ExprKind.NewBranch("@notexpr", LogicalUnaryExpr), + token.XOR: ExprKind.NewBranch("@complementexpr", BitwiseUnaryExpr), + token.MUL: ExprKind.NewBranch("@derefexpr", UnaryExpr), + token.AND: ExprKind.NewBranch("@addressexpr", UnaryExpr), + token.ARROW: ExprKind.NewBranch("@arrowexpr", UnaryExpr), +} + +// BinaryExprs is a map from binary operator tokens to the corresponding AST node type +var BinaryExprs = map[token.Token]*BranchType{ + token.LOR: ExprKind.NewBranch("@lorexpr", LogicalBinaryExpr), + token.LAND: ExprKind.NewBranch("@landexpr", LogicalBinaryExpr), + token.EQL: ExprKind.NewBranch("@eqlexpr", EqualityTest), + token.NEQ: ExprKind.NewBranch("@neqexpr", EqualityTest), + token.LSS: ExprKind.NewBranch("@lssexpr", RelationalComparison), + token.LEQ: ExprKind.NewBranch("@leqexpr", RelationalComparison), + token.GTR: ExprKind.NewBranch("@gtrexpr", RelationalComparison), + token.GEQ: ExprKind.NewBranch("@geqexpr", RelationalComparison), + token.ADD: ExprKind.NewBranch("@addexpr", ArithmeticBinaryExpr), + token.SUB: ExprKind.NewBranch("@subexpr", ArithmeticBinaryExpr), + token.OR: ExprKind.NewBranch("@orexpr", BitwiseBinaryExpr), + token.XOR: ExprKind.NewBranch("@xorexpr", BitwiseBinaryExpr), + token.MUL: ExprKind.NewBranch("@mulexpr", ArithmeticBinaryExpr), + token.QUO: ExprKind.NewBranch("@quoexpr", ArithmeticBinaryExpr), + token.REM: ExprKind.NewBranch("@remexpr", ArithmeticBinaryExpr), + token.SHL: ExprKind.NewBranch("@shlexpr", ShiftExpr), + token.SHR: ExprKind.NewBranch("@shrexpr", ShiftExpr), + token.AND: ExprKind.NewBranch("@andexpr", BitwiseBinaryExpr), + token.AND_NOT: ExprKind.NewBranch("@andnotexpr", BitwiseBinaryExpr), +} + +// ChanTypeExprs is a map from channel type expressions to the corresponding AST node type +var ChanTypeExprs = map[ast.ChanDir]*BranchType{ + ast.SEND: ExprKind.NewBranch("@sendchantypeexpr", ChanTypeExpr), + ast.RECV: ExprKind.NewBranch("@recvchantypeexpr", ChanTypeExpr), + ast.SEND | ast.RECV: ExprKind.NewBranch("@sendrcvchantypeexpr", ChanTypeExpr), +} + +// ErrorExpr is an AST node type that is not used anywhere +var ErrorExpr = ExprKind.NewBranch("@errorexpr") + +// StmtKind is a case type for distinguishing different kinds of statement AST nodes +var StmtKind = NewCaseType(StmtType, "kind") + +// BadStmtType is the type of bad (that is, unparseable) statement AST nodes +var BadStmtType = StmtKind.NewBranch("@badstmt") + +// DeclStmtType is the type of declaration statement AST nodes +var DeclStmtType = StmtKind.NewBranch("@declstmt", DeclParentType) + +// EmptyStmtType is the type of empty statement AST nodes +var EmptyStmtType = StmtKind.NewBranch("@emptystmt") + +// LabeledStmtType is the type of labeled statement AST nodes +var LabeledStmtType = StmtKind.NewBranch("@labeledstmt") + +// ExprStmtType is the type of expressio statemement AST nodes +var ExprStmtType = StmtKind.NewBranch("@exprstmt") + +// SendStmtType is the type of send statement AST nodes +var SendStmtType = StmtKind.NewBranch("@sendstmt") + +// IncDecStmtType is the type of increment/decrement statement AST nodes +var IncDecStmtType = NewUnionType("@incdecstmt") + +// IncStmtType is the type of increment statement AST nodes +var IncStmtType = StmtKind.NewBranch("@incstmt", IncDecStmtType) + +// DecStmtType is the type of decrement statement AST nodes +var DecStmtType = StmtKind.NewBranch("@decstmt", IncDecStmtType) + +// AssignmentType is the type of assignment statement AST nodes +var AssignmentType = NewUnionType("@assignment") + +// SimpleAssignStmtType is the type of simple (i.e., non-compound) assignment statement AST nodes +var SimpleAssignStmtType = NewUnionType("@simpleassignstmt", AssignmentType) + +// CompoundAssignStmtType is the type of compound assignment statement AST nodes +var CompoundAssignStmtType = NewUnionType("@compoundassignstmt", AssignmentType) + +// GoStmtType is the type of go statement AST nodes +var GoStmtType = StmtKind.NewBranch("@gostmt") + +// DeferStmtType is the type of defer statement AST nodes +var DeferStmtType = StmtKind.NewBranch("@deferstmt") + +// ReturnStmtType is the type of return statement AST nodes +var ReturnStmtType = StmtKind.NewBranch("@returnstmt") + +// BranchStmtType is the type of branch statement AST nodes +var BranchStmtType = NewUnionType("@branchstmt") + +// BreakStmtType is the type of break statement AST nodes +var BreakStmtType = StmtKind.NewBranch("@breakstmt", BranchStmtType) + +// ContinueStmtType is the type of continue statement AST nodes +var ContinueStmtType = StmtKind.NewBranch("@continuestmt", BranchStmtType) + +// GotoStmtType is the type of goto statement AST nodes +var GotoStmtType = StmtKind.NewBranch("@gotostmt", BranchStmtType) + +// FallthroughStmtType is the type of fallthrough statement AST nodes +var FallthroughStmtType = StmtKind.NewBranch("@fallthroughstmt", BranchStmtType) + +// BlockStmtType is the type of block statement AST nodes +var BlockStmtType = StmtKind.NewBranch("@blockstmt", ScopeNodeType) + +// IfStmtType is the type of if statement AST nodes +var IfStmtType = StmtKind.NewBranch("@ifstmt", ScopeNodeType) + +// CaseClauseType is the type of case clause AST nodes +var CaseClauseType = StmtKind.NewBranch("@caseclause", ScopeNodeType) + +// SwitchStmtType is the type of switch statement AST nodes, covering both expression switch and type switch +var SwitchStmtType = NewUnionType("@switchstmt", ScopeNodeType) + +// ExprSwitchStmtType is the type of expression-switch statement AST nodes +var ExprSwitchStmtType = StmtKind.NewBranch("@exprswitchstmt", SwitchStmtType) + +// TypeSwitchStmtType is the type of type-switch statement AST nodes +var TypeSwitchStmtType = StmtKind.NewBranch("@typeswitchstmt", SwitchStmtType) + +// CommClauseType is the type of comm clause AST ndoes +var CommClauseType = StmtKind.NewBranch("@commclause", ScopeNodeType) + +// SelectStmtType is the type of select statement AST nodes +var SelectStmtType = StmtKind.NewBranch("@selectstmt") + +// LoopStmtType is the type of loop statement AST nodes (including for statements and range statements) +var LoopStmtType = NewUnionType("@loopstmt", ScopeNodeType) + +// ForStmtType is the type of for statement AST nodes +var ForStmtType = StmtKind.NewBranch("@forstmt", LoopStmtType) + +// RangeStmtType is the type of range statement AST nodes +var RangeStmtType = StmtKind.NewBranch("@rangestmt", LoopStmtType) + +// AssignStmtTypes is a map from assignmnt operator tokens to corresponding AST node types +var AssignStmtTypes = map[token.Token]*BranchType{ + token.ASSIGN: StmtKind.NewBranch("@assignstmt", SimpleAssignStmtType), + token.DEFINE: StmtKind.NewBranch("@definestmt", SimpleAssignStmtType), + token.ADD_ASSIGN: StmtKind.NewBranch("@addassignstmt", CompoundAssignStmtType), + token.SUB_ASSIGN: StmtKind.NewBranch("@subassignstmt", CompoundAssignStmtType), + token.MUL_ASSIGN: StmtKind.NewBranch("@mulassignstmt", CompoundAssignStmtType), + token.QUO_ASSIGN: StmtKind.NewBranch("@quoassignstmt", CompoundAssignStmtType), + token.REM_ASSIGN: StmtKind.NewBranch("@remassignstmt", CompoundAssignStmtType), + token.AND_ASSIGN: StmtKind.NewBranch("@andassignstmt", CompoundAssignStmtType), + token.OR_ASSIGN: StmtKind.NewBranch("@orassignstmt", CompoundAssignStmtType), + token.XOR_ASSIGN: StmtKind.NewBranch("@xorassignstmt", CompoundAssignStmtType), + token.SHL_ASSIGN: StmtKind.NewBranch("@shlassignstmt", CompoundAssignStmtType), + token.SHR_ASSIGN: StmtKind.NewBranch("@shrassignstmt", CompoundAssignStmtType), + token.AND_NOT_ASSIGN: StmtKind.NewBranch("@andnotassignstmt", CompoundAssignStmtType), +} + +// DeclKind is a case type for distinguishing different kinds of declaration AST nodes +var DeclKind = NewCaseType(DeclType, "kind") + +// BadDeclType is the type of bad (that is, unparseable) declaration AST nodes +var BadDeclType = DeclKind.NewBranch("@baddecl") + +// GenDeclType is the type of generic declaration AST nodes +var GenDeclType = NewUnionType("@gendecl", DocumentableType) + +// ImportDeclType is the type of import declaration AST nodes +var ImportDeclType = DeclKind.NewBranch("@importdecl", GenDeclType) + +// ConstDeclType is the type of constant declaration AST nodes +var ConstDeclType = DeclKind.NewBranch("@constdecl", GenDeclType) + +// TypeDeclType is the type of type declaration AST nodes +var TypeDeclType = DeclKind.NewBranch("@typedecl", GenDeclType) + +// VarDeclType is the type of variable declaration AST nodes +var VarDeclType = DeclKind.NewBranch("@vardecl", GenDeclType) + +// FuncDeclType is the type of function declaration AST nodes +var FuncDeclType = DeclKind.NewBranch("@funcdecl", DocumentableType, FuncDefType, TypeParamDeclParentType) + +// SpecKind is a case type for distinguishing different kinds of declaration specification nodes +var SpecKind = NewCaseType(SpecType, "kind") + +// ImportSpecType is the type of import declaration specification nodes +var ImportSpecType = SpecKind.NewBranch("@importspec") + +// ValueSpecType is the type of value declaration specification nodes +var ValueSpecType = SpecKind.NewBranch("@valuespec") + +// TypeSpecType is the type of type declaration specification nodes +var TypeSpecType = NewUnionType("@typespec", TypeParamDeclParentType) + +// TypeDefSpecType is the type of type declaration specification nodes corresponding to type definitions +var TypeDefSpecType = SpecKind.NewBranch("@typedefspec", TypeSpecType) + +// AliasSpecType is the type of type declaration specification nodes corresponding to alias declarations +var AliasSpecType = SpecKind.NewBranch("@aliasspec", TypeSpecType) + +// ObjectType is the type of objects (that is, declared entities) +var ObjectType = NewPrimaryKeyType("@object") + +// ObjectKind is a case type for distinguishing different kinds of built-in and declared objects +var ObjectKind = NewCaseType(ObjectType, "kind") + +// TypeParamParentObjectType is the type of objects that can have type parameters as children +var TypeParamParentObjectType = NewUnionType("@typeparamparentobject") + +// DeclObjectType is the type of declared objects +var DeclObjectType = NewUnionType("@declobject") + +// BuiltinObjectType is the type of built-in objects +var BuiltinObjectType = NewUnionType("@builtinobject") + +// PkgObjectType is the type of imported packages +var PkgObjectType = ObjectKind.NewBranch("@pkgobject") + +// TypeObjectType is the type of declared or built-in named types +var TypeObjectType = NewUnionType("@typeobject") + +// DeclTypeObjectType is the type of declared named types +var DeclTypeObjectType = ObjectKind.NewBranch("@decltypeobject", TypeObjectType, DeclObjectType, TypeParamParentObjectType) + +// BuiltinTypeObjectType is the type of built-in named types +var BuiltinTypeObjectType = ObjectKind.NewBranch("@builtintypeobject", TypeObjectType, BuiltinObjectType) + +// ValueObjectType is the type of declared or built-in variables or constants +var ValueObjectType = NewUnionType("@valueobject") + +// ConstObjectType is the type of declared or built-in constants +var ConstObjectType = NewUnionType("@constobject", ValueObjectType) + +// DeclConstObjectType is the type of declared constants +var DeclConstObjectType = ObjectKind.NewBranch("@declconstobject", ConstObjectType, DeclObjectType) + +// BuiltinConstObjectType is the type of built-in constants +var BuiltinConstObjectType = ObjectKind.NewBranch("@builtinconstobject", ConstObjectType, BuiltinObjectType) + +// VarObjectType is the type of declared or built-in variables (the latter do not currently exist) +var VarObjectType = NewUnionType("@varobject", ValueObjectType) + +// DeclVarObjectType is the type of declared variables including function parameters, results and struct fields +var DeclVarObjectType = ObjectKind.NewBranch("@declvarobject", VarObjectType, DeclObjectType) + +// FunctionObjectType is the type of declared or built-in functions +var FunctionObjectType = NewUnionType("@functionobject", ValueObjectType) + +// DeclFuncObjectType is the type of declared functions, including (abstract and concrete) methods +var DeclFuncObjectType = ObjectKind.NewBranch("@declfunctionobject", FunctionObjectType, DeclObjectType, TypeParamParentObjectType) + +// BuiltinFuncObjectType is the type of built-in functions +var BuiltinFuncObjectType = ObjectKind.NewBranch("@builtinfunctionobject", FunctionObjectType, BuiltinObjectType) + +// LabelObjectType is the type of statement labels +var LabelObjectType = ObjectKind.NewBranch("@labelobject") + +// ScopeType is the type of scopes +var ScopeType = NewPrimaryKeyType("@scope") + +// ScopeKind is a case type for distinguishing different kinds of scopes +var ScopeKind = NewCaseType(ScopeType, "kind") + +// UniverseScopeType is the type of the universe scope +var UniverseScopeType = ScopeKind.NewBranch("@universescope") + +// PackageScopeType is the type of package scopes +var PackageScopeType = ScopeKind.NewBranch("@packagescope") + +// LocalScopeType is the type of local (that is, non-universe, non-package) scopes +var LocalScopeType = ScopeKind.NewBranch("@localscope", LocatableType) + +// TypeKind is a case type for distinguishing different kinds of types +var TypeKind = NewCaseType(TypeType, "kind") + +// BasicType is the union of all basic types +var BasicType = NewUnionType("@basictype") + +// BoolType is the union of the normal and literal bool types +var BoolType = NewUnionType("@booltype", BasicType) + +// NumericType is the union of numeric types +var NumericType = NewUnionType("@numerictype", BasicType) + +// IntegerType is the union of integer types +var IntegerType = NewUnionType("@integertype", NumericType) + +// SignedIntegerType is the union of signed integer types +var SignedIntegerType = NewUnionType("@signedintegertype", IntegerType) + +// UnsignedIntegerType is the union of unsigned integer types +var UnsignedIntegerType = NewUnionType("@unsignedintegertype", IntegerType) + +// FloatType is the union of floating-point types +var FloatType = NewUnionType("@floattype", NumericType) + +// ComplexType is the union of complex types +var ComplexType = NewUnionType("@complextype", NumericType) + +// StringType is the union of the normal and literal string types +var StringType = NewUnionType("@stringtype", BasicType) + +// LiteralType is the union of literal types +var LiteralType = NewUnionType("@literaltype", BasicType) + +// BasicTypes is a map from basic type kinds to the corresponding entity types +var BasicTypes = map[gotypes.BasicKind]*BranchType{ + gotypes.Invalid: TypeKind.NewBranch("@invalidtype", BasicType), + gotypes.Bool: TypeKind.NewBranch("@boolexprtype", BoolType), + gotypes.Int: TypeKind.NewBranch("@inttype", SignedIntegerType), + gotypes.Int8: TypeKind.NewBranch("@int8type", SignedIntegerType), + gotypes.Int16: TypeKind.NewBranch("@int16type", SignedIntegerType), + gotypes.Int32: TypeKind.NewBranch("@int32type", SignedIntegerType), + gotypes.Int64: TypeKind.NewBranch("@int64type", SignedIntegerType), + gotypes.Uint: TypeKind.NewBranch("@uinttype", UnsignedIntegerType), + gotypes.Uint8: TypeKind.NewBranch("@uint8type", UnsignedIntegerType), + gotypes.Uint16: TypeKind.NewBranch("@uint16type", UnsignedIntegerType), + gotypes.Uint32: TypeKind.NewBranch("@uint32type", UnsignedIntegerType), + gotypes.Uint64: TypeKind.NewBranch("@uint64type", UnsignedIntegerType), + gotypes.Uintptr: TypeKind.NewBranch("@uintptrtype", UnsignedIntegerType), + gotypes.Float32: TypeKind.NewBranch("@float32type", FloatType), + gotypes.Float64: TypeKind.NewBranch("@float64type", FloatType), + gotypes.Complex64: TypeKind.NewBranch("@complex64type", ComplexType), + gotypes.Complex128: TypeKind.NewBranch("@complex128type", ComplexType), + gotypes.String: TypeKind.NewBranch("@stringexprtype", StringType), + gotypes.UnsafePointer: TypeKind.NewBranch("@unsafepointertype", BasicType), + gotypes.UntypedBool: TypeKind.NewBranch("@boolliteraltype", LiteralType, BoolType), + gotypes.UntypedInt: TypeKind.NewBranch("@intliteraltype", LiteralType, SignedIntegerType), + gotypes.UntypedRune: TypeKind.NewBranch("@runeliteraltype", LiteralType, SignedIntegerType), + gotypes.UntypedFloat: TypeKind.NewBranch("@floatliteraltype", LiteralType, FloatType), + gotypes.UntypedComplex: TypeKind.NewBranch("@complexliteraltype", LiteralType, ComplexType), + gotypes.UntypedString: TypeKind.NewBranch("@stringliteraltype", LiteralType, StringType), + gotypes.UntypedNil: TypeKind.NewBranch("@nilliteraltype", LiteralType), +} + +// CompositeType is the type of all composite (that is, non-basic) types +var CompositeType = NewUnionType("@compositetype") + +// TypeParamType is the type of type parameter types +var TypeParamType = TypeKind.NewBranch("@typeparamtype", CompositeType) + +// ElementContainerType is the type of types that have elements, such as arrays +// and channels +var ElementContainerType = NewUnionType("@containertype", CompositeType) + +// ArrayType is the type of array types +var ArrayType = TypeKind.NewBranch("@arraytype", ElementContainerType) + +// SliceType is the type of slice types +var SliceType = TypeKind.NewBranch("@slicetype", ElementContainerType) + +// StructType is the type of struct types +var StructType = TypeKind.NewBranch("@structtype", CompositeType) + +// PointerType is the type of pointer types +var PointerType = TypeKind.NewBranch("@pointertype", CompositeType) + +// InterfaceType is the type of interface types +var InterfaceType = TypeKind.NewBranch("@interfacetype", CompositeType) + +// TupleType is the type of tuple types +var TupleType = TypeKind.NewBranch("@tupletype", CompositeType) + +// SignatureType is the type of signature types +var SignatureType = TypeKind.NewBranch("@signaturetype", CompositeType) + +// MapType is the type of map types +var MapType = TypeKind.NewBranch("@maptype", ElementContainerType) + +// ChanType is the type of channel types +var ChanType = NewUnionType("@chantype", ElementContainerType) + +// ChanTypes is a map from channel type directions to the corresponding type +var ChanTypes = map[gotypes.ChanDir]*BranchType{ + gotypes.SendOnly: TypeKind.NewBranch("@sendchantype", ChanType), + gotypes.RecvOnly: TypeKind.NewBranch("@recvchantype", ChanType), + gotypes.SendRecv: TypeKind.NewBranch("@sendrcvchantype", ChanType), +} + +// NamedType is the type of named types +var NamedType = TypeKind.NewBranch("@namedtype", CompositeType) + +// TypeSetLiteral is the type of type set literals +var TypeSetLiteral = TypeKind.NewBranch("@typesetliteraltype", CompositeType) + +// PackageType is the type of packages +var PackageType = NewPrimaryKeyType("@package") + +// ModExprType is the type of go.mod expression nodes +var ModExprType = NewPrimaryKeyType("@modexpr", ModExprParentType, DocumentableType) + +// ModExprKind is a case type for distinguishing different kinds of go.mod expression nodes +var ModExprKind = NewCaseType(ModExprType, "kind") + +// ModCommentBlockType is the type of go.mod comment block AST nodes +var ModCommentBlockType = ModExprKind.NewBranch("@modcommentblock") + +// ModLineType is the type of go.mod line AST nodes +var ModLineType = ModExprKind.NewBranch("@modline") + +// ModLineBlockType is the type of go.mod line block AST nodes +var ModLineBlockType = ModExprKind.NewBranch("@modlineblock") + +// ModLParenType is the type of go.mod line block start AST nodes +var ModLParenType = ModExprKind.NewBranch("@modlparen") + +// ModRParenType is the type of go.mod line block end AST nodes +var ModRParenType = ModExprKind.NewBranch("@modrparen") + +// ErrorType is the type of frontend errors +var ErrorType = NewPrimaryKeyType("@error") + +// ErrorKind is a case type for distinguishing different kinds of frontend errors +var ErrorKind = NewCaseType(ErrorType, "kind") + +// ErrorTypes is a map from error kinds to the corresponding type +var ErrorTypes = map[packages.ErrorKind]*BranchType{ + packages.UnknownError: ErrorKind.NewBranch("@unknownerror"), + packages.ListError: ErrorKind.NewBranch("@listerror"), + packages.ParseError: ErrorKind.NewBranch("@parseerror"), + packages.TypeError: ErrorKind.NewBranch("@typeerror"), +} + +// ErrorTypes is a map from error kinds to the corresponding tag +var ErrorTags = map[packages.ErrorKind]string{ + packages.UnknownError: "@unknownerror", + packages.ListError: "@listerror", + packages.ParseError: "@parseerror", + packages.TypeError: "@typeerror", +} + +// LocationsDefaultTable is the table defining location objects +var LocationsDefaultTable = NewTable("locations_default", + EntityColumn(LocationDefaultType, "id").Key(), + EntityColumn(FileType, "file"), + IntColumn("beginLine"), + IntColumn("beginColumn"), + IntColumn("endLine"), + IntColumn("endColumn"), +) + +// NumlinesTable is the table containing LoC information +var NumlinesTable = NewTable("numlines", + EntityColumn(SourceLineType, "element_id"), + IntColumn("num_lines"), + IntColumn("num_code"), + IntColumn("num_comment"), +) + +// FilesTable is the table defining file nodes +var FilesTable = NewTable("files", + EntityColumn(FileType, "id").Key(), + StringColumn("name"), +) + +// FoldersTable is the table defining folder entities +var FoldersTable = NewTable("folders", + EntityColumn(FolderType, "id").Key(), + StringColumn("name"), +) + +// ContainerParentTable is the table defining the parent-child relation among container entities +var ContainerParentTable = NewTable("containerparent", + EntityColumn(ContainerType, "parent"), + EntityColumn(ContainerType, "child").Unique(), +) + +// HasLocationTable is the table associating entities with their locations +var HasLocationTable = NewTable("has_location", + EntityColumn(LocatableType, "locatable").Unique(), + EntityColumn(LocationType, "location"), +) + +// CommentGroupsTable is the table defining comment group entities +var CommentGroupsTable = NewTable("comment_groups", + EntityColumn(CommentGroupType, "id").Key(), + EntityColumn(FileType, "parent"), + IntColumn("idx"), +).KeySet("parent", "idx") + +// CommentsTable is the table defining comment entities +var CommentsTable = NewTable("comments", + EntityColumn(CommentType, "id").Key(), + IntColumn("kind"), + EntityColumn(CommentGroupType, "parent"), + IntColumn("idx"), + StringColumn("text"), +) + +// DocCommentsTable is the table associating doc comments with the nodes they document +var DocCommentsTable = NewTable("doc_comments", + EntityColumn(DocumentableType, "node").Unique(), + EntityColumn(CommentGroupType, "comment"), +) + +// ExprsTable is the table defining expression AST nodes +var ExprsTable = NewTable("exprs", + EntityColumn(ExprType, "id").Key(), + IntColumn("kind"), + EntityColumn(ExprParentType, "parent"), + IntColumn("idx"), +).KeySet("parent", "idx") + +// LiteralsTable is the table associating literal expression AST nodes with their values +var LiteralsTable = NewTable("literals", + EntityColumn(ExprType, "expr").Unique(), + StringColumn("value"), + StringColumn("raw"), +) + +// ConstValuesTable is the table associating constant expressions with their values +var ConstValuesTable = NewTable("constvalues", + EntityColumn(ExprType, "expr").Unique(), + StringColumn("value"), + StringColumn("exact"), +) + +// FieldsTable is the table defining field AST nodes +var FieldsTable = NewTable("fields", + EntityColumn(FieldType, "id").Key(), + EntityColumn(FieldParentType, "parent"), + IntColumn("idx"), +) + +// TypeParamDeclsTable is the table defining type param declaration AST nodes +var TypeParamDeclsTable = NewTable("typeparamdecls", + EntityColumn(TypeParamDeclType, "id").Key(), + EntityColumn(TypeParamDeclParentType, "parent"), + IntColumn("idx"), +) + +// StmtsTable is the table defining statement AST nodes +var StmtsTable = NewTable("stmts", + EntityColumn(StmtType, "id").Key(), + IntColumn("kind"), + EntityColumn(StmtParentType, "parent"), + IntColumn("idx"), +).KeySet("parent", "idx") + +// DeclsTable is the table defining declaration AST nodes +var DeclsTable = NewTable("decls", + EntityColumn(DeclType, "id").Key(), + IntColumn("kind"), + EntityColumn(DeclParentType, "parent"), + IntColumn("idx"), +).KeySet("parent", "idx") + +// SpecsTable is the table defining declaration specification AST nodes +var SpecsTable = NewTable("specs", + EntityColumn(SpecType, "id").Key(), + IntColumn("kind"), + EntityColumn(GenDeclType, "parent"), + IntColumn("idx"), +).KeySet("parent", "idx") + +// ScopesTable is the table defining scopes +var ScopesTable = NewTable("scopes", + EntityColumn(ScopeType, "id").Key(), + IntColumn("kind"), +) + +// ScopeNestingTable is the table describing scope nesting +var ScopeNestingTable = NewTable("scopenesting", + EntityColumn(ScopeType, "inner").Unique(), + EntityColumn(ScopeType, "outer"), +) + +// ScopeNodesTable is the table associating local scopes with the AST nodes that induce them +var ScopeNodesTable = NewTable("scopenodes", + EntityColumn(ScopeNodeType, "node").Unique(), + EntityColumn(LocalScopeType, "scope"), +) + +// ObjectsTable is the table describing objects (that is, declared entities) +var ObjectsTable = NewTable("objects", + EntityColumn(ObjectType, "id").Key(), + IntColumn("kind"), + StringColumn("name"), +) + +// ObjectScopesTable is the table describing the scope to which an object belongs (if any) +var ObjectScopesTable = NewTable("objectscopes", + EntityColumn(ObjectType, "object").Unique(), + EntityColumn(ScopeType, "scope"), +) + +// ObjectTypesTable is the table describing the type of an object (if any) +var ObjectTypesTable = NewTable("objecttypes", + EntityColumn(ObjectType, "object").Unique(), + EntityColumn(TypeType, "tp"), +) + +// MethodReceiversTable maps methods to their receiver +var MethodReceiversTable = NewTable("methodreceivers", + EntityColumn(ObjectType, "method").Unique(), + EntityColumn(ObjectType, "receiver"), +) + +// FieldStructsTable maps fields to the structs they are in +var FieldStructsTable = NewTable("fieldstructs", + EntityColumn(ObjectType, "field").Unique(), + EntityColumn(StructType, "struct"), +) + +// MethodHostsTable maps interface methods to the named type they belong to +var MethodHostsTable = NewTable("methodhosts", + EntityColumn(ObjectType, "method"), + EntityColumn(NamedType, "host"), +) + +// DefsTable maps identifiers to the objects they define +var DefsTable = NewTable("defs", + EntityColumn(IdentExpr, "ident"), + EntityColumn(ObjectType, "object"), +) + +// UsesTable maps identifiers to the objects they denote +var UsesTable = NewTable("uses", + EntityColumn(IdentExpr, "ident"), + EntityColumn(ObjectType, "object"), +) + +// TypesTable is the table describing types +var TypesTable = NewTable("types", + EntityColumn(TypeType, "id").Key(), + IntColumn("kind"), +) + +// TypeOfTable is the table associating expressions with their types (if known) +var TypeOfTable = NewTable("type_of", + EntityColumn(ExprType, "expr").Unique(), + EntityColumn(TypeType, "tp"), +) + +// TypeNameTable is the table associating named types with their names +var TypeNameTable = NewTable("typename", + EntityColumn(TypeType, "tp").Unique(), + StringColumn("name"), +) + +// KeyTypeTable is the table associating maps with their key type +var KeyTypeTable = NewTable("key_type", + EntityColumn(MapType, "map").Unique(), + EntityColumn(TypeType, "tp"), +) + +// ElementTypeTable is the table associating container types with their element +// type +var ElementTypeTable = NewTable("element_type", + EntityColumn(ElementContainerType, "container").Unique(), + EntityColumn(TypeType, "tp"), +) + +// BaseTypeTable is the table associating pointer types with their base type +var BaseTypeTable = NewTable("base_type", + EntityColumn(PointerType, "ptr").Unique(), + EntityColumn(TypeType, "tp"), +) + +// UnderlyingTypeTable is the table associating named types with their +// underlying type +var UnderlyingTypeTable = NewTable("underlying_type", + EntityColumn(NamedType, "named").Unique(), + EntityColumn(TypeType, "tp"), +) + +// ComponentTypesTable is the table associating composite types with their component types +var ComponentTypesTable = NewTable("component_types", + EntityColumn(CompositeType, "parent"), + IntColumn("index"), + StringColumn("name"), + EntityColumn(TypeType, "tp"), +).KeySet("parent", "index") + +// ArrayLengthTable is the table associating array types with their length (represented as a string +// since Go array lengths are 64-bit and hence do not always fit into a QL integer) +var ArrayLengthTable = NewTable("array_length", + EntityColumn(ArrayType, "tp").Unique(), + StringColumn("len"), +) + +// TypeObjectTable maps types to their corresponding objects, if any +var TypeObjectTable = NewTable("type_objects", + EntityColumn(TypeType, "tp").Unique(), + EntityColumn(ObjectType, "object"), +) + +// PackagesTable is the table describing packages +var PackagesTable = NewTable("packages", + EntityColumn(PackageType, "id").Key(), + StringColumn("name"), + StringColumn("path"), + EntityColumn(PackageScopeType, "scope"), +) + +// ModExprsTable is the table defining expression AST nodes for go.mod files +var ModExprsTable = NewTable("modexprs", + EntityColumn(ModExprType, "id").Key(), + IntColumn("kind"), + EntityColumn(ModExprParentType, "parent"), + IntColumn("idx"), +).KeySet("parent", "idx") + +// ModTokensTable is the table associating go.mod tokens with their Line or LineBlock +var ModTokensTable = NewTable("modtokens", + StringColumn("token"), + EntityColumn(ModExprType, "parent"), + IntColumn("idx"), +).KeySet("parent", "idx") + +// ErrorsTable is the table describing frontend errors +var ErrorsTable = NewTable("errors", + EntityColumn(ErrorType, "id").Key(), + IntColumn("kind"), + StringColumn("msg"), + StringColumn("rawpos"), + StringColumn("file"), + IntColumn("line"), + IntColumn("col"), + EntityColumn(PackageType, "package"), + IntColumn("idx"), +).KeySet("package", "idx") + +// HasEllipsisTable is the table containing all call expressions that have ellipses +var HasEllipsisTable = NewTable("has_ellipsis", + EntityColumn(CallOrConversionExpr, "id"), +) + +// VariadicTable is the table describing which functions are variadic +var VariadicTable = NewTable("variadic", + EntityColumn(SignatureType, "id"), +) + +// TypeParamTable is the table describing type parameter types +var TypeParamTable = NewTable("typeparam", + EntityColumn(TypeParamType, "tp").Unique(), + StringColumn("name"), + EntityColumn(CompositeType, "bound"), + EntityColumn(TypeParamParentObjectType, "parent"), + IntColumn("idx"), +).KeySet("parent", "idx") diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go new file mode 100644 index 00000000000..1be2bfef224 --- /dev/null +++ b/go/extractor/extractor.go @@ -0,0 +1,2021 @@ +package extractor + +import ( + "crypto/md5" + "encoding/hex" + "fmt" + "go/ast" + "go/constant" + "go/scanner" + "go/token" + "go/types" + "io" + "io/ioutil" + "log" + "os" + "path/filepath" + "regexp" + "runtime" + "strconv" + "strings" + "sync" + "time" + + "github.com/github/codeql-go/extractor/dbscheme" + "github.com/github/codeql-go/extractor/srcarchive" + "github.com/github/codeql-go/extractor/trap" + "github.com/github/codeql-go/extractor/util" + "golang.org/x/tools/go/packages" +) + +var MaxGoRoutines int +var typeParamParent map[*types.TypeParam]types.Object = make(map[*types.TypeParam]types.Object) + +func init() { + // this sets the number of threads that the Go runtime will spawn; this is separate + // from the number of goroutines that the program spawns, which are scheduled into + // the system threads by the Go runtime scheduler + threads := os.Getenv("LGTM_THREADS") + if maxprocs, err := strconv.Atoi(threads); err == nil && maxprocs > 0 { + log.Printf("Max threads set to %d", maxprocs) + runtime.GOMAXPROCS(maxprocs) + } else if threads != "" { + log.Printf("Warning: LGTM_THREADS value %s is not valid, defaulting to using all available threads.", threads) + } + // if the value is empty or not set, use the Go default, which is the number of cores + // available since Go 1.5, but is subject to change + + var err error + if MaxGoRoutines, err = strconv.Atoi(util.Getenv( + "CODEQL_EXTRACTOR_GO_MAX_GOROUTINES", + "SEMMLE_MAX_GOROUTINES", + )); err != nil { + MaxGoRoutines = 32 + } else { + log.Printf("Max goroutines set to %d", MaxGoRoutines) + } +} + +// Extract extracts the packages specified by the given patterns +func Extract(patterns []string) error { + return ExtractWithFlags(nil, patterns) +} + +// ExtractWithFlags extracts the packages specified by the given patterns and build flags +func ExtractWithFlags(buildFlags []string, patterns []string) error { + startTime := time.Now() + + extraction := NewExtraction(buildFlags, patterns) + defer extraction.StatWriter.Close() + + modEnabled := os.Getenv("GO111MODULE") != "off" + if !modEnabled { + log.Println("Go module mode disabled.") + } + + modFlags := make([]string, 0, 1) + for _, flag := range buildFlags { + if strings.HasPrefix(flag, "-mod=") { + modFlags = append(modFlags, flag) + } + } + + log.Println("Running packages.Load.") + cfg := &packages.Config{ + Mode: packages.NeedName | packages.NeedFiles | + packages.NeedCompiledGoFiles | + packages.NeedImports | packages.NeedDeps | + packages.NeedTypes | packages.NeedTypesSizes | + packages.NeedTypesInfo | packages.NeedSyntax, + BuildFlags: buildFlags, + } + pkgs, err := packages.Load(cfg, patterns...) + if err != nil { + return err + } + log.Println("Done running packages.Load.") + + if len(pkgs) == 0 { + log.Println("No packages found.") + } + + log.Println("Extracting universe scope.") + extractUniverseScope() + log.Println("Done extracting universe scope.") + + // a map of package path to package root directory (currently the module root or the source directory) + pkgRoots := make(map[string]string) + // a map of package path to source code directory + pkgDirs := make(map[string]string) + // root directories of packages that we want to extract + wantedRoots := make(map[string]bool) + + // Do a post-order traversal and extract the package scope of each package + packages.Visit(pkgs, func(pkg *packages.Package) bool { + return true + }, func(pkg *packages.Package) { + log.Printf("Processing package %s.", pkg.PkgPath) + + if _, ok := pkgRoots[pkg.PkgPath]; !ok { + mdir := util.GetModDir(pkg.PkgPath, modFlags...) + pdir := util.GetPkgDir(pkg.PkgPath, modFlags...) + // GetModDir returns the empty string if the module directory cannot be determined, e.g. if the package + // is not using modules. If this is the case, fall back to the package directory + if mdir == "" { + mdir = pdir + } + pkgRoots[pkg.PkgPath] = mdir + pkgDirs[pkg.PkgPath] = pdir + } + + log.Printf("Extracting types for package %s.", pkg.PkgPath) + + tw, err := trap.NewWriter(pkg.PkgPath, pkg) + if err != nil { + log.Fatal(err) + } + defer tw.Close() + + scope := extractPackageScope(tw, pkg) + extractObjectTypes(tw) + lbl := tw.Labeler.GlobalID(util.EscapeTrapSpecialChars(pkg.PkgPath) + ";pkg") + dbscheme.PackagesTable.Emit(tw, lbl, pkg.Name, pkg.PkgPath, scope) + + if len(pkg.Errors) != 0 { + log.Printf("Warning: encountered errors extracting package `%s`:", pkg.PkgPath) + for i, err := range pkg.Errors { + log.Printf(" %s", err.Error()) + extraction.extractError(tw, err, lbl, i) + } + } + log.Printf("Done extracting types for package %s.", pkg.PkgPath) + }) + + for _, pkg := range pkgs { + if pkgRoots[pkg.PkgPath] == "" { + log.Fatalf("Unable to get a source directory for input package %s.", pkg.PkgPath) + } + wantedRoots[pkgRoots[pkg.PkgPath]] = true + wantedRoots[pkgDirs[pkg.PkgPath]] = true + } + + log.Println("Done processing dependencies.") + + log.Println("Starting to extract packages.") + + sep := regexp.QuoteMeta(string(filepath.Separator)) + // if a path matches this regexp, we don't want to extract this package. Currently, it checks + // - that the path does not contain a `..` segment, and + // - the path does not contain a `vendor` directory. + noExtractRe := regexp.MustCompile(`.*(^|` + sep + `)(\.\.|vendor)($|` + sep + `).*`) + + // extract AST information for all packages + packages.Visit(pkgs, func(pkg *packages.Package) bool { + return true + }, func(pkg *packages.Package) { + for root, _ := range wantedRoots { + relDir, err := filepath.Rel(root, pkgDirs[pkg.PkgPath]) + if err != nil || noExtractRe.MatchString(relDir) { + // if the path can't be made relative or matches the noExtract regexp skip it + continue + } + + extraction.extractPackage(pkg) + + if pkgRoots[pkg.PkgPath] != "" { + modPath := filepath.Join(pkgRoots[pkg.PkgPath], "go.mod") + if util.FileExists(modPath) { + log.Printf("Extracting %s", modPath) + start := time.Now() + + err := extraction.extractGoMod(modPath) + if err != nil { + log.Printf("Failed to extract go.mod: %s", err.Error()) + } + + end := time.Since(start) + log.Printf("Done extracting %s (%dms)", modPath, end.Nanoseconds()/1000000) + } + } + + return + } + + log.Printf("Skipping dependency package %s.", pkg.PkgPath) + }) + + extraction.WaitGroup.Wait() + + log.Println("Done extracting packages.") + + t := time.Now() + elapsed := t.Sub(startTime) + dbscheme.CompilationFinishedTable.Emit(extraction.StatWriter, extraction.Label, 0.0, elapsed.Seconds()) + + return nil +} + +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 +} + +type FileInfo struct { + Idx int + NextErr int +} + +func (extraction *Extraction) SeenFile(path string) bool { + _, ok := extraction.FileInfo[path] + return ok +} + +func (extraction *Extraction) GetFileInfo(path string) *FileInfo { + if fileInfo, ok := extraction.FileInfo[path]; ok { + return fileInfo + } + + extraction.FileInfo[path] = &FileInfo{extraction.NextFileId, 0} + extraction.NextFileId += 1 + + return extraction.FileInfo[path] +} + +func (extraction *Extraction) GetFileIdx(path string) int { + return extraction.GetFileInfo(path).Idx +} + +func (extraction *Extraction) GetNextErr(path string) int { + finfo := extraction.GetFileInfo(path) + res := finfo.NextErr + finfo.NextErr += 1 + return res +} + +func NewExtraction(buildFlags []string, patterns []string) *Extraction { + hash := md5.New() + io.WriteString(hash, "go") + for _, buildFlag := range buildFlags { + io.WriteString(hash, " "+buildFlag) + } + io.WriteString(hash, " --") + for _, pattern := range patterns { + io.WriteString(hash, " "+pattern) + } + sum := hash.Sum(nil) + + i := 0 + var path string + // split compilation files into directories to avoid filling a single directory with too many files + pathFmt := fmt.Sprintf("compilations/%s/%s_%%d", hex.EncodeToString(sum[:1]), hex.EncodeToString(sum[1:])) + for { + path = fmt.Sprintf(pathFmt, i) + file, err := trap.FileFor(path) + if err != nil { + log.Fatalf("Error creating trap file: %s\n", err.Error()) + } + i++ + + if !util.FileExists(file) { + break + } + } + + statWriter, err := trap.NewWriter(path, nil) + if err != nil { + log.Fatal(err) + } + lblKey := fmt.Sprintf("%s_%d;compilation", hex.EncodeToString(sum), i) + lbl := statWriter.Labeler.GlobalID(lblKey) + + wd, err := os.Getwd() + if err != nil { + log.Fatalf("Unable to determine current directory: %s\n", err.Error()) + } + + dbscheme.CompilationsTable.Emit(statWriter, lbl, wd) + i = 0 + extractorPath, err := util.GetExtractorPath() + if err != nil { + log.Fatalf("Unable to get extractor path: %s\n", err.Error()) + } + dbscheme.CompilationArgsTable.Emit(statWriter, lbl, 0, extractorPath) + i++ + for _, flag := range buildFlags { + dbscheme.CompilationArgsTable.Emit(statWriter, lbl, i, flag) + i++ + } + // emit a fake "--" argument to make it clear that what comes after it are patterns + dbscheme.CompilationArgsTable.Emit(statWriter, lbl, i, "--") + i++ + for _, pattern := range patterns { + dbscheme.CompilationArgsTable.Emit(statWriter, lbl, i, pattern) + i++ + } + + return &Extraction{ + LabelKey: lblKey, + Label: lbl, + StatWriter: statWriter, + // this semaphore is used to limit the number of files that are open at once; + // this is to prevent the extractor from running into issues with caps on the + // number of open files that can be held by one process + 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), + } +} + +// extractUniverseScope extracts symbol table information for the universe scope +func extractUniverseScope() { + tw, err := trap.NewWriter("universe", nil) + if err != nil { + log.Fatal(err) + } + defer tw.Close() + + lbl := tw.Labeler.ScopeID(types.Universe, nil) + dbscheme.ScopesTable.Emit(tw, lbl, dbscheme.UniverseScopeType.Index()) + extractObjects(tw, types.Universe, lbl) + + // Always extract an empty interface type + extractType(tw, types.NewInterfaceType([]*types.Func{}, []types.Type{})) +} + +// extractObjects extracts all objects declared in the given scope +func extractObjects(tw *trap.Writer, scope *types.Scope, scopeLabel trap.Label) { + for _, name := range scope.Names() { + obj := scope.Lookup(name) + lbl, exists := tw.Labeler.ScopedObjectID(obj, func() trap.Label { return extractType(tw, obj.Type()) }) + if !exists { + // Populate type parameter parents for functions. Note that methods + // do not appear as objects in any scope, so they have to be dealt + // with separately in extractMethods. + if funcObj, ok := obj.(*types.Func); ok { + populateTypeParamParents(tw, funcObj.Type().(*types.Signature).TypeParams(), obj) + populateTypeParamParents(tw, funcObj.Type().(*types.Signature).RecvTypeParams(), obj) + } + // Populate type parameter parents for named types. Note that we + // skip type aliases as the original type should be the parent + // of any type parameters. + if typeNameObj, ok := obj.(*types.TypeName); ok && !typeNameObj.IsAlias() { + if tp, ok := typeNameObj.Type().(*types.Named); ok { + populateTypeParamParents(tw, tp.TypeParams(), obj) + } + } + extractObject(tw, obj, lbl) + } + + if obj.Parent() != scope { + // this can happen if a scope is embedded into another with a `.` import. + continue + } + dbscheme.ObjectScopesTable.Emit(tw, lbl, scopeLabel) + } +} + +// extractMethod extracts a method `meth` and emits it to the objects table, then returns its label +func extractMethod(tw *trap.Writer, meth *types.Func) trap.Label { + // get the receiver type of the method + recvtyp := meth.Type().(*types.Signature).Recv().Type() + // ensure receiver type has been extracted + recvtyplbl := extractType(tw, recvtyp) + + // if the method label does not exist, extract it + methlbl, exists := tw.Labeler.MethodID(meth, recvtyplbl) + if !exists { + // Populate type parameter parents for methods. They do not appear as + // objects in any scope, so they have to be dealt with separately here. + populateTypeParamParents(tw, meth.Type().(*types.Signature).TypeParams(), meth) + populateTypeParamParents(tw, meth.Type().(*types.Signature).RecvTypeParams(), meth) + extractObject(tw, meth, methlbl) + } + + return methlbl +} + +// extractObject extracts a single object and emits it to the objects table. +func extractObject(tw *trap.Writer, obj types.Object, lbl trap.Label) { + name := obj.Name() + isBuiltin := obj.Parent() == types.Universe + var kind int + switch obj.(type) { + case *types.PkgName: + kind = dbscheme.PkgObjectType.Index() + case *types.TypeName: + if isBuiltin { + kind = dbscheme.BuiltinTypeObjectType.Index() + } else { + kind = dbscheme.DeclTypeObjectType.Index() + } + case *types.Const: + if isBuiltin { + kind = dbscheme.BuiltinConstObjectType.Index() + } else { + kind = dbscheme.DeclConstObjectType.Index() + } + case *types.Nil: + kind = dbscheme.BuiltinConstObjectType.Index() + case *types.Var: + kind = dbscheme.DeclVarObjectType.Index() + case *types.Builtin: + kind = dbscheme.BuiltinFuncObjectType.Index() + case *types.Func: + kind = dbscheme.DeclFuncObjectType.Index() + case *types.Label: + kind = dbscheme.LabelObjectType.Index() + default: + log.Fatalf("unknown object of type %T", obj) + } + dbscheme.ObjectsTable.Emit(tw, lbl, kind, name) + + // for methods, additionally extract information about the receiver + if sig, ok := obj.Type().(*types.Signature); ok { + if recv := sig.Recv(); recv != nil { + recvlbl, exists := tw.Labeler.ReceiverObjectID(recv, lbl) + if !exists { + extractObject(tw, recv, recvlbl) + } + dbscheme.MethodReceiversTable.Emit(tw, lbl, recvlbl) + } + } +} + +// extractObjectTypes extracts type and receiver information for all objects +func extractObjectTypes(tw *trap.Writer) { + // calling `extractType` on a named type will extract all methods defined + // on it, which will add new objects. Therefore we need to do this first + // before we loops over all objects and emit them. + changed := true + for changed { + changed = tw.ForEachObject(extractObjectType) + } + changed = tw.ForEachObject(emitObjectType) + if changed { + log.Printf("Warning: more objects were labeled while emitted object types") + } +} + +// extractObjectType extracts type and receiver information for a given object +func extractObjectType(tw *trap.Writer, obj types.Object, lbl trap.Label) { + if tp := obj.Type(); tp != nil { + extractType(tw, tp) + } +} + +// emitObjectType emits the type information for a given object +func emitObjectType(tw *trap.Writer, obj types.Object, lbl trap.Label) { + if tp := obj.Type(); tp != nil { + dbscheme.ObjectTypesTable.Emit(tw, lbl, extractType(tw, tp)) + } +} + +var ( + // file:line:col + threePartPos = regexp.MustCompile(`^(.+):(\d+):(\d+)$`) + // file:line + twoPartPos = regexp.MustCompile(`^(.+):(\d+)$`) +) + +// extractError extracts the message and location of a frontend error +func (extraction *Extraction) extractError(tw *trap.Writer, err packages.Error, pkglbl trap.Label, idx int) { + var ( + lbl = tw.Labeler.FreshID() + tag = dbscheme.ErrorTags[err.Kind] + kind = dbscheme.ErrorTypes[err.Kind].Index() + pos = err.Pos + file = "" + line, col int + e error + ) + + if pos == "" || pos == "-" { + // extract a dummy file + wd, e := os.Getwd() + if e != nil { + wd = "." + log.Printf("Warning: failed to get working directory") + } + ewd, e := filepath.EvalSymlinks(wd) + if e != nil { + ewd = wd + log.Printf("Warning: failed to evaluate symlinks for %s", wd) + } + file = filepath.Join(ewd, "-") + } else { + var rawfile string + if parts := threePartPos.FindStringSubmatch(pos); parts != nil { + // "file:line:col" + col, e = strconv.Atoi(parts[3]) + if e != nil { + log.Printf("Warning: malformed column number `%s`: %v", parts[3], e) + } + line, e = strconv.Atoi(parts[2]) + if e != nil { + log.Printf("Warning: malformed line number `%s`: %v", parts[2], e) + } + rawfile = parts[1] + } else if parts := twoPartPos.FindStringSubmatch(pos); parts != nil { + // "file:line" + line, e = strconv.Atoi(parts[2]) + if e != nil { + log.Printf("Warning: malformed line number `%s`: %v", parts[2], e) + } + rawfile = parts[1] + } else if pos != "" && pos != "-" { + log.Printf("Warning: malformed error position `%s`", pos) + } + afile, e := filepath.Abs(rawfile) + if e != nil { + log.Printf("Warning: failed to get absolute path for for %s", file) + afile = file + } + file, e = filepath.EvalSymlinks(afile) + if e != nil { + log.Printf("Warning: failed to evaluate symlinks for %s", afile) + file = afile + } + + extraction.extractFileInfo(tw, file) + } + + extraction.Lock.Lock() + flbl := extraction.StatWriter.Labeler.FileLabelFor(file) + diagLbl := extraction.StatWriter.Labeler.FreshID() + dbscheme.DiagnosticsTable.Emit( + extraction.StatWriter, diagLbl, 1, tag, err.Msg, err.Msg, + emitLocation(extraction.StatWriter, flbl, line, col, line, col)) + dbscheme.DiagnosticForTable.Emit(extraction.StatWriter, diagLbl, extraction.Label, extraction.GetFileIdx(file), extraction.GetNextErr(file)) + extraction.Lock.Unlock() + transformed := filepath.ToSlash(srcarchive.TransformPath(file)) + dbscheme.ErrorsTable.Emit(tw, lbl, kind, err.Msg, pos, transformed, line, col, pkglbl, idx) +} + +// extractPackage extracts AST information for all files in the given package +func (extraction *Extraction) extractPackage(pkg *packages.Package) { + for _, astFile := range pkg.Syntax { + extraction.WaitGroup.Add(1) + extraction.GoroutineSem.acquire(1) + go func(astFile *ast.File) { + err := extraction.extractFile(astFile, pkg) + if err != nil { + log.Fatal(err) + } + extraction.GoroutineSem.release(1) + extraction.WaitGroup.Done() + }(astFile) + } +} + +// normalizedPath computes the normalized path (with symlinks resolved) for the given file +func normalizedPath(ast *ast.File, fset *token.FileSet) string { + file := fset.File(ast.Package).Name() + path, err := filepath.EvalSymlinks(file) + if err != nil { + return file + } + return path +} + +// extractFile extracts AST information for the given file +func (extraction *Extraction) extractFile(ast *ast.File, pkg *packages.Package) error { + fset := pkg.Fset + if ast.Package == token.NoPos { + log.Printf("Skipping extracting a file without a 'package' declaration") + return nil + } + path := normalizedPath(ast, fset) + + extraction.FdSem.acquire(3) + + log.Printf("Extracting %s", path) + start := time.Now() + + defer extraction.FdSem.release(1) + tw, err := trap.NewWriter(path, pkg) + if err != nil { + extraction.FdSem.release(2) + return err + } + defer tw.Close() + + err = srcarchive.Add(path) + extraction.FdSem.release(2) + if err != nil { + return err + } + + extraction.extractFileInfo(tw, path) + + extractScopes(tw, ast, pkg) + + extractFileNode(tw, ast) + + extractObjectTypes(tw) + + extractNumLines(tw, path, ast) + + end := time.Since(start) + log.Printf("Done extracting %s (%dms)", path, end.Nanoseconds()/1000000) + + return nil +} + +// extractFileInfo extracts file-system level information for the given file, populating +// the `files` and `containerparent` tables +func (extraction *Extraction) extractFileInfo(tw *trap.Writer, file string) { + // We may visit the same file twice because `extractError` calls this function to describe files containing + // compilation errors. It is also called for user source files being extracted. + extraction.Lock.Lock() + if extraction.SeenFile(file) { + extraction.Lock.Unlock() + return + } + extraction.Lock.Unlock() + + path := filepath.ToSlash(srcarchive.TransformPath(file)) + components := strings.Split(path, "/") + parentPath := "" + var parentLbl trap.Label + + for i, component := range components { + if i == 0 { + if component == "" { + path = "/" + } else { + path = component + } + } else { + path = parentPath + "/" + component + } + if i == len(components)-1 { + lbl := tw.Labeler.FileLabelFor(file) + dbscheme.FilesTable.Emit(tw, lbl, path) + 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) + dbscheme.CompilationCompilingFilesTable.Emit(extraction.StatWriter, extraction.Label, extraction.GetFileIdx(file), slbl) + extraction.Lock.Unlock() + break + } + lbl := tw.Labeler.GlobalID(util.EscapeTrapSpecialChars(path) + ";folder") + dbscheme.FoldersTable.Emit(tw, lbl, path) + if i > 0 { + dbscheme.ContainerParentTable.Emit(tw, parentLbl, lbl) + } + if path != "/" { + parentPath = path + } + parentLbl = lbl + } +} + +// extractLocation emits a location entity for the given entity +func extractLocation(tw *trap.Writer, entity trap.Label, sl int, sc int, el int, ec int) { + filelbl := tw.Labeler.FileLabel() + dbscheme.HasLocationTable.Emit(tw, entity, emitLocation(tw, filelbl, sl, sc, el, ec)) +} + +// emitLocation emits a location entity +func emitLocation(tw *trap.Writer, filelbl trap.Label, sl int, sc int, el int, ec int) trap.Label { + locLbl := tw.Labeler.GlobalID(fmt.Sprintf("loc,{%s},%d,%d,%d,%d", filelbl, sl, sc, el, ec)) + dbscheme.LocationsDefaultTable.Emit(tw, locLbl, filelbl, sl, sc, el, ec) + + return locLbl +} + +// extractNodeLocation extracts location information for the given node +func extractNodeLocation(tw *trap.Writer, nd ast.Node, lbl trap.Label) { + if nd == nil { + return + } + fset := tw.Package.Fset + start, end := fset.Position(nd.Pos()), fset.Position(nd.End()) + extractLocation(tw, lbl, start.Line, start.Column, end.Line, end.Column-1) +} + +// extractPackageScope extracts symbol table information for the given package +func extractPackageScope(tw *trap.Writer, pkg *packages.Package) trap.Label { + pkgScope := pkg.Types.Scope() + pkgScopeLabel := tw.Labeler.ScopeID(pkgScope, pkg.Types) + dbscheme.ScopesTable.Emit(tw, pkgScopeLabel, dbscheme.PackageScopeType.Index()) + dbscheme.ScopeNestingTable.Emit(tw, pkgScopeLabel, tw.Labeler.ScopeID(types.Universe, nil)) + extractObjects(tw, pkgScope, pkgScopeLabel) + return pkgScopeLabel +} + +// extractScopeLocation extracts location information for the given scope +func extractScopeLocation(tw *trap.Writer, scope *types.Scope, lbl trap.Label) { + fset := tw.Package.Fset + start, end := fset.Position(scope.Pos()), fset.Position(scope.End()) + extractLocation(tw, lbl, start.Line, start.Column, end.Line, end.Column-1) +} + +// extractScopes extracts symbol table information for the package scope and all local scopes +// of the given package. Note that this will not encounter methods or struct fields as +// they do not have a parent scope. +func extractScopes(tw *trap.Writer, nd *ast.File, pkg *packages.Package) { + pkgScopeLabel := extractPackageScope(tw, pkg) + fileScope := pkg.TypesInfo.Scopes[nd] + if fileScope != nil { + extractLocalScope(tw, fileScope, pkgScopeLabel) + } +} + +// extractLocalScope extracts symbol table information for the given scope and all its nested scopes +func extractLocalScope(tw *trap.Writer, scope *types.Scope, parentScopeLabel trap.Label) { + scopeLabel := tw.Labeler.ScopeID(scope, nil) + dbscheme.ScopesTable.Emit(tw, scopeLabel, dbscheme.LocalScopeType.Index()) + extractScopeLocation(tw, scope, scopeLabel) + dbscheme.ScopeNestingTable.Emit(tw, scopeLabel, parentScopeLabel) + + for i := 0; i < scope.NumChildren(); i++ { + childScope := scope.Child(i) + extractLocalScope(tw, childScope, scopeLabel) + } + + extractObjects(tw, scope, scopeLabel) +} + +// extractFileNode extracts AST information for the given file and all nodes contained in it +func extractFileNode(tw *trap.Writer, nd *ast.File) { + lbl := tw.Labeler.FileLabel() + + extractExpr(tw, nd.Name, lbl, 0) + + for i, decl := range nd.Decls { + extractDecl(tw, decl, lbl, i) + } + + for i, cg := range nd.Comments { + extractCommentGroup(tw, cg, lbl, i) + } + + extractDoc(tw, nd.Doc, lbl) + emitScopeNodeInfo(tw, nd, lbl) +} + +// extractDoc extracts information about a doc comment group associated with a given element +func extractDoc(tw *trap.Writer, doc *ast.CommentGroup, elt trap.Label) { + if doc != nil { + dbscheme.DocCommentsTable.Emit(tw, elt, tw.Labeler.LocalID(doc)) + } +} + +// extractCommentGroup extracts information about a doc comment group +func extractCommentGroup(tw *trap.Writer, cg *ast.CommentGroup, parent trap.Label, idx int) { + lbl := tw.Labeler.LocalID(cg) + dbscheme.CommentGroupsTable.Emit(tw, lbl, parent, idx) + extractNodeLocation(tw, cg, lbl) + for i, c := range cg.List { + extractComment(tw, c, lbl, i) + } +} + +// extractComment extracts information about a given comment +func extractComment(tw *trap.Writer, c *ast.Comment, parent trap.Label, idx int) { + lbl := tw.Labeler.LocalID(c) + rawText := c.Text + var kind int + var text string + if rawText[:2] == "//" { + kind = dbscheme.SlashSlashComment.Index() + text = rawText[2:] + } else { + kind = dbscheme.SlashStarComment.Index() + text = rawText[2 : len(rawText)-2] + } + dbscheme.CommentsTable.Emit(tw, lbl, kind, parent, idx, text) + extractNodeLocation(tw, c, lbl) +} + +// emitScopeNodeInfo associates an AST node with its induced scope, if any +func emitScopeNodeInfo(tw *trap.Writer, nd ast.Node, lbl trap.Label) { + scope, exists := tw.Package.TypesInfo.Scopes[nd] + if exists { + dbscheme.ScopeNodesTable.Emit(tw, lbl, tw.Labeler.ScopeID(scope, tw.Package.Types)) + } +} + +// extractExpr extracts AST information for the given expression and all its subexpressions +func extractExpr(tw *trap.Writer, expr ast.Expr, parent trap.Label, idx int) { + if expr == nil { + return + } + + lbl := tw.Labeler.LocalID(expr) + extractTypeOf(tw, expr, lbl) + + var kind int + switch expr := expr.(type) { + case *ast.BadExpr: + kind = dbscheme.BadExpr.Index() + case *ast.Ident: + if expr == nil { + return + } + kind = dbscheme.IdentExpr.Index() + dbscheme.LiteralsTable.Emit(tw, lbl, expr.Name, expr.Name) + def := tw.Package.TypesInfo.Defs[expr] + if def != nil { + defTyp := extractType(tw, def.Type()) + objlbl, exists := tw.Labeler.LookupObjectID(def, defTyp) + if objlbl == trap.InvalidLabel { + log.Printf("Omitting def binding to unknown object %v", def) + } else { + if !exists { + extractObject(tw, def, objlbl) + } + dbscheme.DefsTable.Emit(tw, lbl, objlbl) + } + } + use := getObjectBeingUsed(tw, expr) + if use != nil { + useTyp := extractType(tw, use.Type()) + objlbl, exists := tw.Labeler.LookupObjectID(use, useTyp) + if objlbl == trap.InvalidLabel { + log.Printf("Omitting use binding to unknown object %v", use) + } else { + if !exists { + extractObject(tw, use, objlbl) + } + dbscheme.UsesTable.Emit(tw, lbl, objlbl) + } + } + case *ast.Ellipsis: + if expr == nil { + return + } + kind = dbscheme.EllipsisExpr.Index() + extractExpr(tw, expr.Elt, lbl, 0) + case *ast.BasicLit: + if expr == nil { + return + } + value := "" + switch expr.Kind { + case token.INT: + ival, _ := strconv.ParseInt(expr.Value, 0, 64) + value = strconv.FormatInt(ival, 10) + kind = dbscheme.IntLitExpr.Index() + case token.FLOAT: + value = expr.Value + kind = dbscheme.FloatLitExpr.Index() + case token.IMAG: + value = expr.Value + kind = dbscheme.ImagLitExpr.Index() + case token.CHAR: + value, _ = strconv.Unquote(expr.Value) + kind = dbscheme.CharLitExpr.Index() + case token.STRING: + value, _ = strconv.Unquote(expr.Value) + kind = dbscheme.StringLitExpr.Index() + default: + log.Fatalf("unknown literal kind %v", expr.Kind) + } + dbscheme.LiteralsTable.Emit(tw, lbl, value, expr.Value) + case *ast.FuncLit: + if expr == nil { + return + } + kind = dbscheme.FuncLitExpr.Index() + extractExpr(tw, expr.Type, lbl, 0) + extractStmt(tw, expr.Body, lbl, 1) + case *ast.CompositeLit: + if expr == nil { + return + } + kind = dbscheme.CompositeLitExpr.Index() + extractExpr(tw, expr.Type, lbl, 0) + extractExprs(tw, expr.Elts, lbl, 1, 1) + case *ast.ParenExpr: + if expr == nil { + return + } + kind = dbscheme.ParenExpr.Index() + extractExpr(tw, expr.X, lbl, 0) + case *ast.SelectorExpr: + if expr == nil { + return + } + kind = dbscheme.SelectorExpr.Index() + extractExpr(tw, expr.X, lbl, 0) + extractExpr(tw, expr.Sel, lbl, 1) + case *ast.IndexExpr: + if expr == nil { + return + } + typeofx := typeOf(tw, expr.X) + if typeofx == nil { + // We are missing type information for `expr.X`, so we cannot + // determine whether this is a generic function instantiation + // or not. + kind = dbscheme.IndexExpr.Index() + } else { + if _, ok := typeofx.Underlying().(*types.Signature); ok { + kind = dbscheme.GenericFunctionInstantiationExpr.Index() + } else { + // Can't distinguish between actual index expressions (into a + // map, array, slice, string or pointer to array) and generic + // type specialization expression, so we do it later in QL. + kind = dbscheme.IndexExpr.Index() + } + } + extractExpr(tw, expr.X, lbl, 0) + extractExpr(tw, expr.Index, lbl, 1) + case *ast.IndexListExpr: + if expr == nil { + return + } + typeofx := typeOf(tw, expr.X) + if typeofx == nil { + // We are missing type information for `expr.X`, so we cannot + // determine whether this is a generic function instantiation + // or not. + kind = dbscheme.GenericTypeInstantiationExpr.Index() + } else { + if _, ok := typeofx.Underlying().(*types.Signature); ok { + kind = dbscheme.GenericFunctionInstantiationExpr.Index() + } else { + kind = dbscheme.GenericTypeInstantiationExpr.Index() + } + } + extractExpr(tw, expr.X, lbl, 0) + extractExprs(tw, expr.Indices, lbl, 1, 1) + case *ast.SliceExpr: + if expr == nil { + return + } + kind = dbscheme.SliceExpr.Index() + extractExpr(tw, expr.X, lbl, 0) + extractExpr(tw, expr.Low, lbl, 1) + extractExpr(tw, expr.High, lbl, 2) + extractExpr(tw, expr.Max, lbl, 3) + case *ast.TypeAssertExpr: + if expr == nil { + return + } + kind = dbscheme.TypeAssertExpr.Index() + extractExpr(tw, expr.X, lbl, 0) + extractExpr(tw, expr.Type, lbl, 1) + case *ast.CallExpr: + if expr == nil { + return + } + kind = dbscheme.CallOrConversionExpr.Index() + extractExpr(tw, expr.Fun, lbl, 0) + extractExprs(tw, expr.Args, lbl, 1, 1) + if expr.Ellipsis.IsValid() { + dbscheme.HasEllipsisTable.Emit(tw, lbl) + } + case *ast.StarExpr: + if expr == nil { + return + } + kind = dbscheme.StarExpr.Index() + extractExpr(tw, expr.X, lbl, 0) + case *ast.KeyValueExpr: + if expr == nil { + return + } + kind = dbscheme.KeyValueExpr.Index() + extractExpr(tw, expr.Key, lbl, 0) + extractExpr(tw, expr.Value, lbl, 1) + case *ast.UnaryExpr: + if expr == nil { + return + } + if expr.Op == token.TILDE { + kind = dbscheme.TypeSetLiteralExpr.Index() + } else { + tp := dbscheme.UnaryExprs[expr.Op] + if tp == nil { + log.Fatalf("unsupported unary operator %s", expr.Op) + } + kind = tp.Index() + } + extractExpr(tw, expr.X, lbl, 0) + case *ast.BinaryExpr: + if expr == nil { + return + } + _, isUnionType := typeOf(tw, expr).(*types.Union) + if expr.Op == token.OR && isUnionType { + kind = dbscheme.TypeSetLiteralExpr.Index() + flattenBinaryExprTree(tw, expr, lbl, 0) + } else { + tp := dbscheme.BinaryExprs[expr.Op] + if tp == nil { + log.Fatalf("unsupported binary operator %s", expr.Op) + } + kind = tp.Index() + extractExpr(tw, expr.X, lbl, 0) + extractExpr(tw, expr.Y, lbl, 1) + } + case *ast.ArrayType: + if expr == nil { + return + } + kind = dbscheme.ArrayTypeExpr.Index() + extractExpr(tw, expr.Len, lbl, 0) + extractExpr(tw, expr.Elt, lbl, 1) + case *ast.StructType: + if expr == nil { + return + } + kind = dbscheme.StructTypeExpr.Index() + extractFields(tw, expr.Fields, lbl, 0, 1) + case *ast.FuncType: + if expr == nil { + return + } + kind = dbscheme.FuncTypeExpr.Index() + extractFields(tw, expr.Params, lbl, 0, 1) + extractFields(tw, expr.Results, lbl, -1, -1) + emitScopeNodeInfo(tw, expr, lbl) + case *ast.InterfaceType: + if expr == nil { + return + } + kind = dbscheme.InterfaceTypeExpr.Index() + // expr.Methods contains methods, embedded interfaces and type set + // literals. + makeTypeSetLiteralsUnionTyped(tw, expr.Methods) + extractFields(tw, expr.Methods, lbl, 0, 1) + case *ast.MapType: + if expr == nil { + return + } + kind = dbscheme.MapTypeExpr.Index() + extractExpr(tw, expr.Key, lbl, 0) + extractExpr(tw, expr.Value, lbl, 1) + case *ast.ChanType: + if expr == nil { + return + } + tp := dbscheme.ChanTypeExprs[expr.Dir] + if tp == nil { + log.Fatalf("unsupported channel direction %v", expr.Dir) + } + kind = tp.Index() + extractExpr(tw, expr.Value, lbl, 0) + default: + log.Fatalf("unknown expression of type %T", expr) + } + dbscheme.ExprsTable.Emit(tw, lbl, kind, parent, idx) + extractNodeLocation(tw, expr, lbl) + extractValueOf(tw, expr, lbl) +} + +// extractExprs extracts AST information for a list of expressions, which are children of +// the given parent +// `idx` is the index of the first child in the list, and `dir` is the index increment of +// each child over its preceding child (usually either 1 for assigning increasing indices, or +// -1 for decreasing indices) +func extractExprs(tw *trap.Writer, exprs []ast.Expr, parent trap.Label, idx int, dir int) { + if exprs != nil { + for _, expr := range exprs { + extractExpr(tw, expr, parent, idx) + idx += dir + } + } +} + +// extractTypeOf looks up the type of `expr`, extracts it if it hasn't previously been +// extracted, and associates it with `expr` in the `type_of` table +func extractTypeOf(tw *trap.Writer, expr ast.Expr, lbl trap.Label) { + tp := typeOf(tw, expr) + if tp != nil { + tplbl := extractType(tw, tp) + dbscheme.TypeOfTable.Emit(tw, lbl, tplbl) + } +} + +// extractValueOf looks up the value of `expr`, and associates it with `expr` in +// the `consts` table +func extractValueOf(tw *trap.Writer, expr ast.Expr, lbl trap.Label) { + tpVal := tw.Package.TypesInfo.Types[expr] + + if tpVal.Value != nil { + // if Value is non-nil, the expression has a constant value + + // note that string literals in import statements do not have an associated + // Value and so do not get added to the table + + var value string + exact := tpVal.Value.ExactString() + switch tpVal.Value.Kind() { + case constant.String: + // we need to unquote strings + value = constant.StringVal(tpVal.Value) + exact = constant.StringVal(tpVal.Value) + case constant.Float: + flval, _ := constant.Float64Val(tpVal.Value) + value = fmt.Sprintf("%.20g", flval) + case constant.Complex: + real, _ := constant.Float64Val(constant.Real(tpVal.Value)) + imag, _ := constant.Float64Val(constant.Imag(tpVal.Value)) + value = fmt.Sprintf("(%.20g + %.20gi)", real, imag) + default: + value = tpVal.Value.ExactString() + } + + dbscheme.ConstValuesTable.Emit(tw, lbl, value, exact) + } else if tpVal.IsNil() { + dbscheme.ConstValuesTable.Emit(tw, lbl, "nil", "nil") + } +} + +// extractFields extracts AST information for a list of fields, which are children of +// the given parent +// `idx` is the index of the first child in the list, and `dir` is the index increment of +// each child over its preceding child (usually either 1 for assigning increasing indices, or +// -1 for decreasing indices) +func extractFields(tw *trap.Writer, fields *ast.FieldList, parent trap.Label, idx int, dir int) { + if fields == nil || fields.List == nil { + return + } + for _, field := range fields.List { + lbl := tw.Labeler.LocalID(field) + dbscheme.FieldsTable.Emit(tw, lbl, parent, idx) + extractNodeLocation(tw, field, lbl) + if field.Names != nil { + for i, name := range field.Names { + extractExpr(tw, name, lbl, i+1) + } + } + extractExpr(tw, field.Type, lbl, 0) + extractExpr(tw, field.Tag, lbl, -1) + extractDoc(tw, field.Doc, lbl) + idx += dir + } +} + +// extractStmt extracts AST information for a given statement and all other statements or expressions +// nested inside it +func extractStmt(tw *trap.Writer, stmt ast.Stmt, parent trap.Label, idx int) { + if stmt == nil { + return + } + + lbl := tw.Labeler.LocalID(stmt) + var kind int + switch stmt := stmt.(type) { + case *ast.BadStmt: + kind = dbscheme.BadStmtType.Index() + case *ast.DeclStmt: + if stmt == nil { + return + } + kind = dbscheme.DeclStmtType.Index() + extractDecl(tw, stmt.Decl, lbl, 0) + case *ast.EmptyStmt: + kind = dbscheme.EmptyStmtType.Index() + case *ast.LabeledStmt: + if stmt == nil { + return + } + kind = dbscheme.LabeledStmtType.Index() + extractExpr(tw, stmt.Label, lbl, 0) + extractStmt(tw, stmt.Stmt, lbl, 1) + case *ast.ExprStmt: + if stmt == nil { + return + } + kind = dbscheme.ExprStmtType.Index() + extractExpr(tw, stmt.X, lbl, 0) + case *ast.SendStmt: + if stmt == nil { + return + } + kind = dbscheme.SendStmtType.Index() + extractExpr(tw, stmt.Chan, lbl, 0) + extractExpr(tw, stmt.Value, lbl, 1) + case *ast.IncDecStmt: + if stmt == nil { + return + } + if stmt.Tok == token.INC { + kind = dbscheme.IncStmtType.Index() + } else if stmt.Tok == token.DEC { + kind = dbscheme.DecStmtType.Index() + } else { + log.Fatalf("unsupported increment/decrement operator %v", stmt.Tok) + } + extractExpr(tw, stmt.X, lbl, 0) + case *ast.AssignStmt: + if stmt == nil { + return + } + tp := dbscheme.AssignStmtTypes[stmt.Tok] + if tp == nil { + log.Fatalf("unsupported assignment statement with operator %v", stmt.Tok) + } + kind = tp.Index() + extractExprs(tw, stmt.Lhs, lbl, -1, -1) + extractExprs(tw, stmt.Rhs, lbl, 1, 1) + case *ast.GoStmt: + if stmt == nil { + return + } + kind = dbscheme.GoStmtType.Index() + extractExpr(tw, stmt.Call, lbl, 0) + case *ast.DeferStmt: + if stmt == nil { + return + } + kind = dbscheme.DeferStmtType.Index() + extractExpr(tw, stmt.Call, lbl, 0) + case *ast.ReturnStmt: + kind = dbscheme.ReturnStmtType.Index() + extractExprs(tw, stmt.Results, lbl, 0, 1) + case *ast.BranchStmt: + if stmt == nil { + return + } + switch stmt.Tok { + case token.BREAK: + kind = dbscheme.BreakStmtType.Index() + case token.CONTINUE: + kind = dbscheme.ContinueStmtType.Index() + case token.GOTO: + kind = dbscheme.GotoStmtType.Index() + case token.FALLTHROUGH: + kind = dbscheme.FallthroughStmtType.Index() + default: + log.Fatalf("unsupported branch statement type %v", stmt.Tok) + } + extractExpr(tw, stmt.Label, lbl, 0) + case *ast.BlockStmt: + if stmt == nil { + return + } + kind = dbscheme.BlockStmtType.Index() + extractStmts(tw, stmt.List, lbl, 0, 1) + emitScopeNodeInfo(tw, stmt, lbl) + case *ast.IfStmt: + if stmt == nil { + return + } + kind = dbscheme.IfStmtType.Index() + extractStmt(tw, stmt.Init, lbl, 0) + extractExpr(tw, stmt.Cond, lbl, 1) + extractStmt(tw, stmt.Body, lbl, 2) + extractStmt(tw, stmt.Else, lbl, 3) + emitScopeNodeInfo(tw, stmt, lbl) + case *ast.CaseClause: + if stmt == nil { + return + } + kind = dbscheme.CaseClauseType.Index() + extractExprs(tw, stmt.List, lbl, -1, -1) + extractStmts(tw, stmt.Body, lbl, 0, 1) + emitScopeNodeInfo(tw, stmt, lbl) + case *ast.SwitchStmt: + if stmt == nil { + return + } + kind = dbscheme.ExprSwitchStmtType.Index() + extractStmt(tw, stmt.Init, lbl, 0) + extractExpr(tw, stmt.Tag, lbl, 1) + extractStmt(tw, stmt.Body, lbl, 2) + emitScopeNodeInfo(tw, stmt, lbl) + case *ast.TypeSwitchStmt: + if stmt == nil { + return + } + kind = dbscheme.TypeSwitchStmtType.Index() + extractStmt(tw, stmt.Init, lbl, 0) + extractStmt(tw, stmt.Assign, lbl, 1) + extractStmt(tw, stmt.Body, lbl, 2) + emitScopeNodeInfo(tw, stmt, lbl) + case *ast.CommClause: + if stmt == nil { + return + } + kind = dbscheme.CommClauseType.Index() + extractStmt(tw, stmt.Comm, lbl, 0) + extractStmts(tw, stmt.Body, lbl, 1, 1) + emitScopeNodeInfo(tw, stmt, lbl) + case *ast.SelectStmt: + kind = dbscheme.SelectStmtType.Index() + extractStmt(tw, stmt.Body, lbl, 0) + case *ast.ForStmt: + if stmt == nil { + return + } + kind = dbscheme.ForStmtType.Index() + extractStmt(tw, stmt.Init, lbl, 0) + extractExpr(tw, stmt.Cond, lbl, 1) + extractStmt(tw, stmt.Post, lbl, 2) + extractStmt(tw, stmt.Body, lbl, 3) + emitScopeNodeInfo(tw, stmt, lbl) + case *ast.RangeStmt: + if stmt == nil { + return + } + kind = dbscheme.RangeStmtType.Index() + extractExpr(tw, stmt.Key, lbl, 0) + extractExpr(tw, stmt.Value, lbl, 1) + extractExpr(tw, stmt.X, lbl, 2) + extractStmt(tw, stmt.Body, lbl, 3) + emitScopeNodeInfo(tw, stmt, lbl) + default: + log.Fatalf("unknown statement of type %T", stmt) + } + dbscheme.StmtsTable.Emit(tw, lbl, kind, parent, idx) + extractNodeLocation(tw, stmt, lbl) +} + +// extractStmts extracts AST information for a list of statements, which are children of +// the given parent +// `idx` is the index of the first child in the list, and `dir` is the index increment of +// each child over its preceding child (usually either 1 for assigning increasing indices, or +// -1 for decreasing indices) +func extractStmts(tw *trap.Writer, stmts []ast.Stmt, parent trap.Label, idx int, dir int) { + if stmts != nil { + for _, stmt := range stmts { + extractStmt(tw, stmt, parent, idx) + idx += dir + } + } + +} + +// extractDecl extracts AST information for the given declaration +func extractDecl(tw *trap.Writer, decl ast.Decl, parent trap.Label, idx int) { + lbl := tw.Labeler.LocalID(decl) + var kind int + switch decl := decl.(type) { + case *ast.BadDecl: + kind = dbscheme.BadDeclType.Index() + case *ast.GenDecl: + if decl == nil { + return + } + switch decl.Tok { + case token.IMPORT: + kind = dbscheme.ImportDeclType.Index() + case token.CONST: + kind = dbscheme.ConstDeclType.Index() + case token.TYPE: + kind = dbscheme.TypeDeclType.Index() + case token.VAR: + kind = dbscheme.VarDeclType.Index() + default: + log.Fatalf("unknown declaration of kind %v", decl.Tok) + } + for i, spec := range decl.Specs { + extractSpec(tw, spec, lbl, i) + } + extractDoc(tw, decl.Doc, lbl) + case *ast.FuncDecl: + if decl == nil { + return + } + kind = dbscheme.FuncDeclType.Index() + extractFields(tw, decl.Recv, lbl, -1, -1) + extractExpr(tw, decl.Name, lbl, 0) + extractExpr(tw, decl.Type, lbl, 1) + extractStmt(tw, decl.Body, lbl, 2) + extractDoc(tw, decl.Doc, lbl) + extractTypeParamDecls(tw, decl.Type.TypeParams, lbl) + + // Note that we currently don't extract any kind of declaration for + // receiver type parameters. There isn't an explicit declaration, but + // we could consider the index/indices of an IndexExpr/IndexListExpr + // receiver as declarations. + default: + log.Fatalf("unknown declaration of type %T", decl) + } + dbscheme.DeclsTable.Emit(tw, lbl, kind, parent, idx) + extractNodeLocation(tw, decl, lbl) +} + +// extractSpec extracts AST information for the given declaration specifier +func extractSpec(tw *trap.Writer, spec ast.Spec, parent trap.Label, idx int) { + lbl := tw.Labeler.LocalID(spec) + var kind int + switch spec := spec.(type) { + case *ast.ImportSpec: + if spec == nil { + return + } + kind = dbscheme.ImportSpecType.Index() + extractExpr(tw, spec.Name, lbl, 0) + extractExpr(tw, spec.Path, lbl, 1) + extractDoc(tw, spec.Doc, lbl) + case *ast.ValueSpec: + if spec == nil { + return + } + kind = dbscheme.ValueSpecType.Index() + for i, name := range spec.Names { + extractExpr(tw, name, lbl, -(1 + i)) + } + extractExpr(tw, spec.Type, lbl, 0) + extractExprs(tw, spec.Values, lbl, 1, 1) + extractDoc(tw, spec.Doc, lbl) + case *ast.TypeSpec: + if spec == nil { + return + } + if spec.Assign.IsValid() { + kind = dbscheme.AliasSpecType.Index() + } else { + kind = dbscheme.TypeDefSpecType.Index() + } + extractExpr(tw, spec.Name, lbl, 0) + extractTypeParamDecls(tw, spec.TypeParams, lbl) + extractExpr(tw, spec.Type, lbl, 1) + extractDoc(tw, spec.Doc, lbl) + } + dbscheme.SpecsTable.Emit(tw, lbl, kind, parent, idx) + extractNodeLocation(tw, spec, lbl) +} + +// extractType extracts type information for `tp` and returns its associated label; +// types are only extracted once, so the second time `extractType` is invoked it simply returns the label +func extractType(tw *trap.Writer, tp types.Type) trap.Label { + lbl, exists := getTypeLabel(tw, tp) + if !exists { + var kind int + switch tp := tp.(type) { + case *types.Basic: + branch := dbscheme.BasicTypes[tp.Kind()] + if branch == nil { + log.Fatalf("unknown basic type %v", tp.Kind()) + } + kind = branch.Index() + case *types.Array: + kind = dbscheme.ArrayType.Index() + dbscheme.ArrayLengthTable.Emit(tw, lbl, fmt.Sprintf("%d", tp.Len())) + extractElementType(tw, lbl, tp.Elem()) + case *types.Slice: + kind = dbscheme.SliceType.Index() + extractElementType(tw, lbl, tp.Elem()) + case *types.Struct: + kind = dbscheme.StructType.Index() + for i := 0; i < tp.NumFields(); i++ { + field := tp.Field(i) + + // ensure the field is associated with a label - note that + // struct fields do not have a parent scope, so they are not + // dealt with by `extractScopes` + fieldlbl, exists := tw.Labeler.FieldID(field, i, lbl) + if !exists { + extractObject(tw, field, fieldlbl) + } + + dbscheme.FieldStructsTable.Emit(tw, fieldlbl, lbl) + + name := field.Name() + if field.Embedded() { + name = "" + } + extractComponentType(tw, lbl, i, name, field.Type()) + } + case *types.Pointer: + kind = dbscheme.PointerType.Index() + extractBaseType(tw, lbl, tp.Elem()) + case *types.Interface: + kind = dbscheme.InterfaceType.Index() + for i := 0; i < tp.NumMethods(); i++ { + meth := tp.Method(i) + + // Note that methods do not have a parent scope, so they are + // not dealt with by `extractScopes` + extractMethod(tw, meth) + + extractComponentType(tw, lbl, i, meth.Name(), meth.Type()) + } + for i := 0; i < tp.NumEmbeddeds(); i++ { + component := tp.EmbeddedType(i) + if isNonUnionTypeSetLiteral(component) { + component = createUnionFromType(component) + } + extractComponentType(tw, lbl, -(i + 1), "", component) + } + case *types.Tuple: + kind = dbscheme.TupleType.Index() + for i := 0; i < tp.Len(); i++ { + extractComponentType(tw, lbl, i, "", tp.At(i).Type()) + } + case *types.Signature: + kind = dbscheme.SignatureType.Index() + params, results := tp.Params(), tp.Results() + if params != nil { + for i := 0; i < params.Len(); i++ { + param := params.At(i) + extractComponentType(tw, lbl, i+1, "", param.Type()) + } + } + if results != nil { + for i := 0; i < results.Len(); i++ { + result := results.At(i) + extractComponentType(tw, lbl, -(i + 1), "", result.Type()) + } + } + if tp.Variadic() { + dbscheme.VariadicTable.Emit(tw, lbl) + } + case *types.Map: + kind = dbscheme.MapType.Index() + extractKeyType(tw, lbl, tp.Key()) + extractElementType(tw, lbl, tp.Elem()) + case *types.Chan: + kind = dbscheme.ChanTypes[tp.Dir()].Index() + extractElementType(tw, lbl, tp.Elem()) + case *types.Named: + origintp := tp.Origin() + kind = dbscheme.NamedType.Index() + dbscheme.TypeNameTable.Emit(tw, lbl, origintp.Obj().Name()) + underlying := origintp.Underlying() + extractUnderlyingType(tw, lbl, underlying) + trackInstantiatedStructFields(tw, tp, origintp) + + entitylbl, exists := tw.Labeler.LookupObjectID(origintp.Obj(), lbl) + if entitylbl == trap.InvalidLabel { + log.Printf("Omitting type-object binding for unknown object %v.\n", origintp.Obj()) + } else { + if !exists { + extractObject(tw, origintp.Obj(), entitylbl) + } + dbscheme.TypeObjectTable.Emit(tw, lbl, entitylbl) + } + + // ensure all methods have labels - note that methods do not have a + // parent scope, so they are not dealt with by `extractScopes` + for i := 0; i < origintp.NumMethods(); i++ { + meth := origintp.Method(i) + + extractMethod(tw, meth) + } + + // associate all methods of underlying interface with this type + if underlyingInterface, ok := underlying.(*types.Interface); ok { + for i := 0; i < underlyingInterface.NumMethods(); i++ { + methlbl := extractMethod(tw, underlyingInterface.Method(i)) + dbscheme.MethodHostsTable.Emit(tw, methlbl, lbl) + } + } + case *types.TypeParam: + kind = dbscheme.TypeParamType.Index() + parentlbl := getTypeParamParentLabel(tw, tp) + constraintLabel := extractType(tw, tp.Constraint()) + dbscheme.TypeParamTable.Emit(tw, lbl, tp.Obj().Name(), constraintLabel, parentlbl, tp.Index()) + case *types.Union: + kind = dbscheme.TypeSetLiteral.Index() + for i := 0; i < tp.Len(); i++ { + term := tp.Term(i) + tildeStr := "" + if term.Tilde() { + tildeStr = "~" + } + extractComponentType(tw, lbl, i, tildeStr, term.Type()) + } + default: + log.Fatalf("unexpected type %T", tp) + } + dbscheme.TypesTable.Emit(tw, lbl, kind) + } + return lbl +} + +// getTypeLabel looks up the label associated with `tp`, creating a new label if +// it does not have one yet; the second result indicates whether the label +// already existed +// +// Type labels refer to global keys to ensure that if the same type is +// encountered during the extraction of different files it is still ultimately +// mapped to the same entity. In particular, this means that keys for compound +// types refer to the labels of their component types. For named types, the key +// is constructed from their globally unique ID. This prevents cyclic type keys +// since type recursion in Go always goes through named types. +func getTypeLabel(tw *trap.Writer, tp types.Type) (trap.Label, bool) { + lbl, exists := tw.Labeler.TypeLabels[tp] + if !exists { + switch tp := tp.(type) { + case *types.Basic: + lbl = tw.Labeler.GlobalID(fmt.Sprintf("%d;basictype", tp.Kind())) + case *types.Array: + len := tp.Len() + elem := extractType(tw, tp.Elem()) + lbl = tw.Labeler.GlobalID(fmt.Sprintf("%d,{%s};arraytype", len, elem)) + case *types.Slice: + elem := extractType(tw, tp.Elem()) + lbl = tw.Labeler.GlobalID(fmt.Sprintf("{%s};slicetype", elem)) + case *types.Struct: + var b strings.Builder + for i := 0; i < tp.NumFields(); i++ { + field := tp.Field(i) + fieldTypeLbl := extractType(tw, field.Type()) + if i > 0 { + b.WriteString(",") + } + name := field.Name() + if field.Embedded() { + name = "" + } + fmt.Fprintf(&b, "%s,{%s},%s", name, fieldTypeLbl, util.EscapeTrapSpecialChars(tp.Tag(i))) + } + lbl = tw.Labeler.GlobalID(fmt.Sprintf("%s;structtype", b.String())) + case *types.Pointer: + base := extractType(tw, tp.Elem()) + lbl = tw.Labeler.GlobalID(fmt.Sprintf("{%s};pointertype", base)) + case *types.Interface: + var b strings.Builder + for i := 0; i < tp.NumMethods(); i++ { + meth := tp.Method(i) + methLbl := extractType(tw, meth.Type()) + if i > 0 { + b.WriteString(",") + } + fmt.Fprintf(&b, "%s,{%s}", meth.Id(), methLbl) + } + b.WriteString(";") + for i := 0; i < tp.NumEmbeddeds(); i++ { + if i > 0 { + b.WriteString(",") + } + fmt.Fprintf(&b, "{%s}", extractType(tw, tp.EmbeddedType(i))) + } + // We note whether the interface is comparable so that we can + // distinguish the underlying type of `comparable` from an + // empty interface. + if tp.IsComparable() { + b.WriteString(";comparable") + } + lbl = tw.Labeler.GlobalID(fmt.Sprintf("%s;interfacetype", b.String())) + case *types.Tuple: + var b strings.Builder + for i := 0; i < tp.Len(); i++ { + compLbl := extractType(tw, tp.At(i).Type()) + if i > 0 { + b.WriteString(",") + } + fmt.Fprintf(&b, "{%s}", compLbl) + } + lbl = tw.Labeler.GlobalID(fmt.Sprintf("%s;tupletype", b.String())) + case *types.Signature: + var b strings.Builder + params, results := tp.Params(), tp.Results() + if params != nil { + for i := 0; i < params.Len(); i++ { + paramLbl := extractType(tw, params.At(i).Type()) + if i > 0 { + b.WriteString(",") + } + fmt.Fprintf(&b, "{%s}", paramLbl) + } + } + b.WriteString(";") + if results != nil { + for i := 0; i < results.Len(); i++ { + resultLbl := extractType(tw, results.At(i).Type()) + if i > 0 { + b.WriteString(",") + } + fmt.Fprintf(&b, "{%s}", resultLbl) + } + } + if tp.Variadic() { + b.WriteString(";variadic") + } + lbl = tw.Labeler.GlobalID(fmt.Sprintf("%s;signaturetype", b.String())) + case *types.Map: + key := extractType(tw, tp.Key()) + value := extractType(tw, tp.Elem()) + lbl = tw.Labeler.GlobalID(fmt.Sprintf("{%s},{%s};maptype", key, value)) + case *types.Chan: + dir := tp.Dir() + elem := extractType(tw, tp.Elem()) + lbl = tw.Labeler.GlobalID(fmt.Sprintf("%v,{%s};chantype", dir, elem)) + case *types.Named: + origintp := tp.Origin() + entitylbl, exists := tw.Labeler.LookupObjectID(origintp.Obj(), lbl) + if entitylbl == trap.InvalidLabel { + panic(fmt.Sprintf("Cannot construct label for named type %v (underlying object is %v).\n", origintp, origintp.Obj())) + } + if !exists { + extractObject(tw, origintp.Obj(), entitylbl) + } + lbl = tw.Labeler.GlobalID(fmt.Sprintf("{%s};namedtype", entitylbl)) + case *types.TypeParam: + parentlbl := getTypeParamParentLabel(tw, tp) + lbl = tw.Labeler.GlobalID(fmt.Sprintf("{%v},%s;typeparamtype", parentlbl, tp.Obj().Name())) + case *types.Union: + var b strings.Builder + for i := 0; i < tp.Len(); i++ { + compLbl := extractType(tw, tp.Term(i).Type()) + if i > 0 { + b.WriteString("|") + } + if tp.Term(i).Tilde() { + b.WriteString("~") + } + fmt.Fprintf(&b, "{%s}", compLbl) + } + lbl = tw.Labeler.GlobalID(fmt.Sprintf("%s;typesetliteraltype", b.String())) + default: + log.Fatalf("(getTypeLabel) unexpected type %T", tp) + } + tw.Labeler.TypeLabels[tp] = lbl + } + return lbl, exists +} + +// extractKeyType extracts `key` as the key type of the map type `mp` +func extractKeyType(tw *trap.Writer, mp trap.Label, key types.Type) { + dbscheme.KeyTypeTable.Emit(tw, mp, extractType(tw, key)) +} + +// extractElementType extracts `element` as the element type of the container type `container` +func extractElementType(tw *trap.Writer, container trap.Label, element types.Type) { + dbscheme.ElementTypeTable.Emit(tw, container, extractType(tw, element)) +} + +// extractBaseType extracts `base` as the base type of the pointer type `ptr` +func extractBaseType(tw *trap.Writer, ptr trap.Label, base types.Type) { + dbscheme.BaseTypeTable.Emit(tw, ptr, extractType(tw, base)) +} + +// extractUnderlyingType extracts `underlying` as the underlying type of the +// named type `named` +func extractUnderlyingType(tw *trap.Writer, named trap.Label, underlying types.Type) { + dbscheme.UnderlyingTypeTable.Emit(tw, named, extractType(tw, underlying)) +} + +// extractComponentType extracts `component` as the `idx`th component type of `parent` with name `name` +func extractComponentType(tw *trap.Writer, parent trap.Label, idx int, name string, component types.Type) { + dbscheme.ComponentTypesTable.Emit(tw, parent, idx, name, extractType(tw, component)) +} + +// extractNumLines extracts lines-of-code and lines-of-comments information for the +// given file +func extractNumLines(tw *trap.Writer, fileName string, ast *ast.File) { + f := tw.Package.Fset.File(ast.Pos()) + + lineCount := f.LineCount() + + // count lines of code by tokenizing + linesOfCode := 0 + src, err := ioutil.ReadFile(fileName) + if err != nil { + log.Fatalf("Unable to read file %s.", fileName) + } + var s scanner.Scanner + lastCodeLine := -1 + s.Init(f, src, nil, 0) + for { + pos, tok, lit := s.Scan() + if tok == token.EOF { + break + } else if tok != token.ILLEGAL && !(tok == token.SEMICOLON && lit == "\n") { + // specifically exclude newlines that are treated as semicolons + tkStartLine := f.Position(pos).Line + tkEndLine := tkStartLine + strings.Count(lit, "\n") + if tkEndLine > lastCodeLine { + if tkStartLine <= lastCodeLine { + // if the start line is the same as the last code line we've seen we don't want to double + // count it + // note tkStartLine < lastCodeLine should not be possible + linesOfCode += tkEndLine - lastCodeLine + } else { + linesOfCode += tkEndLine - tkStartLine + 1 + } + lastCodeLine = tkEndLine + } + } + } + + // count lines of comments by iterating over ast.Comments + linesOfComments := 0 + for _, cg := range ast.Comments { + for _, g := range cg.List { + fset := tw.Package.Fset + startPos, endPos := fset.Position(g.Pos()), fset.Position(g.End()) + linesOfComments += endPos.Line - startPos.Line + 1 + } + } + + dbscheme.NumlinesTable.Emit(tw, tw.Labeler.FileLabel(), lineCount, linesOfCode, linesOfComments) +} + +// For a type `t` which is the type of a field of an interface type, return +// whether `t` a type set literal which is not a union type. Note that a field +// of an interface must be a method signature, an embedded interface type or a +// type set literal. +func isNonUnionTypeSetLiteral(t types.Type) bool { + if t == nil { + return false + } + switch t.Underlying().(type) { + case *types.Interface, *types.Union, *types.Signature: + return false + default: + return true + } +} + +// Given a type `t`, return a union with a single term that is `t` without a +// tilde. +func createUnionFromType(t types.Type) *types.Union { + return types.NewUnion([]*types.Term{types.NewTerm(false, t)}) +} + +// Go through a `FieldList` and update the types of all type set literals which +// are not already union types to be union types. We do this by changing the +// types stored in `tw.Package.TypesInfo.Types`. Type set literals can only +// occur in two places: a type parameter declaration or a type in an interface. +func makeTypeSetLiteralsUnionTyped(tw *trap.Writer, fields *ast.FieldList) { + if fields == nil || fields.List == nil { + return + } + for i := 0; i < len(fields.List); i++ { + x := fields.List[i].Type + if _, alreadyOverridden := tw.TypesOverride[x]; !alreadyOverridden { + xtp := typeOf(tw, x) + if isNonUnionTypeSetLiteral(xtp) { + tw.TypesOverride[x] = createUnionFromType(xtp) + } + } + } +} + +func typeOf(tw *trap.Writer, e ast.Expr) types.Type { + if val, ok := tw.TypesOverride[e]; ok { + return val + } + return tw.Package.TypesInfo.TypeOf(e) +} + +func flattenBinaryExprTree(tw *trap.Writer, e ast.Expr, parent trap.Label, idx int) int { + binaryexpr, ok := e.(*ast.BinaryExpr) + if ok { + idx = flattenBinaryExprTree(tw, binaryexpr.X, parent, idx) + idx = flattenBinaryExprTree(tw, binaryexpr.Y, parent, idx) + } else { + extractExpr(tw, e, parent, idx) + idx = idx + 1 + } + return idx +} + +func extractTypeParamDecls(tw *trap.Writer, fields *ast.FieldList, parent trap.Label) { + if fields == nil || fields.List == nil { + return + } + + // Type set literals can occur as the type in a type parameter declaration, + // so we ensure that they are union typed. + makeTypeSetLiteralsUnionTyped(tw, fields) + + idx := 0 + for _, field := range fields.List { + lbl := tw.Labeler.LocalID(field) + dbscheme.TypeParamDeclsTable.Emit(tw, lbl, parent, idx) + extractNodeLocation(tw, field, lbl) + if field.Names != nil { + for i, name := range field.Names { + extractExpr(tw, name, lbl, i+1) + } + } + extractExpr(tw, field.Type, lbl, 0) + extractDoc(tw, field.Doc, lbl) + idx += 1 + } +} + +// populateTypeParamParents sets `parent` as the parent of the elements of `typeparams` +func populateTypeParamParents(tw *trap.Writer, typeparams *types.TypeParamList, parent types.Object) { + if typeparams != nil { + for idx := 0; idx < typeparams.Len(); idx++ { + setTypeParamParent(typeparams.At(idx), parent) + } + } +} + +// getobjectBeingUsed looks up `ident` in `tw.Package.TypesInfo.Uses` and makes +// some changes to the object to avoid returning objects relating to instantiated +// types. +func getObjectBeingUsed(tw *trap.Writer, ident *ast.Ident) types.Object { + obj := tw.Package.TypesInfo.Uses[ident] + if obj == nil { + return nil + } + if override, ok := tw.ObjectsOverride[obj]; ok { + return override + } + if funcObj, ok := obj.(*types.Func); ok { + sig := funcObj.Type().(*types.Signature) + if recv := sig.Recv(); recv != nil { + recvType := recv.Type() + originType, isSame := tryGetGenericType(recvType) + + if originType == nil { + if pointerType, ok := recvType.(*types.Pointer); ok { + originType, isSame = tryGetGenericType(pointerType.Elem()) + } + } + + if originType == nil || isSame { + return obj + } + + for i := 0; i < originType.NumMethods(); i++ { + meth := originType.Method(i) + if meth.Name() == funcObj.Name() { + return meth + } + } + if interfaceType, ok := originType.Underlying().(*types.Interface); ok { + for i := 0; i < interfaceType.NumMethods(); i++ { + meth := interfaceType.Method(i) + if meth.Name() == funcObj.Name() { + return meth + } + } + } + log.Fatalf("Could not find method %s on type %s", funcObj.Name(), originType) + } + } + + return obj +} + +// tryGetGenericType returns the generic type of `tp`, and a boolean indicating +// whether it is the same as `tp`. +func tryGetGenericType(tp types.Type) (*types.Named, bool) { + if namedType, ok := tp.(*types.Named); ok { + originType := namedType.Origin() + return originType, namedType == originType + } + return nil, false +} + +// trackInstantiatedStructFields tries to give the fields of an instantiated +// struct type underlying `tp` the same labels as the corresponding fields of +// the generic struct type. This is so that when we come across the +// instantiated field in `tw.Package.TypesInfo.Uses` we will get the label for +// the generic field instead. +func trackInstantiatedStructFields(tw *trap.Writer, tp, origintp *types.Named) { + if tp == origintp { + return + } + + if instantiatedStruct, ok := tp.Underlying().(*types.Struct); ok { + genericStruct, ok2 := origintp.Underlying().(*types.Struct) + if !ok2 { + log.Fatalf( + "Error: underlying type of instantiated type is a struct but underlying type of generic type is %s", + origintp.Underlying()) + } + + if instantiatedStruct.NumFields() != genericStruct.NumFields() { + log.Fatalf( + "Error: instantiated struct %s has different number of fields than the generic version %s (%d != %d)", + instantiatedStruct, genericStruct, instantiatedStruct.NumFields(), genericStruct.NumFields()) + } + + for i := 0; i < instantiatedStruct.NumFields(); i++ { + tw.ObjectsOverride[instantiatedStruct.Field(i)] = genericStruct.Field(i) + } + } +} + +func getTypeParamParentLabel(tw *trap.Writer, tp *types.TypeParam) trap.Label { + parent, exists := typeParamParent[tp] + if !exists { + log.Fatalf("Parent of type parameter does not exist: %s %s", tp.String(), tp.Constraint().String()) + } + parentlbl, _ := tw.Labeler.ScopedObjectID(parent, func() trap.Label { + log.Fatalf("getTypeLabel() called for parent of type parameter %s", tp.String()) + return trap.InvalidLabel + }) + return parentlbl +} + +func setTypeParamParent(tp *types.TypeParam, newobj types.Object) { + obj, exists := typeParamParent[tp] + if !exists { + typeParamParent[tp] = newobj + } else if newobj != obj { + log.Fatalf("Parent of type parameter '%s %s' being set to a different value: '%s' vs '%s'", tp.String(), tp.Constraint().String(), obj, newobj) + } +} diff --git a/go/extractor/gomodextractor.go b/go/extractor/gomodextractor.go new file mode 100644 index 00000000000..5a6a26281bc --- /dev/null +++ b/go/extractor/gomodextractor.go @@ -0,0 +1,201 @@ +package extractor + +import ( + "fmt" + "golang.org/x/mod/modfile" + "io/ioutil" + "log" + "os" + "path/filepath" + "strings" + + "github.com/github/codeql-go/extractor/dbscheme" + "github.com/github/codeql-go/extractor/srcarchive" + "github.com/github/codeql-go/extractor/trap" +) + +func (extraction *Extraction) extractGoMod(path string) error { + if normPath, err := filepath.EvalSymlinks(path); err == nil { + path = normPath + } + + extraction.Lock.Lock() + if extraction.SeenGoMods[path] { + extraction.Lock.Unlock() + return nil + } + + extraction.SeenGoMods[path] = true + extraction.Lock.Unlock() + + tw, err := trap.NewWriter(path, nil) + if err != nil { + return err + } + defer tw.Close() + + err = srcarchive.Add(path) + if err != nil { + return err + } + + extraction.extractFileInfo(tw, path) + + file, err := os.Open(path) + if err != nil { + return fmt.Errorf("failed to open go.mod file %s: %s", path, err.Error()) + } + data, err := ioutil.ReadAll(file) + if err != nil { + return fmt.Errorf("failed to read go.mod file %s: %s", path, err.Error()) + } + + modfile, err := modfile.Parse(path, data, nil) + if err != nil { + return fmt.Errorf("failed to parse go.mod file %s: %s", path, err.Error()) + } + + extractGoModFile(tw, modfile.Syntax) + + return nil +} + +type commentGroupIdxAllocator struct { + nextIdx int +} + +func (cgIdxAlloc *commentGroupIdxAllocator) nextCgIdx() int { + ret := cgIdxAlloc.nextIdx + cgIdxAlloc.nextIdx++ + return ret +} + +func extractGoModFile(tw *trap.Writer, file *modfile.FileSyntax) { + cgIdxAlloc := commentGroupIdxAllocator{0} + + for idx, stmt := range file.Stmt { + extractGoModExpr(tw, stmt, tw.Labeler.FileLabel(), idx, &cgIdxAlloc) + } + + extractGoModComments(tw, file, tw.Labeler.FileLabel(), &cgIdxAlloc) +} + +func extractGoModExpr(tw *trap.Writer, expr modfile.Expr, parent trap.Label, idx int, cgIdxAlloc *commentGroupIdxAllocator) { + lbl := tw.Labeler.LocalID(expr) + + var kind int + switch expr := expr.(type) { + case *modfile.CommentBlock: + kind = dbscheme.ModCommentBlockType.Index() + case *modfile.LParen: + kind = dbscheme.ModLParenType.Index() + case *modfile.RParen: + kind = dbscheme.ModRParenType.Index() + case *modfile.Line: + kind = dbscheme.ModLineType.Index() + for idx, tok := range expr.Token { + dbscheme.ModTokensTable.Emit(tw, tok, lbl, idx) + } + case *modfile.LineBlock: + kind = dbscheme.ModLineBlockType.Index() + for idx, tok := range expr.Token { + dbscheme.ModTokensTable.Emit(tw, tok, lbl, idx) + } + extractGoModExpr(tw, &expr.LParen, lbl, 0, cgIdxAlloc) + for idx, line := range expr.Line { + extractGoModExpr(tw, line, lbl, idx+1, cgIdxAlloc) + } + extractGoModExpr(tw, &expr.RParen, lbl, len(expr.Line)+1, cgIdxAlloc) + default: + log.Fatalf("unknown go.mod expression of type %T", expr) + } + + dbscheme.ModExprsTable.Emit(tw, lbl, kind, parent, idx) + + extractGoModComments(tw, expr, lbl, cgIdxAlloc) + + start, end := expr.Span() + extractLocation(tw, lbl, start.Line, start.LineRune, end.Line, end.LineRune) +} + +type GoModExprCommentWrapper struct { + expr modfile.Expr +} + +func minInt(a int, b int) int { + if a < b { + return a + } + return b +} + +func maxInt(a int, b int) int { + if a > b { + return a + } + return b +} + +func lexMin(a1 int, a2 int, b1 int, b2 int) (int, int) { + if a1 < b1 { + return a1, a2 + } else if a1 > b1 { + return b1, b2 + } else { + return a1, minInt(b1, b2) + } +} + +func lexMax(a1 int, a2 int, b1 int, b2 int) (int, int) { + if a1 < b1 { + return b1, b2 + } else if a1 > b1 { + return a1, a2 + } else { + return a1, maxInt(b1, b2) + } +} + +func extractGoModComments(tw *trap.Writer, expr modfile.Expr, exprlbl trap.Label, cgIdxAlloc *commentGroupIdxAllocator) { + comments := expr.Comment() + + if len(comments.Before) == 0 && len(comments.Suffix) == 0 && len(comments.After) == 0 { + return + } + + // extract a pseudo `@commentgroup` for each expr that contains their associated comments + grouplbl := tw.Labeler.LocalID(GoModExprCommentWrapper{expr}) + dbscheme.CommentGroupsTable.Emit(tw, grouplbl, tw.Labeler.FileLabel(), cgIdxAlloc.nextCgIdx()) + dbscheme.DocCommentsTable.Emit(tw, exprlbl, grouplbl) + + var allComments []modfile.Comment + allComments = append(allComments, comments.Before...) + allComments = append(allComments, comments.Suffix...) + allComments = append(allComments, comments.After...) + + var startLine, startCol, endLine, endCol int = 0, 0, 0, 0 + var first bool = true + idx := 0 + for _, comment := range allComments { + commentToken := strings.TrimSuffix(strings.TrimSuffix(comment.Token, "\n"), "\r") + extractGoModComment(tw, comment, commentToken, grouplbl, idx) + idx++ + commentEndCol := comment.Start.LineRune + (len(commentToken) - 1) + if first { + startLine, startCol, endLine, endCol = comment.Start.Line, comment.Start.LineRune, comment.Start.Line, commentEndCol + first = false + } else { + startLine, startCol = lexMin(comment.Start.Line, comment.Start.LineRune, startLine, startCol) + endLine, endCol = lexMax(comment.Start.Line, commentEndCol, endLine, endCol) + } + } + + extractLocation(tw, grouplbl, startLine, startCol, endLine, endCol) +} + +func extractGoModComment(tw *trap.Writer, comment modfile.Comment, commentToken string, grouplbl trap.Label, idx int) { + lbl := tw.Labeler.LocalID(comment) + dbscheme.CommentsTable.Emit(tw, lbl, dbscheme.SlashSlashComment.Index(), grouplbl, idx, commentToken) + + extractLocation(tw, lbl, comment.Start.Line, comment.Start.LineRune, comment.Start.Line, comment.Start.LineRune+(len(commentToken)-1)) +} diff --git a/go/extractor/net/sourceforge/pmd/cpd/AbstractLanguage.java b/go/extractor/net/sourceforge/pmd/cpd/AbstractLanguage.java new file mode 100644 index 00000000000..363be4e8fa1 --- /dev/null +++ b/go/extractor/net/sourceforge/pmd/cpd/AbstractLanguage.java @@ -0,0 +1,13 @@ +package net.sourceforge.pmd.cpd; + +/* + * This is a stub definition for pmd's AbstractLanguage class + * including only the API used by the GoLanguage class. + */ + +public abstract class AbstractLanguage { + + public AbstractLanguage(String... extensions) {} + + public abstract Tokenizer getTokenizer(boolean fuzzyMatch); +} diff --git a/go/extractor/net/sourceforge/pmd/cpd/GoLanguage.java b/go/extractor/net/sourceforge/pmd/cpd/GoLanguage.java new file mode 100644 index 00000000000..400a52c0e0d --- /dev/null +++ b/go/extractor/net/sourceforge/pmd/cpd/GoLanguage.java @@ -0,0 +1,68 @@ +package net.sourceforge.pmd.cpd; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.lang.ProcessBuilder.Redirect; +import java.nio.charset.Charset; +import java.nio.file.Paths; +import java.util.List; +import opencsv.CSVReader; + +public class GoLanguage extends AbstractLanguage { + public GoLanguage() { + super(".go"); + } + + @Override + public Tokenizer getTokenizer(final boolean fuzzyMatch) { + return new Tokenizer() { + @Override + public void tokenize(SourceCode tokens, List tokenEntries) { + String fileName = tokens.getFileName(); + String platform = "linux", exe = ""; + + String osName = System.getProperty("os.name", "unknown"); + if (osName.contains("Windows")) { + platform = "win"; + exe = ".exe"; + } else if (osName.contains("Mac OS X")) { + platform = "osx"; + } + + // get tools folder from SEMMLE_DIST + String toolsDir = null; + String dist = System.getenv("SEMMLE_DIST"); + if (dist != null && !dist.isEmpty()) { + toolsDir = dist + "/language-packs/go/tools/platform/" + platform; + } + + String goTokenizer = toolsDir == null ? "go-tokenizer" : toolsDir + "/bin/go-tokenizer"; + goTokenizer += exe; + ProcessBuilder pb = new ProcessBuilder(Paths.get(goTokenizer).toString(), fileName); + pb.redirectError(Redirect.INHERIT); + try { + Process process = pb.start(); + try ( + CSVReader r = new CSVReader(new InputStreamReader(process.getInputStream(), Charset.forName("UTF-8"))) + ) { + String[] row; + while ((row = r.readNext()) != null) { + String text = row[0]; + String fuzzyText = row[1]; + int beginLine = Integer.parseInt(row[2]); + int beginColumn = Integer.parseInt(row[3]); + int endLine = Integer.parseInt(row[4]); + int endColumn = Integer.parseInt(row[5]); + tokenEntries.add(new TokenEntry(fuzzyMatch ? text : fuzzyText, fileName, beginLine, beginColumn, endLine, endColumn)); + } + } + int exitCode = process.waitFor(); + if (exitCode != 0) + throw new RuntimeException("Tokenizing " + fileName + " returned " + exitCode + "."); + } catch (IOException | InterruptedException e) { + throw new RuntimeException(e); + } + } + }; + } +} diff --git a/go/extractor/net/sourceforge/pmd/cpd/SourceCode.java b/go/extractor/net/sourceforge/pmd/cpd/SourceCode.java new file mode 100644 index 00000000000..f3ad49f8343 --- /dev/null +++ b/go/extractor/net/sourceforge/pmd/cpd/SourceCode.java @@ -0,0 +1,12 @@ +package net.sourceforge.pmd.cpd; + +/* + * This is a stub definition for pmd's SourceCode class + * including only the API used by the GoLanguage class. + */ + +public class SourceCode { + public String getFileName() { + return null; + } +} diff --git a/go/extractor/net/sourceforge/pmd/cpd/TokenEntry.java b/go/extractor/net/sourceforge/pmd/cpd/TokenEntry.java new file mode 100644 index 00000000000..d599ebea367 --- /dev/null +++ b/go/extractor/net/sourceforge/pmd/cpd/TokenEntry.java @@ -0,0 +1,11 @@ +package net.sourceforge.pmd.cpd; + +/* + * This is a stub definition for pmd's TokenEntry class + * including only the API used by the GoLanguage class. + */ + +public class TokenEntry { + public TokenEntry(String image, String tokenSrcID, int beginLine, int beginColumn, int endLine, int endColumn) { + } +} diff --git a/go/extractor/net/sourceforge/pmd/cpd/Tokenizer.java b/go/extractor/net/sourceforge/pmd/cpd/Tokenizer.java new file mode 100644 index 00000000000..cc94bbbb149 --- /dev/null +++ b/go/extractor/net/sourceforge/pmd/cpd/Tokenizer.java @@ -0,0 +1,12 @@ +package net.sourceforge.pmd.cpd; + +/* + * This is a stub definition for pmd's Tokenizer interface + * including only the API used by the GoLanguage class. + */ + +import java.util.List; + +public interface Tokenizer { + void tokenize(SourceCode tokens, List tokenEntries); +} diff --git a/go/extractor/opencsv/CSVParser.java b/go/extractor/opencsv/CSVParser.java new file mode 100644 index 00000000000..e3a864bef3f --- /dev/null +++ b/go/extractor/opencsv/CSVParser.java @@ -0,0 +1,207 @@ +/** + Copyright 2005 Bytecode Pty Ltd. + + Licensed 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. + */ + +package opencsv; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * A very simple CSV parser released under a commercial-friendly license. + * This just implements splitting a single line into fields. + * + * @author Glen Smith + * @author Rainer Pruy + * + */ +public class CSVParser { + + private final char separator; + + private final char quotechar; + + private final char escape; + + private final boolean strictQuotes; + + private StringBuilder buf = new StringBuilder(INITIAL_READ_SIZE); + + /** The default separator to use if none is supplied to the constructor. */ + public static final char DEFAULT_SEPARATOR = ','; + + private static final int INITIAL_READ_SIZE = 128; + + /** + * The default quote character to use if none is supplied to the + * constructor. + */ + public static final char DEFAULT_QUOTE_CHARACTER = '"'; + + + /** + * The default escape character to use if none is supplied to the + * constructor. + */ + public static final char DEFAULT_ESCAPE_CHARACTER = '"'; + + /** + * The default strict quote behavior to use if none is supplied to the + * constructor + */ + public static final boolean DEFAULT_STRICT_QUOTES = false; + + /** + * Constructs CSVReader with supplied separator and quote char. + * Allows setting the "strict quotes" flag + * @param separator + * the delimiter to use for separating entries + * @param quotechar + * the character to use for quoted elements + * @param escape + * the character to use for escaping a separator or quote + * @param strictQuotes + * if true, characters outside the quotes are ignored + */ + CSVParser(char separator, char quotechar, char escape, boolean strictQuotes) { + this.separator = separator; + this.quotechar = quotechar; + this.escape = escape; + this.strictQuotes = strictQuotes; + } + + /** + * + * @return true if something was left over from last call(s) + */ + public boolean isPending() { + return buf.length() != 0; + } + + public String[] parseLineMulti(String nextLine) throws IOException { + return parseLine(nextLine, true); + } + + public String[] parseLine(String nextLine) throws IOException { + return parseLine(nextLine, false); + } + /** + * Parses an incoming String and returns an array of elements. + * + * @param nextLine + * the string to parse + * @return the comma-tokenized list of elements, or null if nextLine is null + * @throws IOException if bad things happen during the read + */ + private String[] parseLine(String nextLine, boolean multi) throws IOException { + + if (!multi && isPending()) { + clear(); + } + + if (nextLine == null) { + if (isPending()) { + String s = buf.toString(); + clear(); + return new String[] {s}; + } else { + return null; + } + } + + ListtokensOnThisLine = new ArrayList(); + boolean inQuotes = isPending(); + for (int i = 0; i < nextLine.length(); i++) { + + char c = nextLine.charAt(i); + if (c == this.escape && isNextCharacterEscapable(nextLine, inQuotes, i)) { + buf.append(nextLine.charAt(i+1)); + i++; + } else if (c == quotechar) { + if( isNextCharacterEscapedQuote(nextLine, inQuotes, i) ){ + buf.append(nextLine.charAt(i+1)); + i++; + }else{ + inQuotes = !inQuotes; + // the tricky case of an embedded quote in the middle: a,bc"d"ef,g + if (!strictQuotes) { + if(i>2 //not on the beginning of the line + && nextLine.charAt(i-1) != this.separator //not at the beginning of an escape sequence + && nextLine.length()>(i+1) && + nextLine.charAt(i+1) != this.separator //not at the end of an escape sequence + ){ + buf.append(c); + } + } + } + } else if (c == separator && !inQuotes) { + tokensOnThisLine.add(buf.toString()); + clear(); // start work on next token + } else { + if (!strictQuotes || inQuotes) + buf.append(c); + } + } + // line is done - check status + if (inQuotes) { + if (multi) { + // continuing a quoted section, re-append newline + buf.append('\n'); + // this partial content is not to be added to field list yet + } else { + throw new IOException("Un-terminated quoted field at end of CSV line"); + } + } else { + tokensOnThisLine.add(buf.toString()); + clear(); + } + return tokensOnThisLine.toArray(new String[tokensOnThisLine.size()]); + + } + + /** + * precondition: the current character is a quote or an escape + * @param nextLine the current line + * @param inQuotes true if the current context is quoted + * @param i current index in line + * @return true if the following character is a quote + */ + private boolean isNextCharacterEscapedQuote(String nextLine, boolean inQuotes, int i) { + return inQuotes // we are in quotes, therefore there can be escaped quotes in here. + && nextLine.length() > (i+1) // there is indeed another character to check. + && nextLine.charAt(i+1) == quotechar; + } + + /** + * precondition: the current character is an escape + * @param nextLine the current line + * @param inQuotes true if the current context is quoted + * @param i current index in line + * @return true if the following character is a quote + */ + protected boolean isNextCharacterEscapable(String nextLine, boolean inQuotes, int i) { + return inQuotes // we are in quotes, therefore there can be escaped quotes in here. + && nextLine.length() > (i+1) // there is indeed another character to check. + && ( nextLine.charAt(i+1) == quotechar || nextLine.charAt(i+1) == this.escape); + } + + /** + * Reset the buffer used for storing the current field's value + */ + private void clear() { + buf.setLength(0); + } +} diff --git a/go/extractor/opencsv/CSVReader.java b/go/extractor/opencsv/CSVReader.java new file mode 100644 index 00000000000..11b537e4995 --- /dev/null +++ b/go/extractor/opencsv/CSVReader.java @@ -0,0 +1,192 @@ +/** + Copyright 2005 Bytecode Pty Ltd. + + Licensed 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. + */ + +package opencsv; + +import java.io.BufferedReader; +import java.io.Closeable; +import java.io.IOException; +import java.io.Reader; +import java.util.ArrayList; +import java.util.List; + +/** + * A very simple CSV reader released under a commercial-friendly license. + * + * @author Glen Smith + * + */ +public class CSVReader implements Closeable { + + private final BufferedReader br; + + private boolean hasNext = true; + + private final CSVParser parser; + + private final int skipLines; + + private boolean linesSkipped; + + /** The line number of the last physical line read (one-based). */ + private int curline = 0; + + /** The physical line number at which the last logical line read started (one-based). */ + private int startLine = 0; + + /** + * The default line to start reading. + */ + private static final int DEFAULT_SKIP_LINES = 0; + + /** + * Constructs CSVReader using a comma for the separator. + * + * @param reader + * the reader to an underlying CSV source. + */ + public CSVReader(Reader reader) { + this(reader, + CSVParser.DEFAULT_SEPARATOR, CSVParser.DEFAULT_QUOTE_CHARACTER, + CSVParser.DEFAULT_ESCAPE_CHARACTER, DEFAULT_SKIP_LINES, + CSVParser.DEFAULT_STRICT_QUOTES); + } + + /** + * Constructs CSVReader with supplied separator and quote char. + * + * @param reader + * the reader to an underlying CSV source. + * @param separator + * the delimiter to use for separating entries + * @param quotechar + * the character to use for quoted elements + * @param escape + * the character to use for escaping a separator or quote + * @param line + * the line number to skip for start reading + * @param strictQuotes + * sets if characters outside the quotes are ignored + */ + private CSVReader(Reader reader, char separator, char quotechar, char escape, int line, boolean strictQuotes) { + this.br = new BufferedReader(reader); + this.parser = new CSVParser(separator, quotechar, escape, strictQuotes); + this.skipLines = line; + } + + + /** + * Reads the entire file into a List with each element being a String[] of + * tokens. + * + * @return a List of String[], with each String[] representing a line of the + * file. + * + * @throws IOException + * if bad things happen during the read + */ + public List readAll() throws IOException { + + List allElements = new ArrayList(); + while (hasNext) { + String[] nextLineAsTokens = readNext(); + if (nextLineAsTokens != null) + allElements.add(nextLineAsTokens); + } + return allElements; + + } + + /** + * Reads the next line from the buffer and converts to a string array. + * + * @return a string array with each comma-separated element as a separate + * entry, or null if there are no more lines to read. + * + * @throws IOException + * if bad things happen during the read + */ + public String[] readNext() throws IOException { + boolean first = true; + String[] result = null; + do { + String nextLine = getNextLine(); + + if (first) { + startLine = curline; + first = false; + } + + if (!hasNext) { + return result; // should throw if still pending? + } + String[] r = parser.parseLineMulti(nextLine); + if (r.length > 0) { + if (result == null) { + result = r; + } else { + String[] t = new String[result.length+r.length]; + System.arraycopy(result, 0, t, 0, result.length); + System.arraycopy(r, 0, t, result.length, r.length); + result = t; + } + } + } while (parser.isPending()); + return result; + } + + /** + * Reads the next line from the file. + * + * @return the next line from the file without trailing newline + * @throws IOException + * if bad things happen during the read + */ + private String getNextLine() throws IOException { + if (!this.linesSkipped) { + for (int i = 0; i < skipLines; i++) { + br.readLine(); + ++curline; + } + this.linesSkipped = true; + } + String nextLine = br.readLine(); + if (nextLine == null) { + hasNext = false; + } else { + ++curline; + } + return hasNext ? nextLine : null; + } + + /** + * Closes the underlying reader. + * + * @throws IOException if the close fails + */ + @Override + public void close() throws IOException{ + br.close(); + } + + /** + * Return the physical line number (one-based) at which the last logical line read started, + * or zero if no line has been read yet. + */ + public int getStartLine() { + return startLine; + } +} diff --git a/go/extractor/semaphore.go b/go/extractor/semaphore.go new file mode 100644 index 00000000000..127f94aa6d0 --- /dev/null +++ b/go/extractor/semaphore.go @@ -0,0 +1,42 @@ +package extractor + +import ( + "log" +) + +type Unit struct{} + +var unit = Unit{} + +type semaphore struct { + counter, lock chan Unit +} + +func (s *semaphore) acquire(n int) { + if s != nil { + if cap(s.counter) < n { + log.Fatalf("Tried to acquire more resources than were available.") + } + s.lock <- unit + for i := 0; i < n; i++ { + s.counter <- unit + } + <-s.lock + } +} + +func (s *semaphore) release(n int) { + if s != nil { + for i := 0; i < n; i++ { + <-s.counter + } + } +} + +func newSemaphore(max int) *semaphore { + if max > 0 { + return &semaphore{make(chan Unit, max), make(chan Unit, 1)} + } else { + return nil + } +} diff --git a/go/extractor/srcarchive/projectlayout.go b/go/extractor/srcarchive/projectlayout.go new file mode 100644 index 00000000000..da717dd4217 --- /dev/null +++ b/go/extractor/srcarchive/projectlayout.go @@ -0,0 +1,105 @@ +package srcarchive + +import ( + "bufio" + "errors" + "fmt" + "os" + "strings" +) + +// ProjectLayout describes a very simple project layout rewriting paths starting +// with `from` to start with `to` instead. +// +// We currently only support project layouts of the form +// +// # to +// from// +type ProjectLayout struct { + from, to string +} + +// normaliseSlashes adds an initial slash to `path` if there isn't one, and trims +// a final slash if there is one +func normaliseSlashes(path string) string { + if !strings.HasPrefix(path, "/") { + path = "/" + path + } + return strings.TrimSuffix(path, "/") +} + +// 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) { + res := ProjectLayout{} + scanner := bufio.NewScanner(file) + + line := "" + for ; line == "" && scanner.Scan(); line = strings.TrimSpace(scanner.Text()) { + } + + 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, "#"))) + + if !scanner.Scan() { + return nil, errors.New("empty section in project-layout file") + } + + line = strings.TrimSpace(scanner.Text()) + + if !strings.HasSuffix(line, "//") { + return nil, errors.New("unsupported project-layout feature") + } + line = strings.TrimSuffix(line, "//") + + if strings.HasPrefix(line, "-") || strings.Contains(line, "*") || strings.Contains(line, "//") { + return nil, errors.New("unsupported project-layout feature") + } + res.from = normaliseSlashes(line) + + for scanner.Scan() { + if strings.TrimSpace(scanner.Text()) != "" { + return nil, errors.New("only one section with one rewrite supported") + } + } + + return &res, nil +} + +// 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 strings.HasPrefix(str, p.from+"/") { + return p.to + "/" + str[len(p.from)+1:] + } + return str +} + +// isWindowsPath checks whether the substring of `path` starting at `idx` looks like a (slashified) +// Windows path, that is, starts with a drive letter followed by a colon and a slash +func isWindowsPath(path string, idx int) bool { + return len(path) >= 3+idx && + path[idx] != '/' && + path[idx+1] == ':' && path[idx+2] == '/' +} + +// Transform transforms the given path according to the project layout: if it starts with the `from` +// prefix, that prefix is relaced by `to`; otherwise the path is returned unchanged. +// +// Unlike the (internal) method `transformString`, this method handles Windows paths sensibly. +func (p *ProjectLayout) Transform(path string) string { + if isWindowsPath(path, 0) { + result := p.transformString("/" + path) + if isWindowsPath(result, 1) && result[0] == '/' { + return result[1:] + } + return result + } else { + return p.transformString(path) + } +} diff --git a/go/extractor/srcarchive/projectlayout_test.go b/go/extractor/srcarchive/projectlayout_test.go new file mode 100644 index 00000000000..fb9f180ff7e --- /dev/null +++ b/go/extractor/srcarchive/projectlayout_test.go @@ -0,0 +1,136 @@ +package srcarchive + +import ( + "io/ioutil" + "os" + "testing" +) + +func mkProjectLayout(projectLayoutSource string, t *testing.T) (*ProjectLayout, error) { + pt, err := ioutil.TempFile("", "path-transformer") + 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()) + } + + return LoadProjectLayout(pt) +} + +func testTransformation(projectLayout *ProjectLayout, t *testing.T, path string, expected string) { + actual := projectLayout.Transform(path) + if actual != expected { + t.Errorf("Expected %s to be transformed to %s, but got %s", path, expected, actual) + } +} + +func TestValidProjectLayout(t *testing.T) { + p, err := mkProjectLayout(` +# /opt/src +/opt/src/root/src/org/repo// +`, t) + + if err != nil { + t.Fatalf("Error loading project layout: %s", err.Error()) + } + + 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") + testTransformation(p, t, "/opt/not/in/src", "/opt/not/in/src") + testTransformation(p, t, "/opt/src/root/srcorg/repo", "/opt/src/root/srcorg/repo") + testTransformation(p, t, "opt/src/root/src/org/repo", "opt/src/root/src/org/repo") +} + +func TestWindowsPaths(t *testing.T) { + p, err := mkProjectLayout(` +# /c:/virtual +/d:// +`, t) + + if err != nil { + t.Fatalf("Error loading project layout: %s", err.Error()) + } + + testTransformation(p, t, "d:/foo", "c:/virtual/foo") +} + +func TestWindowsToUnixPaths(t *testing.T) { + p, err := mkProjectLayout(` +# /opt/src +/d:// +`, t) + + if err != nil { + t.Fatalf("Error loading project layout: %s", err.Error()) + } + + testTransformation(p, t, "d:/foo", "/opt/src/foo") +} + +func TestEmptyProjectLayout(t *testing.T) { + _, err := mkProjectLayout("", t) + if err == nil { + t.Error("Expected error on empty project layout") + } +} + +func TestEmptyProjectLayout2(t *testing.T) { + _, err := mkProjectLayout(` + `, t) + if err == nil { + t.Error("Expected error on empty project layout") + } +} + +func TestExclusion(t *testing.T) { + _, err := mkProjectLayout(` +# /opt/src +-/foo// +`, t) + if err == nil { + t.Error("Expected error on exclusion") + } +} + +func TestStar(t *testing.T) { + _, err := mkProjectLayout(` +# /opt/src +/foo/**/bar// +`, t) + if err == nil { + t.Error("Expected error on star") + } +} + +func TestDoubleSlash(t *testing.T) { + _, err := mkProjectLayout(` +# /opt/src +/foo//bar// +`, t) + if err == nil { + t.Error("Expected error on multiple double slashes") + } +} + +func TestInternalDoubleSlash(t *testing.T) { + _, err := mkProjectLayout(` +# /opt/src +/foo//bar +`, t) + if err == nil { + t.Error("Expected error on internal double slash") + } +} diff --git a/go/extractor/srcarchive/srcarchive.go b/go/extractor/srcarchive/srcarchive.go new file mode 100644 index 00000000000..ee9aea43064 --- /dev/null +++ b/go/extractor/srcarchive/srcarchive.go @@ -0,0 +1,85 @@ +package srcarchive + +import ( + "errors" + "io" + "log" + "os" + "path/filepath" + "strings" +) + +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()) + } + } +} + +// Add inserts the file with the given `path` into the source archive, returning a non-nil +// error value if it fails +func Add(path string) error { + srcArchive, err := srcArchive() + if err != nil { + return err + } + + file, err := os.Open(path) + if err != nil { + return err + } + defer file.Close() + + archiveFilePath := filepath.Join(srcArchive, AppendablePath(path)) + err = os.MkdirAll(filepath.Dir(archiveFilePath), 0755) + if err != nil { + return err + } + archiveFile, err := os.Create(archiveFilePath) + if err != nil { + return err + } + defer archiveFile.Close() + + _, err = io.Copy(archiveFile, file) + return err +} + +func srcArchive() (string, error) { + srcArchive := os.Getenv("CODEQL_EXTRACTOR_GO_SOURCE_ARCHIVE_DIR") + if srcArchive == "" { + srcArchive = os.Getenv("SOURCE_ARCHIVE") + } + if srcArchive == "" { + return "", errors.New("environment variable CODEQL_EXTRACTOR_GO_SOURCE_ARCHIVE_DIR not set") + } + err := os.MkdirAll(srcArchive, 0755) + if err != nil { + return "", err + } + return srcArchive, nil +} + +// TransformPath applies the transformations specified by `SEMMLE_PATH_TRANSFORMER` (if any) to the +// given path +func TransformPath(path string) string { + if pathTransformer != nil { + return filepath.FromSlash(pathTransformer.Transform(filepath.ToSlash(path))) + } + return path +} + +// AppendablePath transforms the given path and also replaces colons with underscores to make it +// possible to append it to a base path on Windows +func AppendablePath(path string) string { + return strings.ReplaceAll(TransformPath(path), ":", "_") +} diff --git a/go/extractor/trap/labels.go b/go/extractor/trap/labels.go new file mode 100644 index 00000000000..1e9bd298447 --- /dev/null +++ b/go/extractor/trap/labels.go @@ -0,0 +1,232 @@ +package trap + +import ( + "fmt" + "go/types" + + "github.com/github/codeql-go/extractor/util" +) + +// Label represents a label +type Label struct { + id string +} + +// InvalidLabel represents an uninitialized or otherwise invalid label +var InvalidLabel Label + +func (lbl *Label) String() string { + return lbl.id +} + +// Labeler is used to represent labels for a file. It is used to write +// associate objects with labels. +type Labeler struct { + tw *Writer + + nextid int + fileLabel Label + nodeLabels map[interface{}]Label // labels associated with AST nodes + scopeLabels map[*types.Scope]Label // labels associated with scopes + objectLabels map[types.Object]Label // labels associated with objects (that is, declared entities) + TypeLabels map[types.Type]Label // labels associated with types + keyLabels map[string]Label +} + +func newLabeler(tw *Writer) *Labeler { + return &Labeler{ + tw, + 10000, + InvalidLabel, + make(map[interface{}]Label), + make(map[*types.Scope]Label), + make(map[types.Object]Label), + make(map[types.Type]Label), + make(map[string]Label), + } +} + +func (l *Labeler) nextID() string { + var id = l.nextid + l.nextid++ + return fmt.Sprintf("#%d", id) +} + +// GlobalID associates a label with the given `key` and returns it +func (l *Labeler) GlobalID(key string) Label { + label, exists := l.keyLabels[key] + if !exists { + id := l.nextID() + fmt.Fprintf(l.tw.zip, "%s=@\"%s\"\n", id, escapeString(key)) + label = Label{id} + l.keyLabels[key] = label + } + return 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) + } + 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") +} + +// LocalID associates a label with the given AST node `nd` and returns it +func (l *Labeler) LocalID(nd interface{}) Label { + label, exists := l.nodeLabels[nd] + if !exists { + label = l.FreshID() + l.nodeLabels[nd] = label + } + return label +} + +// FreshID creates a fresh label and returns it +func (l *Labeler) FreshID() Label { + id := l.nextID() + fmt.Fprintf(l.tw.zip, "%s=*\n", id) + return Label{id} +} + +// ScopeID associates a label with the given scope and returns it +func (l *Labeler) ScopeID(scope *types.Scope, pkg *types.Package) Label { + label, exists := l.scopeLabels[scope] + if !exists { + if scope == types.Universe { + label = l.GlobalID("universe;scope") + } else { + if pkg != nil && pkg.Scope() == scope { + // if this scope is the package scope + pkgLabel := l.GlobalID(util.EscapeTrapSpecialChars(pkg.Path()) + ";package") + label = l.GlobalID("{" + pkgLabel.String() + "};scope") + } else { + label = l.FreshID() + } + } + l.scopeLabels[scope] = label + } + return label +} + +// LookupObjectID looks up the label associated with the given object and returns it; if the object does not have +// a label yet, it tries to construct one based on its scope and/or name, and otherwise returns InvalidLabel +func (l *Labeler) LookupObjectID(object types.Object, typelbl Label) (Label, bool) { + label, exists := l.objectLabels[object] + if !exists { + if object.Parent() == nil { + // blank identifiers and the pseudo-package `.` (from `import . "..."` imports) can only be referenced + // once, so we can use a fresh label for them + if object.Name() == "_" || object.Name() == "." { + label = l.FreshID() + l.objectLabels[object] = label + return label, false + } + label = InvalidLabel + } else { + label, exists = l.ScopedObjectID(object, func() Label { return typelbl }) + } + } + return label, exists +} + +// ScopedObjectID associates a label with the given object and returns it, +// together with a flag indicating whether the object already had a label +// associated with it; the object must have a scope, since the scope's label is +// used to construct the label of the object. +// +// There is a special case for variables that are method receivers. When this is +// detected, we must construct a special label, as the variable can be reached +// from several files via the method. As the type label is required to construct +// the receiver object id, it is also required here. +func (l *Labeler) ScopedObjectID(object types.Object, getTypeLabel func() Label) (Label, bool) { + label, exists := l.objectLabels[object] + if !exists { + scope := object.Parent() + if scope == nil { + panic(fmt.Sprintf("Object has no scope: %v :: %v.\n", object, + l.tw.Package.Fset.Position(object.Pos()))) + } else { + // associate method receiver objects to special keys, because those can be + // referenced from other files via their method + meth := findMethodWithGivenReceiver(object.Type(), object) + if meth == nil { + if pointerType, ok := object.Type().(*types.Pointer); ok { + meth = findMethodWithGivenReceiver(pointerType.Elem(), object) + } + } + + if meth != nil { + methlbl, _ := l.MethodID(meth, getTypeLabel()) + label, _ = l.ReceiverObjectID(object, methlbl) + } else { + scopeLbl := l.ScopeID(scope, object.Pkg()) + label = l.GlobalID(fmt.Sprintf("{%v},%s;object", scopeLbl, object.Name())) + } + } + l.objectLabels[object] = label + } + return label, exists +} + +func findMethodWithGivenReceiver(tp types.Type, object types.Object) *types.Func { + if namedType, ok := tp.(*types.Named); ok { + for i := 0; i < namedType.NumMethods(); i++ { + meth := namedType.Method(i) + if object == meth.Type().(*types.Signature).Recv() { + return meth + } + } + } + return nil +} + +// ReceiverObjectID associates a label with the given object and returns it, together with a flag indicating whether +// the object already had a label associated with it; the object must be the receiver of `methlbl`, since that label +// is used to construct the label of the object +func (l *Labeler) ReceiverObjectID(object types.Object, methlbl Label) (Label, bool) { + label, exists := l.objectLabels[object] + if !exists { + // if we can't, construct a special label + label = l.GlobalID(fmt.Sprintf("{%v},%s;receiver", methlbl, object.Name())) + l.objectLabels[object] = label + } + return label, exists +} + +// FieldID associates a label with the given field and returns it, together with +// a flag indicating whether the field already had a label associated with it; +// the field must belong to `structlbl`, since that label is used to construct +// the label of the field. When the field name is the blank identifier `_`, +// `idx` is used to generate a unique name. +func (l *Labeler) FieldID(field *types.Var, idx int, structlbl Label) (Label, bool) { + label, exists := l.objectLabels[field] + if !exists { + name := field.Name() + // there can be multiple fields with the blank identifier, so use index to + // distinguish them + if field.Name() == "_" { + name = fmt.Sprintf("_%d", idx) + } + label = l.GlobalID(fmt.Sprintf("{%v},%s;field", structlbl, name)) + l.objectLabels[field] = label + } + return label, exists +} + +// MethodID associates a label with the given method and returns it, together with a flag indicating whether +// the method already had a label associated with it; the method must belong to `recvtyplbl`, since that label +// is used to construct the label of the method +func (l *Labeler) MethodID(method types.Object, recvtyplbl Label) (Label, bool) { + label, exists := l.objectLabels[method] + if !exists { + label = l.GlobalID(fmt.Sprintf("{%v},%s;method", recvtyplbl, method.Name())) + l.objectLabels[method] = label + } + return label, exists +} diff --git a/go/extractor/trap/trapwriter.go b/go/extractor/trap/trapwriter.go new file mode 100644 index 00000000000..4c0911e24d7 --- /dev/null +++ b/go/extractor/trap/trapwriter.go @@ -0,0 +1,168 @@ +package trap + +import ( + "bufio" + "compress/gzip" + "errors" + "fmt" + "go/ast" + "go/types" + "io/ioutil" + "os" + "path/filepath" + "unicode/utf8" + + "github.com/github/codeql-go/extractor/srcarchive" + "golang.org/x/tools/go/packages" +) + +// A Writer provides methods for writing data to a TRAP file +type Writer struct { + zip *gzip.Writer + w *bufio.Writer + file *os.File + Labeler *Labeler + path string + trapFilePath string + Package *packages.Package + TypesOverride map[ast.Expr]types.Type + ObjectsOverride map[types.Object]types.Object +} + +func FileFor(path string) (string, error) { + trapFolder, err := trapFolder() + if err != nil { + return "", err + } + + return filepath.Join(trapFolder, srcarchive.AppendablePath(path)+".trap.gz"), nil +} + +// NewWriter creates a TRAP file for the given path and returns a writer for +// writing to it +func NewWriter(path string, pkg *packages.Package) (*Writer, error) { + trapFilePath, err := FileFor(path) + if err != nil { + return nil, err + } + trapFileDir := filepath.Dir(trapFilePath) + err = os.MkdirAll(trapFileDir, 0755) + if err != nil { + return nil, err + } + tmpFile, err := ioutil.TempFile(trapFileDir, filepath.Base(trapFilePath)) + if err != nil { + return nil, err + } + bufioWriter := bufio.NewWriter(tmpFile) + zipWriter := gzip.NewWriter(bufioWriter) + tw := &Writer{ + zipWriter, + bufioWriter, + tmpFile, + nil, + path, + trapFilePath, + pkg, + make(map[ast.Expr]types.Type), + make(map[types.Object]types.Object), + } + tw.Labeler = newLabeler(tw) + return tw, nil +} + +func trapFolder() (string, error) { + trapFolder := os.Getenv("CODEQL_EXTRACTOR_GO_TRAP_DIR") + if trapFolder == "" { + trapFolder = os.Getenv("TRAP_FOLDER") + } + if trapFolder == "" { + return "", errors.New("environment variable CODEQL_EXTRACTOR_GO_TRAP_DIR not set") + } + err := os.MkdirAll(trapFolder, 0755) + if err != nil { + return "", err + } + return trapFolder, nil +} + +// Close the underlying file writer +func (tw *Writer) Close() error { + err := tw.zip.Close() + if err != nil { + // return zip-close error, but ignore file-close error + tw.file.Close() + return err + } + err = tw.w.Flush() + if err != nil { + // throw away close error because write errors are likely to be more important + tw.file.Close() + return err + } + err = tw.file.Close() + if err != nil { + return err + } + return os.Rename(tw.file.Name(), tw.trapFilePath) +} + +// ForEachObject iterates over all objects labeled by this labeler, and invokes +// the provided callback with a writer for the trap file, the object, and its +// label. It returns true if any extra objects were labeled and false otherwise. +func (tw *Writer) ForEachObject(cb func(*Writer, types.Object, Label)) bool { + // copy the objects into an array so that our behaviour is deterministic even + // if `cb` adds any new objects + i := 0 + objects := make([]types.Object, len(tw.Labeler.objectLabels)) + for k := range tw.Labeler.objectLabels { + objects[i] = k + i++ + } + + for _, object := range objects { + cb(tw, object, tw.Labeler.objectLabels[object]) + } + + return len(tw.Labeler.objectLabels) != len(objects) +} + +const max_strlen = 1024 * 1024 + +func capStringLength(s string) string { + // if the UTF8-encoded string is longer than 1MiB, we truncate it + if len(s) > max_strlen { + // to ensure that the truncated string is valid UTF-8, we find the last byte at or + // before index max_strlen that starts a UTF-8 encoded character, and then cut off + // right before that byte + end := max_strlen + for ; !utf8.RuneStart(s[end]); end-- { + } + return s[0:end] + } + return s +} + +// Emit writes out a tuple of values for the given `table` +func (tw *Writer) Emit(table string, values []interface{}) error { + fmt.Fprintf(tw.zip, "%s(", table) + for i, value := range values { + if i > 0 { + fmt.Fprint(tw.zip, ", ") + } + switch value := value.(type) { + case Label: + fmt.Fprint(tw.zip, value.id) + case string: + fmt.Fprintf(tw.zip, "\"%s\"", escapeString(capStringLength(value))) + case int: + fmt.Fprintf(tw.zip, "%d", value) + case float64: + fmt.Fprintf(tw.zip, "%e", value) + default: + return errors.New("Cannot emit value") + } + } + fmt.Fprintf(tw.zip, ")\n") + return nil +} diff --git a/go/extractor/trap/trapwriter_test.go b/go/extractor/trap/trapwriter_test.go new file mode 100644 index 00000000000..4fe1886b3ec --- /dev/null +++ b/go/extractor/trap/trapwriter_test.go @@ -0,0 +1,68 @@ +package trap + +import ( + "strings" + "testing" +) + +const ( + asciiChar = "*" + bmpChar = "\u2028" + nonBmpChar = "\U000101d0" +) + +func TestCapStringLength(t *testing.T) { + // test simple cases only involving ASCII characters + short := strings.Repeat(asciiChar, max_strlen-1) + if capStringLength(short) != short { + t.Errorf("Strings shorter than maximum length should not be truncated") + } + + short = strings.Repeat(asciiChar, max_strlen) + if capStringLength(short) != short { + t.Errorf("Strings no longer than maximum length should not be truncated") + } + + long := strings.Repeat(asciiChar, max_strlen+1) + if capStringLength(long) != long[0:max_strlen] { + t.Errorf("Strings longer than maximum length should be truncated") + } + + // test chopping off non-ASCII characters + prefix := strings.Repeat(asciiChar, max_strlen) + long = prefix + bmpChar + if capStringLength(long) != prefix { + t.Errorf("BMP character after max_strlen should be correctly chopped off") + } + + prefix = strings.Repeat(asciiChar, max_strlen) + long = prefix + nonBmpChar + if capStringLength(long) != prefix { + t.Errorf("Non-BMP character after max_strlen should be correctly chopped off") + } + + prefix = strings.Repeat(asciiChar, max_strlen-(len(bmpChar)-1)) + long = prefix + bmpChar + if capStringLength(long) != prefix { + t.Errorf("BMP character straddling max_strlen should be correctly chopped off") + } + + prefix = strings.Repeat(asciiChar, max_strlen-(len(nonBmpChar)-1)) + long = prefix + nonBmpChar + if capStringLength(long) != prefix { + t.Errorf("Non-BMP character straddling max_strlen should be correctly chopped off") + } + + // test preserving non-ASCII characters that just about fit + prefix = strings.Repeat(asciiChar, max_strlen-len(bmpChar)) + short = prefix + bmpChar + if capStringLength(short) != short { + t.Errorf("BMP character before max_strlen should be correctly preserved") + } + + prefix = strings.Repeat(asciiChar, max_strlen-len(nonBmpChar)) + short = prefix + nonBmpChar + if capStringLength(short) != short { + t.Errorf("Non-BMP character before max_strlen should be correctly preserved") + } +} diff --git a/go/extractor/trap/util.go b/go/extractor/trap/util.go new file mode 100644 index 00000000000..2e32cfc04af --- /dev/null +++ b/go/extractor/trap/util.go @@ -0,0 +1,9 @@ +package trap + +import ( + "strings" +) + +func escapeString(s string) string { + return strings.Replace(s, "\"", "\"\"", -1) +} diff --git a/go/extractor/util/util.go b/go/extractor/util/util.go new file mode 100644 index 00000000000..5725c03d5b6 --- /dev/null +++ b/go/extractor/util/util.go @@ -0,0 +1,210 @@ +package util + +import ( + "errors" + "log" + "os" + "os/exec" + "path/filepath" + "runtime" + "strings" +) + +var extractorPath string + +// Getenv retrieves the value of the environment variable named by the key. +// If that variable is not present, it iterates over the given aliases until +// it finds one that is. If none are present, the empty string is returned. +func Getenv(key string, aliases ...string) string { + val := os.Getenv(key) + if val != "" { + return val + } + for _, alias := range aliases { + val = os.Getenv(alias) + if val != "" { + return val + } + } + return "" +} + +// runGoList is a helper function for running go list with format `format` and flags `flags` on +// package `pkgpath`. +func runGoList(format string, pkgpath string, flags ...string) (string, error) { + return runGoListWithEnv(format, pkgpath, nil, flags...) +} + +func runGoListWithEnv(format string, pkgpath string, additionalEnv []string, flags ...string) (string, error) { + args := append([]string{"list", "-e", "-f", format}, flags...) + args = append(args, pkgpath) + cmd := exec.Command("go", args...) + cmd.Env = append(os.Environ(), additionalEnv...) + out, err := cmd.Output() + + if err != nil { + if err, ok := err.(*exec.ExitError); ok { + log.Printf("Warning: go list command failed, output below:\nstdout:\n%s\nstderr:\n%s\n", out, err.Stderr) + } else { + log.Printf("Warning: Failed to run go list: %s", err.Error()) + } + return "", err + } + + return strings.TrimSpace(string(out)), nil +} + +// GetModDir gets the absolute directory of the module containing the package with path +// `pkgpath`. It passes the `go list` the flags specified by `flags`. +func GetModDir(pkgpath string, flags ...string) string { + // enable module mode so that we can find a module root if it exists, even if go module support is + // disabled by a build + mod, err := runGoListWithEnv("{{.Module}}", pkgpath, []string{"GO111MODULE=on"}, flags...) + if err != nil || mod == "" { + // if the command errors or modules aren't being used, return the empty string + return "" + } + + modDir, err := runGoListWithEnv("{{.Module.Dir}}", pkgpath, []string{"GO111MODULE=on"}, flags...) + if err != nil { + return "" + } + + abs, err := filepath.Abs(modDir) + if err != nil { + log.Printf("Warning: unable to make %s absolute: %s", modDir, err.Error()) + return "" + } + return abs +} + +// GetPkgDir gets the absolute directory containing the package with path `pkgpath`. It passes the +// `go list` command the flags specified by `flags`. +func GetPkgDir(pkgpath string, flags ...string) string { + pkgDir, err := runGoList("{{.Dir}}", pkgpath, flags...) + if err != nil { + return "" + } + + abs, err := filepath.Abs(pkgDir) + if err != nil { + log.Printf("Warning: unable to make %s absolute: %s", pkgDir, err.Error()) + return "" + } + return abs +} + +// DepErrors checks there are any errors resolving dependencies for `pkgpath`. It passes the `go +// list` command the flags specified by `flags`. +func DepErrors(pkgpath string, flags ...string) bool { + out, err := runGoList("{{if .DepsErrors}}{{else}}error{{end}}", pkgpath, flags...) + if err != nil { + // if go list failed, assume dependencies are broken + return false + } + + return out != "" +} + +// FileExists tests whether the file at `filename` exists and is not a directory. +func FileExists(filename string) bool { + info, err := os.Stat(filename) + if err != nil && !os.IsNotExist(err) { + log.Printf("Unable to stat %s: %s\n", filename, err.Error()) + } + return err == nil && !info.IsDir() +} + +// DirExists tests whether `filename` exists and is a directory. +func DirExists(filename string) bool { + info, err := os.Stat(filename) + if err != nil && !os.IsNotExist(err) { + log.Printf("Unable to stat %s: %s\n", filename, err.Error()) + } + return err == nil && info.IsDir() +} + +func RunCmd(cmd *exec.Cmd) bool { + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + in, _ := cmd.StdinPipe() + err := cmd.Start() + if err != nil { + log.Printf("Running %s failed, continuing anyway: %s\n", cmd.Path, err.Error()) + return false + } + in.Close() + err = cmd.Wait() + if err != nil { + log.Printf("Running %s failed, continuing anyway: %s\n", cmd.Path, err.Error()) + return false + } + + return true +} + +func getOsToolsSubdir() (string, error) { + platform, set := os.LookupEnv("CODEQL_PLATFORM") + if set && platform != "" { + return platform, nil + } + + switch runtime.GOOS { + case "darwin": + return "osx64", nil + case "linux": + return "linux64", nil + case "windows": + return "win64", nil + } + return "", errors.New("Unsupported OS: " + runtime.GOOS) +} + +func getExtractorDir() (string, error) { + extractorRoot := os.Getenv("CODEQL_EXTRACTOR_GO_ROOT") + if extractorRoot == "" { + log.Print("CODEQL_EXTRACTOR_GO_ROOT not set.\nThis binary should not be run manually; instead, use the CodeQL CLI or VSCode extension. See https://securitylab.github.com/tools/codeql.\n") + log.Print("Falling back to guess the root based on this executable's path.\n") + + mypath, err := os.Executable() + if err == nil { + return filepath.Dir(mypath), nil + } else { + return "", errors.New("CODEQL_EXTRACTOR_GO_ROOT not set, and could not determine path of this executable: " + err.Error()) + } + } + + osSubdir, err := getOsToolsSubdir() + if err != nil { + return "", err + } + + return filepath.Join(extractorRoot, "tools", osSubdir), nil +} + +func GetExtractorPath() (string, error) { + if extractorPath != "" { + return extractorPath, nil + } + + dirname, err := getExtractorDir() + if err != nil { + return "", err + } + extractorPath := filepath.Join(dirname, "go-extractor") + if runtime.GOOS == "windows" { + extractorPath = extractorPath + ".exe" + } + return extractorPath, nil +} + +func EscapeTrapSpecialChars(s string) string { + // Replace TRAP special characters with their HTML entities, as well as '&' to avoid ambiguity. + s = strings.ReplaceAll(s, "&", "&") + s = strings.ReplaceAll(s, "{", "{") + s = strings.ReplaceAll(s, "}", "}") + s = strings.ReplaceAll(s, "\"", """) + s = strings.ReplaceAll(s, "@", "@") + s = strings.ReplaceAll(s, "#", "#") + return s +} diff --git a/go/go.mod b/go/go.mod new file mode 100644 index 00000000000..25e2d87d342 --- /dev/null +++ b/go/go.mod @@ -0,0 +1,13 @@ +module github.com/github/codeql-go + +go 1.18 + +require ( + golang.org/x/mod v0.5.0 + golang.org/x/tools v0.1.5 +) + +require ( + golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect +) diff --git a/go/go.sum b/go/go.sum new file mode 100644 index 00000000000..57b82477ee7 --- /dev/null +++ b/go/go.sum @@ -0,0 +1,28 @@ +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0 h1:UG21uOlmZabA4fW5i7ZX6bjw1xELEGg/ZLgZq9auk/Q= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/go/old-change-notes/1.23/analysis-go.md b/go/old-change-notes/1.23/analysis-go.md new file mode 100644 index 00000000000..5710d7acfcd --- /dev/null +++ b/go/old-change-notes/1.23/analysis-go.md @@ -0,0 +1,15 @@ +# Improvements to Go analysis + +## New queries + +| **Query** | **Tags** | **Purpose** | +|---------------------------------------------------------------------------|----------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------| +| Clear-text logging of sensitive information (`go/clear-text-logging`) | security, external/cwe/cwe-312, external/cwe/cwe-315, external/cwe/cwe-359 | Highlights code that writes sensitive information to a log file, or to the console, without encryption or hashing. Results are shown on LGTM by default. | +| Open URL redirect (`go/unvalidated-url-redirection`) | security, external/cwe/cwe-601 | Highlights code that redirects to a URL that may be controlled by an attacker. Results are shown on LGTM by default. | + +## Changes to existing queries + +| **Query** | **Expected impact** | **Change** | +|-----------------------------------------------------|------------------------------|-----------------------------------------------------------| +| Expression has no effect (`go/useless-expression`) | Fewer false positive results | This query no longer flags calls to empty stub functions. | +| Hard-coded credentials (`go/hardcoded-credentials`) | Fewer false positive results | This query now recognizes more placeholder credentials. | diff --git a/go/old-change-notes/1.24/analysis-go.md b/go/old-change-notes/1.24/analysis-go.md new file mode 100644 index 00000000000..a9f38cb1ec2 --- /dev/null +++ b/go/old-change-notes/1.24/analysis-go.md @@ -0,0 +1,39 @@ +# Improvements to Go analysis + +## General improvements + +* You can now suppress alerts using either single-line block comments (`/* ... */`) or line comments (`// ...`). +* Analysis of flow through fields and elements of arrays and slices has been improved, which may lead to more results from the security queries. +* Detection of test code has been improved. LGTM will not show alerts in test code by default. +* Go 1.14 library changes have been modeled. +* More sources of untrusted input as well as vulnerable sinks are modeled, which may lead to more results from the security queries. + +## New queries + +The CodeQL library for Go now contains a folder of simple "cookbook" queries that show how to access basic Go elements using the predicates defined by the standard library. They're intended to give you a starting point for your own experiments and to help you work out the best way to frame your questions using CodeQL. You can find them in the `examples/snippets` folder in the [CodeQL for Go repository](https://github.com/github/codeql-go/tree/main/ql/examples/snippets). + +| **Query** | **Tags** | **Purpose** | +|------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Bad check of redirect URL (`go/bad-redirect-check`) | correctness, security, external/cwe/cwe-601 | Highlights checks that ensure redirect URLs start with `/` but don't check for `//` or `/\`. Results are shown on LGTM by default. | +| Constant length comparison (`go/constant-length-comparison`) | correctness | Highlights code that checks the length of an array or slice against a constant before indexing it using a variable, suggesting a logic error. Results are shown on LGTM by default. | +| Disabled TLS certificate check (`go/disabled-certificate-check`) | security, external/cwe/295 | Highlights code that disables TLS certificate checking. Results are shown on LGTM by default. | +| Impossible interface nil check (`go/impossible-interface-nil-check`) | correctness | Highlights code that compares an interface value that cannot be `nil` to `nil`, suggesting a logic error. Results are shown on LGTM by default. | +| Incomplete URL scheme check (`go/incomplete-url-scheme-check`) | correctness, security, external/cwe/cwe-020 | Highlights checks for `javascript` URLs that do not take `data` or `vbscript` URLs into account. Results are shown on LGTM by default. | +| Potentially unsafe quoting (`go/unsafe-quoting`) | correctness, security, external/cwe/cwe-078, external/cwe/cwe-089, external/cwe/cwe-094 | Highlights code that constructs a quoted string literal containing data that may itself contain quotes. Results are shown on LGTM by default. | +| Size computation for allocation may overflow (`go/allocation-size-overflow`) | correctness, security, external/cwe/cwe-190 | Highlights code that computes the size of an allocation based on the size of a potentially large object. Results are shown on LGTM by default. | +| Uncontrolled data used in network request (`go/request-forgery`) | correctness, security, external/cwe/cwe-918 | Highlights code that uses uncontrolled user input to make a request. Results are shown on LGTM by default. | +| XPath injection (`go/xml/xpath-injection`) | security, external/cwe/cwe-643 | Highlights code that uses remote input in an XPath expression. Results are shown on LGTM by default. | + +## Changes to existing queries + +| **Query** | **Expected impact** | **Change** | +|-------------------------------------------------------------------------------|------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Arbitrary file write during zip extraction ("zip slip") (`go/zipslip`) | Fewer false positive results | The query now excludes more cases where it is safe to use a path extractor from an archive. | +| Bitwise exclusive-or used like exponentiation (`go/mistyped-exponentiation`) | Fewer false positive results | The query now identifies when the value of an xor is assigned to a mask object, and excludes such results. | +| Command built from user-controlled sources (`go/command-injection`) | More results | The library models used by the query have been improved, allowing it to flag more potentially problematic cases, including sources that flow into shells, sudo, or programming-language interpreters as arguments. | +| Database query built from user-controlled sources (`go/sql-injection`) | More results | The library models used by the query have been improved, allowing it to flag more potentially problematic cases. | +| Identical operands (`go/redundant-operation`) | Fewer false positive results | The query no longer flags cases where the operands have the same value but are syntactically distinct, since this is usually intentional. | +| Incomplete regular expression for hostnames (`go/incomplete-hostname-regexp`) | More results | The query now flags unescaped dots before the TLD in a hostname regex. | +| Open URL redirect (`go/unvalidated-url-redirection`) | Fewer false positive results | The query now identifies some sources that are not attacker-controlled, and excludes results with such sources. | +| Reflected cross-site scripting (`go/reflected-xss`) | Fewer results | Untrusted input flowing into an HTTP header definition or into an `fmt.Fprintf` call with a constant prefix is no longer flagged, since it is in both cases often harmless. | +| Useless assignment to field (`go/useless-assignment-to-field`) | Fewer false positive results | The query now conservatively handles fields promoted through embedded pointer types. | diff --git a/go/old-change-notes/1.24/extractor-go.md b/go/old-change-notes/1.24/extractor-go.md new file mode 100644 index 00000000000..c51d47a78d1 --- /dev/null +++ b/go/old-change-notes/1.24/extractor-go.md @@ -0,0 +1,19 @@ +[[ condition: enterprise-only ]] + +# Improvements to Go analysis + +## Improvements to the autobuilder + +* When Makefiles or custom build scripts are present in the codebase, the autobuilder uses them to install dependencies. The build command + to invoke can be configured via `lgtm.yml`, or by setting the environment variable `CODEQL_EXTRACTOR_GO_BUILD_COMMAND`. +* The autobuilder now attempts to automatically detect when dependencies have been vendored and use `-mod=vendor` appropriately. + +## Changes to code extraction + +* The extractor now supports Go 1.14. +* In resource-constrained environments, the environment variable `CODEQL_EXTRACTOR_GO_MAX_GOROUTINES` can be used to limit the + number of parallel goroutines started by the extractor, which reduces CPU and memory requirements. The default value for this + variable is 32. +* The extractor now uses buffered i/o for writing database files, which reduces the amount of time taken for extraction. +* The extractor now compresses intermediate files used for constructing databases, which reduces the amount of disk space it requires. +* The extractor now supports extracting `go.mod` files, enabling queries on dependencies and their versions. diff --git a/go/old-change-notes/2020-04-30-syscall-functions.md b/go/old-change-notes/2020-04-30-syscall-functions.md new file mode 100644 index 00000000000..caa2cf56654 --- /dev/null +++ b/go/old-change-notes/2020-04-30-syscall-functions.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Command built from user-controlled sources" has been improved to recognize methods from the `syscall` library, which may lead to more alerts. diff --git a/go/old-change-notes/2020-05-01-bad-redirect-check.md b/go/old-change-notes/2020-05-01-bad-redirect-check.md new file mode 100644 index 00000000000..6ee5d0fb235 --- /dev/null +++ b/go/old-change-notes/2020-05-01-bad-redirect-check.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Bad redirect check" (`go/bad-redirect-check`) now requires that the checked variable is actually used in a redirect as opposed to relying on a name-based heuristic. This eliminates some false positive results, and adds more true positive results. diff --git a/go/old-change-notes/2020-05-01-macaron-model.md b/go/old-change-notes/2020-05-01-macaron-model.md new file mode 100644 index 00000000000..056e7d093cc --- /dev/null +++ b/go/old-change-notes/2020-05-01-macaron-model.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Basic support for the [Macaron](https://go-macaron.com/) HTTP library has been added, which may lead to more results from the security queries. \ No newline at end of file diff --git a/go/old-change-notes/2020-05-05-clear-text-logging.md b/go/old-change-notes/2020-05-05-clear-text-logging.md new file mode 100644 index 00000000000..ad9e974557f --- /dev/null +++ b/go/old-change-notes/2020-05-05-clear-text-logging.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Clear-text logging of sensitive information" has been improved to recognize more logging APIs, which may lead to more alerts. \ No newline at end of file diff --git a/go/old-change-notes/2020-05-05-mux-model.md b/go/old-change-notes/2020-05-05-mux-model.md new file mode 100644 index 00000000000..4ca9d688dd7 --- /dev/null +++ b/go/old-change-notes/2020-05-05-mux-model.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* Basic support for the [Mux](https://github.com/gorilla/mux/) HTTP library has been added, which + may lead to more results from the security queries. diff --git a/go/old-change-notes/2020-05-07-update-data-flow.md b/go/old-change-notes/2020-05-07-update-data-flow.md new file mode 100644 index 00000000000..6d67c59b041 --- /dev/null +++ b/go/old-change-notes/2020-05-07-update-data-flow.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* The data-flow library has been improved, which affects and improves most security queries. In particular, + flow through functions involving nested field reads and writes is now modeled more fully. diff --git a/go/old-change-notes/2020-05-11-reflected-xss.md b/go/old-change-notes/2020-05-11-reflected-xss.md new file mode 100644 index 00000000000..0d1f703c7e4 --- /dev/null +++ b/go/old-change-notes/2020-05-11-reflected-xss.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* The query "Reflected cross-site scripting" has been improved to recognize more cases where the + value should be considered to be safe, which should lead to fewer false positive results. diff --git a/go/old-change-notes/2020-05-12-tainted-path.md b/go/old-change-notes/2020-05-12-tainted-path.md new file mode 100644 index 00000000000..ccd78ed7d1f --- /dev/null +++ b/go/old-change-notes/2020-05-12-tainted-path.md @@ -0,0 +1,4 @@ +lgtm,codescanning +* The queries "Uncontrolled data used in path expression" and "Arbitrary file write during zip + extraction ("zip slip")" have been improved to recognize more file APIs, which may lead to more + alerts. diff --git a/go/old-change-notes/2020-05-13-io-model.md b/go/old-change-notes/2020-05-13-io-model.md new file mode 100644 index 00000000000..0e3531efedc --- /dev/null +++ b/go/old-change-notes/2020-05-13-io-model.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* Modeling of the standard `io` library has been improved, which may lead to more results from the + security queries. diff --git a/go/old-change-notes/2020-05-18-redundant-recover.md b/go/old-change-notes/2020-05-18-redundant-recover.md new file mode 100644 index 00000000000..cca5e8fe490 --- /dev/null +++ b/go/old-change-notes/2020-05-18-redundant-recover.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* A new query "Redundant call to recover" (`go/redundant-recover`) has been added. The query detects calls to `recover` that have no effect. diff --git a/go/old-change-notes/2020-05-20-mongodb-model.md b/go/old-change-notes/2020-05-20-mongodb-model.md new file mode 100644 index 00000000000..ff0a09d37de --- /dev/null +++ b/go/old-change-notes/2020-05-20-mongodb-model.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* Modeling of the `go.mongodb.org/mongo-driver/mongo` package has been added, which may lead to more + results from the security queries. diff --git a/go/old-change-notes/2020-05-20-request-forgery-sanitizers.md b/go/old-change-notes/2020-05-20-request-forgery-sanitizers.md new file mode 100644 index 00000000000..cb1fdcb5acf --- /dev/null +++ b/go/old-change-notes/2020-05-20-request-forgery-sanitizers.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Uncontrolled data used in network request" is now more precise, which may reduce the number of false positives. diff --git a/go/old-change-notes/2020-05-22-websocket-model.md b/go/old-change-notes/2020-05-22-websocket-model.md new file mode 100644 index 00000000000..5ce24528ee2 --- /dev/null +++ b/go/old-change-notes/2020-05-22-websocket-model.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* Modeling of several WebSocket libraries has been added, which may lead to more results from the + security queries. diff --git a/go/old-change-notes/2020-05-29-open-redirect.md b/go/old-change-notes/2020-05-29-open-redirect.md new file mode 100644 index 00000000000..182a001ae09 --- /dev/null +++ b/go/old-change-notes/2020-05-29-open-redirect.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Open URL redirect" (`go/unvalidated-url-redirection`) now recognizes values returned by method `http.Request.FormValue` as possibly user controlled, allowing it to flag more true positive results. diff --git a/go/old-change-notes/2020-06-11-build-tracing.md b/go/old-change-notes/2020-06-11-build-tracing.md new file mode 100644 index 00000000000..b500742db09 --- /dev/null +++ b/go/old-change-notes/2020-06-11-build-tracing.md @@ -0,0 +1,5 @@ +lgtm,codescanning +* The Go extractor now supports build tracing, allowing users to supply a build command when + creating databases with the CodeQL CLI or via configuration. It currently only supports projects + that use Go modules. To opt-in, set the environment variable `CODEQL_EXTRACTOR_GO_BUILD_TRACING` + to `on`, or supply a build command. diff --git a/go/old-change-notes/2020-06-12-more-dependency-extraction.md b/go/old-change-notes/2020-06-12-more-dependency-extraction.md new file mode 100644 index 00000000000..76523ced9e8 --- /dev/null +++ b/go/old-change-notes/2020-06-12-more-dependency-extraction.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The extractor now attempts to extract the AST of all dependencies that are related to the packages passed explicitly on the commandline, which is determined by using the module root or, if not using modules, the directory containing the source for those packages. In particular, this means if a package passed to the extractor depends on another package inside the same module, the dependency's AST will now be extracted. diff --git a/go/old-change-notes/2020-06-16-email-injection.md b/go/old-change-notes/2020-06-16-email-injection.md new file mode 100644 index 00000000000..63abd57f2d6 --- /dev/null +++ b/go/old-change-notes/2020-06-16-email-injection.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Email injection" (`go/email-injection`) has been moved out of the experimental folder. The query detects when untrusted input can be incorporated directly into an email. diff --git a/go/old-change-notes/2020-06-17-reflected-xss-refinements.md b/go/old-change-notes/2020-06-17-reflected-xss-refinements.md new file mode 100644 index 00000000000..7cb277327dd --- /dev/null +++ b/go/old-change-notes/2020-06-17-reflected-xss-refinements.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* The query "Reflected cross-site scripting" has been improved to more correctly determine whether + an HTML mime type will be sniffed, which should lead to more accurate results. diff --git a/go/old-change-notes/2020-06-19-call-graph.md b/go/old-change-notes/2020-06-19-call-graph.md new file mode 100644 index 00000000000..891ddda62b4 --- /dev/null +++ b/go/old-change-notes/2020-06-19-call-graph.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Resolution of method calls through interfaces has been improved, resulting in more precise call-graph information, which in turn may eliminate false positives from the security queries. diff --git a/go/old-change-notes/2020-06-19-cyclic-field-lookup.md b/go/old-change-notes/2020-06-19-cyclic-field-lookup.md new file mode 100644 index 00000000000..04901d5757f --- /dev/null +++ b/go/old-change-notes/2020-06-19-cyclic-field-lookup.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* A bug has been fixed that could cause the analysis not to terminate in the presence of cycles through embedded struct fields. \ No newline at end of file diff --git a/go/old-change-notes/2020-06-19-switch-block-without-test.md b/go/old-change-notes/2020-06-19-switch-block-without-test.md new file mode 100644 index 00000000000..17f20f6840f --- /dev/null +++ b/go/old-change-notes/2020-06-19-switch-block-without-test.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* A bug has been fixed that could cause the incorrect analysis of control flow around switch statements. diff --git a/go/old-change-notes/2020-06-24-clear-text-logging.md b/go/old-change-notes/2020-06-24-clear-text-logging.md new file mode 100644 index 00000000000..6dd26dbb1ee --- /dev/null +++ b/go/old-change-notes/2020-06-24-clear-text-logging.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Clear-text logging of sensitive information" has been improved to recognize more sources of sensitive data, which may lead to more alerts. The query is now also more precise, which may reduce the number of false positives. diff --git a/go/old-change-notes/2020-06-24-open-redirect.md b/go/old-change-notes/2020-06-24-open-redirect.md new file mode 100644 index 00000000000..3916ca733e8 --- /dev/null +++ b/go/old-change-notes/2020-06-24-open-redirect.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Open URL redirect" (`go/unvalidated-url-redirection`) now recognizes more problematic fields of `URL` objects, allowing it to flag more results. \ No newline at end of file diff --git a/go/old-change-notes/2020-06-26-taint-model-tar-zip.md b/go/old-change-notes/2020-06-26-taint-model-tar-zip.md new file mode 100644 index 00000000000..10cdaa41b46 --- /dev/null +++ b/go/old-change-notes/2020-06-26-taint-model-tar-zip.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* Modeling of the `archive/tar` and `archive/zip` packages has been added, which may lead to more + results from the security queries. diff --git a/go/old-change-notes/2020-06-26-taint-through-range.md b/go/old-change-notes/2020-06-26-taint-through-range.md new file mode 100644 index 00000000000..55d870d1c88 --- /dev/null +++ b/go/old-change-notes/2020-06-26-taint-through-range.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Taint tracking through `range` statements has been improved, which may cause more results from the security queries. diff --git a/go/old-change-notes/2020-07-06-repo-with-file-url-origin.md b/go/old-change-notes/2020-07-06-repo-with-file-url-origin.md new file mode 100644 index 00000000000..f84d4c995a2 --- /dev/null +++ b/go/old-change-notes/2020-07-06-repo-with-file-url-origin.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* A bug has been fixed that caused the autobuilder to not work on repositories with a `file://` URL as `origin`. diff --git a/go/old-change-notes/2020-07-06-tolerate-more-unreachable-returns.md b/go/old-change-notes/2020-07-06-tolerate-more-unreachable-returns.md new file mode 100644 index 00000000000..766c767e77e --- /dev/null +++ b/go/old-change-notes/2020-07-06-tolerate-more-unreachable-returns.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Unreachable statement" (`go/unreachable-statement`) now tolerates more unreachable return statements, which can often be required in Go following a function call that cannot return. Newly tolerated statements include `return true`, `return MyStruct{0, true}`, and any return when the return value has type `error`. This eliminates some nuisance results. diff --git a/go/old-change-notes/2020-07-07-missing-error-check.md b/go/old-change-notes/2020-07-07-missing-error-check.md new file mode 100644 index 00000000000..9202e3bc9ec --- /dev/null +++ b/go/old-change-notes/2020-07-07-missing-error-check.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* New query "Missing error check" (`go/missing-error-check`) added. This checks for dangerous pointer dereferences when an accompanying error value returned from a call has not been checked. diff --git a/go/old-change-notes/2020-07-15-insecure-tls.md b/go/old-change-notes/2020-07-15-insecure-tls.md new file mode 100644 index 00000000000..8cacfa5b2bf --- /dev/null +++ b/go/old-change-notes/2020-07-15-insecure-tls.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Query "Insecure TLS configuration" (`go/insecure-tls`) is promoted from experimental status. This checks for use of insecure SSL/TLS versions and cipher suites. diff --git a/go/old-change-notes/2020-07-22-ssh-host-checking.md b/go/old-change-notes/2020-07-22-ssh-host-checking.md new file mode 100644 index 00000000000..7f83626bf0e --- /dev/null +++ b/go/old-change-notes/2020-07-22-ssh-host-checking.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Query "Use of insecure HostKeyCallback implementation" (`go/insecure-hostkeycallback`) is promoted from experimental status. This checks for insecurely omitting SSH host-key verification. diff --git a/go/old-change-notes/2020-07-28-library-models.md b/go/old-change-notes/2020-07-28-library-models.md new file mode 100644 index 00000000000..41a0de5c064 --- /dev/null +++ b/go/old-change-notes/2020-07-28-library-models.md @@ -0,0 +1,9 @@ +lgtm,codescanning +* Basic support for the [Go-restful](https://github.com/emicklei/go-restful) HTTP library has been added, which + may lead to more results from the security queries. +* Basic support for the [Gorm](https://github.com/go-gorm/gorm) ORM library has been added (specifically, its SQL statement building facilities), which + may lead to more results from the security queries. +* Basic support for the [Sqlx](https://github.com/jmoiron/sqlx) database access library has been added, which + may lead to more results from the security queries. +* Basic support for the [Json-iterator](https://github.com/json-iterator/go) JSON library has been added, which + may lead to more results from the security queries. diff --git a/go/old-change-notes/2020-08-05-incorrect-integer-conversion.md b/go/old-change-notes/2020-08-05-incorrect-integer-conversion.md new file mode 100644 index 00000000000..258d8427f27 --- /dev/null +++ b/go/old-change-notes/2020-08-05-incorrect-integer-conversion.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Query "Incorrect integer conversion" (`go/incorrect-integer-conversion`) is promoted from experimental status. This checks for parsing a string to an integer and then assigning it to an integer type of a smaller bit size. diff --git a/go/old-change-notes/2020-08-07-negative-length-check.md b/go/old-change-notes/2020-08-07-negative-length-check.md new file mode 100644 index 00000000000..38db6f38d54 --- /dev/null +++ b/go/old-change-notes/2020-08-07-negative-length-check.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* Query "Redundant check for negative value" (`go/negative-length-check`) has been expanded to consider unsigned integers, along + with the return values of `len` and `cap` which it already handled. It has also been renamed to match its expanded role. diff --git a/go/old-change-notes/2020-08-18-oauth2.md b/go/old-change-notes/2020-08-18-oauth2.md new file mode 100644 index 00000000000..aa4b566a3f0 --- /dev/null +++ b/go/old-change-notes/2020-08-18-oauth2.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Use of constant `state` value in OAuth 2.0 URL" (`go/constant-oauth2-state`) has been promoted from experimental status. This checks for use of a constant state value in generating an OAuth2 redirect URL, which may open the way for a CSRF attack. diff --git a/go/old-change-notes/2020-08-19-gin-model.md b/go/old-change-notes/2020-08-19-gin-model.md new file mode 100644 index 00000000000..03a8343231d --- /dev/null +++ b/go/old-change-notes/2020-08-19-gin-model.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Basic support for the [Gin](https://github.com/gin-gonic/gin) HTTP library has been added (extending UntrustedFlowSource), which may lead to more results from the security queries. diff --git a/go/old-change-notes/2020-08-27-protobufs.md b/go/old-change-notes/2020-08-27-protobufs.md new file mode 100644 index 00000000000..2628fd12d91 --- /dev/null +++ b/go/old-change-notes/2020-08-27-protobufs.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Taint is now propagated across protocol buffer ("protobuf") marshalling and unmarshalling operations. This may result in more results from existing queries where the protocol buffer format is used. diff --git a/go/old-change-notes/2020-08-28-allocation-size-overflow-sanitizers.md b/go/old-change-notes/2020-08-28-allocation-size-overflow-sanitizers.md new file mode 100644 index 00000000000..8876401c71f --- /dev/null +++ b/go/old-change-notes/2020-08-28-allocation-size-overflow-sanitizers.md @@ -0,0 +1,4 @@ +lgtm,codescanning +* The query "Size computation for allocation may overflow" has been improved to recognize more + cases where the value should be considered to be safe, which should lead to fewer false + positive results. diff --git a/go/old-change-notes/2020-09-10-gorm-model-improved.md b/go/old-change-notes/2020-09-10-gorm-model-improved.md new file mode 100644 index 00000000000..10b99296eb6 --- /dev/null +++ b/go/old-change-notes/2020-09-10-gorm-model-improved.md @@ -0,0 +1,4 @@ +lgtm,codescanning +* Support for the [GORM](https://github.com/go-gorm/gorm) ORM library (specifically, its SQL + statement building facilities) has been improved, which may lead to more results from the + security queries. diff --git a/go/old-change-notes/2020-09-10-xss-false-positives.md b/go/old-change-notes/2020-09-10-xss-false-positives.md new file mode 100644 index 00000000000..dd04bc4ba22 --- /dev/null +++ b/go/old-change-notes/2020-09-10-xss-false-positives.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Reflected cross-site scripting" (`go/reflected-xss`) now recognizes more cases of JSON marshaled data, which cannot serve as a vector for an XSS attack. This may reduce false-positive results for this query. diff --git a/go/old-change-notes/2020-09-14-split-string-sanitizer.md b/go/old-change-notes/2020-09-14-split-string-sanitizer.md new file mode 100644 index 00000000000..970da425e87 --- /dev/null +++ b/go/old-change-notes/2020-09-14-split-string-sanitizer.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Splitting a string by whitespace or a colon is now considered sanitizing by the `go/clear-text-logging` query, because this is frequently used to split a username and password or other secret. diff --git a/go/old-change-notes/2020-09-15-chi.md b/go/old-change-notes/2020-09-15-chi.md new file mode 100644 index 00000000000..f8674951cfe --- /dev/null +++ b/go/old-change-notes/2020-09-15-chi.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added support for the Chi web framework diff --git a/go/old-change-notes/2020-09-17-echo.md b/go/old-change-notes/2020-09-17-echo.md new file mode 100644 index 00000000000..75576b8c4d3 --- /dev/null +++ b/go/old-change-notes/2020-09-17-echo.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added support for the Echo web framework diff --git a/go/old-change-notes/2020-09-22-suspicious-character-in-regexp.md b/go/old-change-notes/2020-09-22-suspicious-character-in-regexp.md new file mode 100644 index 00000000000..1cb06313ea0 --- /dev/null +++ b/go/old-change-notes/2020-09-22-suspicious-character-in-regexp.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* A new query `go/suspicious-character-in-regex` has been added. The query flags uses of `\b` and `\a` in regular expressions, where a character class was likely intended. diff --git a/go/old-change-notes/2020-09-23-stdlib.md b/go/old-change-notes/2020-09-23-stdlib.md new file mode 100644 index 00000000000..2b30973e79b --- /dev/null +++ b/go/old-change-notes/2020-09-23-stdlib.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Add/improve taint-tracking models for 63 Go standard library packages. This means that all queries that track tainted data may produce more results; these include queries scanning for cross-site scripting vulnerabilities and SQL injection vulnerabilities among others. diff --git a/go/old-change-notes/2020-10-01-gomod-extraction.md b/go/old-change-notes/2020-10-01-gomod-extraction.md new file mode 100644 index 00000000000..ca0c0c72d50 --- /dev/null +++ b/go/old-change-notes/2020-10-01-gomod-extraction.md @@ -0,0 +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. diff --git a/go/old-change-notes/2020-10-01-stack-trace-exposure.md b/go/old-change-notes/2020-10-01-stack-trace-exposure.md new file mode 100644 index 00000000000..35437a0598f --- /dev/null +++ b/go/old-change-notes/2020-10-01-stack-trace-exposure.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* A new query `go/stack-trace-exposure` has been added. The query flags exposure of a stack trace to a remote party. diff --git a/go/old-change-notes/2020-10-12-old-context-package.md b/go/old-change-notes/2020-10-12-old-context-package.md new file mode 100644 index 00000000000..3e40ba064f0 --- /dev/null +++ b/go/old-change-notes/2020-10-12-old-context-package.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added support for the `golang.org/x/net/context` package, which was already supported under its modern standard-library name `context`. diff --git a/go/old-change-notes/2020-10-12-x-net-html.md b/go/old-change-notes/2020-10-12-x-net-html.md new file mode 100644 index 00000000000..4644ecf9e09 --- /dev/null +++ b/go/old-change-notes/2020-10-12-x-net-html.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* Added partial support for the `golang.org/x/net/html` package, modeling tainted data flow from a retrieved HTML document to its attributes and other data. +* Modeled more ways of writing data to an `net/http.ResponseWriter`. This may produce more results from queries such as `go/reflected-xss` which look for data flowing to an HTTP response. diff --git a/go/old-change-notes/2020-10-14-allocation-overflow-accuracy.md b/go/old-change-notes/2020-10-14-allocation-overflow-accuracy.md new file mode 100644 index 00000000000..44e2ec9552a --- /dev/null +++ b/go/old-change-notes/2020-10-14-allocation-overflow-accuracy.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The accuracy of the `go/allocation-size-overflow` query was improved, excluding more false-positives in which a small array could be mistaken for one of unbounded size. diff --git a/go/old-change-notes/2020-10-14-spew.md b/go/old-change-notes/2020-10-14-spew.md new file mode 100644 index 00000000000..29103258c18 --- /dev/null +++ b/go/old-change-notes/2020-10-14-spew.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added support for the Spew deep pretty-printing framework. This may cause the `go/clear-text-logging` query to return more results when sensitive data is exposed using this library. diff --git a/go/old-change-notes/2020-10-19-revel.md b/go/old-change-notes/2020-10-19-revel.md new file mode 100644 index 00000000000..3683c95ac14 --- /dev/null +++ b/go/old-change-notes/2020-10-19-revel.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added basic support for the Revel web framework. diff --git a/go/old-change-notes/2020-11-03-underscore-assigns.md b/go/old-change-notes/2020-11-03-underscore-assigns.md new file mode 100644 index 00000000000..d8f7accfeda --- /dev/null +++ b/go/old-change-notes/2020-11-03-underscore-assigns.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Fixed a bug that meant partially-ignored parallel assignments, such as `x, _ := a, b`, could produce an incorrect control-flow graph. diff --git a/go/old-change-notes/2020-11-04-unsafe-unzip-symlink.md b/go/old-change-notes/2020-11-04-unsafe-unzip-symlink.md new file mode 100644 index 00000000000..88a13019dc5 --- /dev/null +++ b/go/old-change-notes/2020-11-04-unsafe-unzip-symlink.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* A new query `go/unsafe-unzip-symlink` has been added. The query checks for extracting symbolic links from an archive without using `filepath.EvalSymlinks`. This could lead to a file being written outside the destination directory. diff --git a/go/old-change-notes/2020-11-09-suspicious-character-in-regexp-improvement.md b/go/old-change-notes/2020-11-09-suspicious-character-in-regexp-improvement.md new file mode 100644 index 00000000000..3e5c9fce574 --- /dev/null +++ b/go/old-change-notes/2020-11-09-suspicious-character-in-regexp-improvement.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Suspicious characters in a regular expression" has been improved to recognize raw string literals, which should lead to fewer false positives. diff --git a/go/old-change-notes/2020-11-11-stored-command.md b/go/old-change-notes/2020-11-11-stored-command.md new file mode 100644 index 00000000000..fed234b2d96 --- /dev/null +++ b/go/old-change-notes/2020-11-11-stored-command.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* A new query "Command built from stored data" (`go/stored-command`) has been added. The query detects command executions that contain data from a database or a similar possibly user-controllable source. diff --git a/go/old-change-notes/2020-11-11-stored-xss.md b/go/old-change-notes/2020-11-11-stored-xss.md new file mode 100644 index 00000000000..fb9f877132f --- /dev/null +++ b/go/old-change-notes/2020-11-11-stored-xss.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* A new query "Stored cross-site scripting" (`go/stored-xss`) has been added. The query detects HTTP request responses that contain data from a database or a similar possibly user-controllable source. diff --git a/go/old-change-notes/2020-11-12-zipslip-sanitizers.md b/go/old-change-notes/2020-11-12-zipslip-sanitizers.md new file mode 100644 index 00000000000..880660ae4f3 --- /dev/null +++ b/go/old-change-notes/2020-11-12-zipslip-sanitizers.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Improved recongition of sanitizer functions for the `go/zipslip` query. This may reduce false-positives (but also perhaps false-negatives) when application code attempts to check a zip header entry does not contain an illegal path traversal attempt. diff --git a/go/old-change-notes/2020-11-19-dataflow-edges.md b/go/old-change-notes/2020-11-19-dataflow-edges.md new file mode 100644 index 00000000000..827b33ce436 --- /dev/null +++ b/go/old-change-notes/2020-11-19-dataflow-edges.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Fixed a bug that meant data-flow through a checked typecast (e.g. `cast, ok = x.(*Type)`) could be missed. diff --git a/go/old-change-notes/2020-11-27-external-api.md b/go/old-change-notes/2020-11-27-external-api.md new file mode 100644 index 00000000000..b65b4da8534 --- /dev/null +++ b/go/old-change-notes/2020-11-27-external-api.md @@ -0,0 +1,4 @@ +lgtm,codescanning +* A new query "Untrusted data passed to external API" (`go/untrusted-data-to-external-api`) has been added. The query reports external APIs that use untrusted data. This query is designed primarily to help identify which APIs may be relevant for security analysis of this application. +* A new query "Untrusted data passed to unknown external API" (`go/untrusted-data-to-unknown-external-api`) has been added. The query reports external APIs that use untrusted data and which are not already known to be safe. This query is designed primarily to help identify which APIs may be relevant for security analysis of this application. +* A new query "Frequency counts for external APIs that are used with untrusted data" (`go/count-untrusted-data-external-api`) has been added. The query reports external APIs that use untrusted data. It displays the same results as "Untrusted data passed to external API" (`go/untrusted-data-to-external-api`) but in a table. diff --git a/go/old-change-notes/2020-11-27-guarding-functions.md b/go/old-change-notes/2020-11-27-guarding-functions.md new file mode 100644 index 00000000000..5a51d59ef43 --- /dev/null +++ b/go/old-change-notes/2020-11-27-guarding-functions.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Improved ability to recognise a sanitizing function (for example, `func f(s string) bool { return isClean(s) }`). This may reduce false-positives for any query employing a sanitizing test. diff --git a/go/old-change-notes/2020-11-30-evanphx-json-patch.md b/go/old-change-notes/2020-11-30-evanphx-json-patch.md new file mode 100644 index 00000000000..5c0e17bdea4 --- /dev/null +++ b/go/old-change-notes/2020-11-30-evanphx-json-patch.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Support for the [json-patch](https://github.com/evanphx/json-patch/) library has been added, which may lead to more results from the security queries. diff --git a/go/old-change-notes/2020-12-01-fmt-errorf.md b/go/old-change-notes/2020-12-01-fmt-errorf.md new file mode 100644 index 00000000000..e90c5967631 --- /dev/null +++ b/go/old-change-notes/2020-12-01-fmt-errorf.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Recognised function `fmt.Errorf` to always return non-nil strings. This may reduce false-positives that depend on a function possibly returning nil. diff --git a/go/old-change-notes/2020-12-08-beego.md b/go/old-change-notes/2020-12-08-beego.md new file mode 100644 index 00000000000..59084d625e8 --- /dev/null +++ b/go/old-change-notes/2020-12-08-beego.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added support for the Beego web framework diff --git a/go/old-change-notes/2020-12-08-k8s-io-apimachinery-pkg-runtime.md b/go/old-change-notes/2020-12-08-k8s-io-apimachinery-pkg-runtime.md new file mode 100644 index 00000000000..b4d6ac7e70a --- /dev/null +++ b/go/old-change-notes/2020-12-08-k8s-io-apimachinery-pkg-runtime.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Support for the [k8s.io/apimachinery/pkg/runtime](https://pkg.go.dev/k8s.io/apimachinery/pkg/runtime) library has been added, which may lead to more results from the security queries. diff --git a/go/old-change-notes/2020-12-09-clear-text-logging-source.md b/go/old-change-notes/2020-12-09-clear-text-logging-source.md new file mode 100644 index 00000000000..7ba2113ba79 --- /dev/null +++ b/go/old-change-notes/2020-12-09-clear-text-logging-source.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Clear-text logging of sensitive information" has been improved to recognize `SecretInterface` from `k8s.io/client-go/kubernetes/typed/core/v1` as a source of sensitive data, which may lead to more alerts. diff --git a/go/old-change-notes/2020-12-14-insecure-randomness.md b/go/old-change-notes/2020-12-14-insecure-randomness.md new file mode 100644 index 00000000000..9e016703e46 --- /dev/null +++ b/go/old-change-notes/2020-12-14-insecure-randomness.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Query "Use of insufficient randomness as the key of a cryptographic algorithm" (`go/insecure-randomness`) is promoted from experimental status. This checks for use of an insecure random number generator in a security component. diff --git a/go/old-change-notes/2020-12-15-beego-orm.md b/go/old-change-notes/2020-12-15-beego-orm.md new file mode 100644 index 00000000000..79fd312ed91 --- /dev/null +++ b/go/old-change-notes/2020-12-15-beego-orm.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added support for the ORM subpackage of the Beego web framework diff --git a/go/old-change-notes/2020-12-18-goproxy.md b/go/old-change-notes/2020-12-18-goproxy.md new file mode 100644 index 00000000000..e56d542a76b --- /dev/null +++ b/go/old-change-notes/2020-12-18-goproxy.md @@ -0,0 +1,5 @@ +lgtm,codescanning +* Added support for the `github.com/elazarl/goproxy` package. +* The query "Incomplete regular expression for hostnames" has been improved to recognize some cases + when the regexp in question is guarding an HTTP error response, which will lead to fewer false + positives. diff --git a/go/old-change-notes/2020-12-23-regexp-anchors.md b/go/old-change-notes/2020-12-23-regexp-anchors.md new file mode 100644 index 00000000000..4574cf1c10f --- /dev/null +++ b/go/old-change-notes/2020-12-23-regexp-anchors.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Query `go/regex/missing-regexp-anchor` now recognizes the start- and end-of-text anchors `\A` and `\z`. This reduces false-positives relating to unanchored expressions. diff --git a/go/old-change-notes/2021-01-07-gokit-sources.md b/go/old-change-notes/2021-01-07-gokit-sources.md new file mode 100644 index 00000000000..3f544e14f25 --- /dev/null +++ b/go/old-change-notes/2021-01-07-gokit-sources.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Models for gokit request sources have been added as an opt-in feature; import `semmle.go.frameworks.GoKit` in a query to enable these sources. diff --git a/go/old-change-notes/2021-01-08-git-as-interpreter.md b/go/old-change-notes/2021-01-08-git-as-interpreter.md new file mode 100644 index 00000000000..adcd9cafaad --- /dev/null +++ b/go/old-change-notes/2021-01-08-git-as-interpreter.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added `git` as a potentially-exploitable command interpreter for the purposes of the `go/command-injection` query. Because some of its options can cause it to execute an arbitrary command, unsanitized user data can be dangerous to include in its argument list. Such cases will now be flagged as an alert. diff --git a/go/old-change-notes/2021-01-12-model-couchbase.md b/go/old-change-notes/2021-01-12-model-couchbase.md new file mode 100644 index 00000000000..77e0973cdff --- /dev/null +++ b/go/old-change-notes/2021-01-12-model-couchbase.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added support for [the offical Couchbase Go SDK library](https://github.com/couchbase/gocb), v1 and v2. The `go/sql-injection` query (which also handles non-SQL databases such as Couchbase) will now identify Couchbase queries built from untrusted external input. diff --git a/go/old-change-notes/2021-01-21-default-sanitizer-guard.md b/go/old-change-notes/2021-01-21-default-sanitizer-guard.md new file mode 100644 index 00000000000..2ee9b0d9ec0 --- /dev/null +++ b/go/old-change-notes/2021-01-21-default-sanitizer-guard.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* An equality comparison with a constant value now sanitizes the other value. This was already the case in XSS queries, but it now applies in all queries involving tainted data flow. This should lead to fewer false positive results. diff --git a/go/old-change-notes/2021-02-02-constant-comparison-sanitizer-guard.md b/go/old-change-notes/2021-02-02-constant-comparison-sanitizer-guard.md new file mode 100644 index 00000000000..0442a7f9ccd --- /dev/null +++ b/go/old-change-notes/2021-02-02-constant-comparison-sanitizer-guard.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* A function which compares a value with a list of constants now acts as a sanitizer guard. This should lead to fewer false positive results. diff --git a/go/old-change-notes/2021-02-09-html-templates.md b/go/old-change-notes/2021-02-09-html-templates.md new file mode 100644 index 00000000000..d742ea4630e --- /dev/null +++ b/go/old-change-notes/2021-02-09-html-templates.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Improved our modeling of Go's builtin `html/template` package to understand that these templates provide context-sensitive escaping of HTML and Javascript special characters. This may reduce false-positives seen by the `go/reflected-xss` query, as well as other queries for which HTML escaping is relevant. diff --git a/go/old-change-notes/2021-02-10-cfg-equality-panic-edges.md b/go/old-change-notes/2021-02-10-cfg-equality-panic-edges.md new file mode 100644 index 00000000000..4a4e41b89ae --- /dev/null +++ b/go/old-change-notes/2021-02-10-cfg-equality-panic-edges.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Improved the Go control-flow graph to exclude more edges representing panics due to comparisons when the types of the compared values indicate a panic is impossible (for example, comparing integers cannot panic). This may reduce false-positives or false-negatives for any query for which control-flow is relevant. diff --git a/go/old-change-notes/2021-02-10-yaml.md b/go/old-change-notes/2021-02-10-yaml.md new file mode 100644 index 00000000000..3a23f42a0f5 --- /dev/null +++ b/go/old-change-notes/2021-02-10-yaml.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added support for the [gopkg.in/yaml](https://pkg.go.dev/gopkg.in/yaml.v3) package, which may lead to more results from the security queries. diff --git a/go/old-change-notes/2021-02-11-zap.md b/go/old-change-notes/2021-02-11-zap.md new file mode 100644 index 00000000000..a318f05ac3b --- /dev/null +++ b/go/old-change-notes/2021-02-11-zap.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added support for [the Zap logging framework](https://pkg.go.dev/go.uber.org/zap). This may cause the `go/clear-text-logging` query to return more results when sensitive data is exposed using this library. diff --git a/go/old-change-notes/2021-02-15-logrus-updated.md b/go/old-change-notes/2021-02-15-logrus-updated.md new file mode 100644 index 00000000000..eacc43ced80 --- /dev/null +++ b/go/old-change-notes/2021-02-15-logrus-updated.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Modeling of the `Logrus` logging library has been improved. This may cause the `go/clear-text-logging` query to return more results when sensitive data is exposed using this library. diff --git a/go/old-change-notes/2021-02-18-go-116.md b/go/old-change-notes/2021-02-18-go-116.md new file mode 100644 index 00000000000..353b5afa189 --- /dev/null +++ b/go/old-change-notes/2021-02-18-go-116.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The extractor now supports Go 1.16 and the new `io/fs` library that was introduced. diff --git a/go/old-change-notes/2021-03-05-dataflow-promoted-fields.md b/go/old-change-notes/2021-03-05-dataflow-promoted-fields.md new file mode 100644 index 00000000000..54b5d780535 --- /dev/null +++ b/go/old-change-notes/2021-03-05-dataflow-promoted-fields.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The data-flow library has been improved to represent reads and writes of promoted fields correctly, which may lead to more alerts. diff --git a/go/old-change-notes/2021-03-16-html-tracing.md b/go/old-change-notes/2021-03-16-html-tracing.md new file mode 100644 index 00000000000..664e5f312b6 --- /dev/null +++ b/go/old-change-notes/2021-03-16-html-tracing.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Support for extracting HTML files has been added, alongside support for Raw Revel templates. diff --git a/go/old-change-notes/2021-03-16-nethttp-updated.md b/go/old-change-notes/2021-03-16-nethttp-updated.md new file mode 100644 index 00000000000..f9138f67f7a --- /dev/null +++ b/go/old-change-notes/2021-03-16-nethttp-updated.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added support for the `Transport.RoundTrip` method in `net/http`. diff --git a/go/old-change-notes/2021-04-19-http-request-taint-flow.md b/go/old-change-notes/2021-04-19-http-request-taint-flow.md new file mode 100644 index 00000000000..08eb761e0db --- /dev/null +++ b/go/old-change-notes/2021-04-19-http-request-taint-flow.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* `net/http.Request` and `mime/multipart.Part`'s models have been improved. `Request`'s error returns are no longer considered tainted, and `Part`'s methods propagate taint (for example, the `Part.FileName()` of a tainted `Part` is itself tainted). This should lead to more accurate results from any query where `Request` or `Part` methods occurred in a taint-flow path. diff --git a/go/old-change-notes/2021-04-20-tuple-types.md b/go/old-change-notes/2021-04-20-tuple-types.md new file mode 100644 index 00000000000..a4db5df1967 --- /dev/null +++ b/go/old-change-notes/2021-04-20-tuple-types.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Fixed a bug where data flow was not correctly computed through two-value index expressions (for example, `got, ok := myMap[someIndex]`). This may lead to extra results from any dataflow query when an index expression would form part of an important dataflow path. diff --git a/go/old-change-notes/2021-05-06-xorm.md b/go/old-change-notes/2021-05-06-xorm.md new file mode 100644 index 00000000000..0398530b950 --- /dev/null +++ b/go/old-change-notes/2021-05-06-xorm.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added support for the `xorm.io/xorm` package diff --git a/go/old-change-notes/2021-07-28-insufficient-key-size.md b/go/old-change-notes/2021-07-28-insufficient-key-size.md new file mode 100644 index 00000000000..d3880bee73f --- /dev/null +++ b/go/old-change-notes/2021-07-28-insufficient-key-size.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Query "Use of a weak cryptographic key" (`go/insufficient-key-size`) is promoted from experimental status. This checks that any RSA keys which are generated have a size of at least 2048 bits. diff --git a/go/old-change-notes/2021-08-17-go-117.md b/go/old-change-notes/2021-08-17-go-117.md new file mode 100644 index 00000000000..640f771b5f0 --- /dev/null +++ b/go/old-change-notes/2021-08-17-go-117.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The extractor now supports Go 1.17 features and models the changed libraries. diff --git a/go/old-change-notes/2021-08-23-getPrimaryQlClasses.md b/go/old-change-notes/2021-08-23-getPrimaryQlClasses.md new file mode 100644 index 00000000000..30b00908a23 --- /dev/null +++ b/go/old-change-notes/2021-08-23-getPrimaryQlClasses.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* Added `AstNode.getPrimaryQlClasses()` predicate, which gets a comma-separated list of the names of the primary CodeQL classes to which this element belongs. diff --git a/go/old-change-notes/2021-10-27-insufficient-key-size-sanitizer.md b/go/old-change-notes/2021-10-27-insufficient-key-size-sanitizer.md new file mode 100644 index 00000000000..5cd7a616e08 --- /dev/null +++ b/go/old-change-notes/2021-10-27-insufficient-key-size-sanitizer.md @@ -0,0 +1,3 @@ +lgtm,codescanning +* The query "Use of a weak cryptographic key" has been improved to recognize more cases where the + key size should be considered to be safe, which should lead to fewer false positive results. diff --git a/go/ql/config/legacy-support/qlpack.yml b/go/ql/config/legacy-support/qlpack.yml new file mode 100644 index 00000000000..cff1d02b271 --- /dev/null +++ b/go/ql/config/legacy-support/qlpack.yml @@ -0,0 +1,3 @@ +name: legacy-libraries-go +version: 0.0.0 +libraryPathDependencies: codeql-go diff --git a/go/ql/config/suites/lgtm/go-alerts-lgtm b/go/ql/config/suites/lgtm/go-alerts-lgtm new file mode 100644 index 00000000000..17b8ee5c45b --- /dev/null +++ b/go/ql/config/suites/lgtm/go-alerts-lgtm @@ -0,0 +1,3 @@ +# DO NOT EDIT +# This is a stub file. The actual suite of queries to run is generated +# automatically based on query precision and severity. diff --git a/go/ql/config/suites/lgtm/go-lgtm b/go/ql/config/suites/lgtm/go-lgtm new file mode 100644 index 00000000000..fa96641e229 --- /dev/null +++ b/go/ql/config/suites/lgtm/go-lgtm @@ -0,0 +1,3 @@ +@import "go-alerts-lgtm" +@import "go-metrics-lgtm" +@import "go-util-lgtm" diff --git a/go/ql/config/suites/lgtm/go-metrics-lgtm b/go/ql/config/suites/lgtm/go-metrics-lgtm new file mode 100644 index 00000000000..a295f30c0bf --- /dev/null +++ b/go/ql/config/suites/lgtm/go-metrics-lgtm @@ -0,0 +1,2 @@ ++ go-queries/Metrics/FLinesOfCode.ql: /Metrics/Files + @_namespace com.lgtm/go-queries diff --git a/go/ql/config/suites/lgtm/go-util-lgtm b/go/ql/config/suites/lgtm/go-util-lgtm new file mode 100644 index 00000000000..908e157d2dc --- /dev/null +++ b/go/ql/config/suites/lgtm/go-util-lgtm @@ -0,0 +1,6 @@ ++ go-queries/definitions.ql + @_namespace com.lgtm/go-queries ++ go-queries/AlertSuppression.ql + @_namespace com.lgtm/go-queries ++ go-queries/filters/ClassifyFiles.ql + @_namespace com.lgtm/go-queries diff --git a/go/ql/docs/experimental.md b/go/ql/docs/experimental.md new file mode 100644 index 00000000000..bef435d6674 --- /dev/null +++ b/go/ql/docs/experimental.md @@ -0,0 +1,37 @@ +# Experimental CodeQL queries and libraries + +In addition to our standard CodeQL queries and libraries, this repository may also contain queries and libraries of a more experimental nature. Experimental queries and libraries can be improved incrementally and may eventually reach a sufficient maturity to be included in our standard libraries and queries. + +Experimental queries and libraries may not be actively maintained as the standard libraries evolve. They may also be changed in backwards-incompatible ways or may be removed entirely in the future without deprecation warnings. + +## Requirements + +1. **Directory structure** + + - Experimental queries and libraries are stored in the `ql/src/experimental` subdirectory, and any corresponding tests in `ql/test/experimental`. + - The structure of an `experimental` subdirectory mirrors the structure of standard queries and libraries (or tests) in the parent directory. + +2. **Query metadata** + + - The query `@id` must not clash with any other queries in the repository. + - The query must have a `@name` and `@description` to explain its purpose. + - The query must have a `@kind` and `@problem.severity` as required by CodeQL tools. + + For details, see the [guide on query metadata](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md). + +3. **Formatting** + + - The queries and libraries must be [autoformatted](https://codeql.github.com/docs/codeql-for-visual-studio-code/about-codeql-for-visual-studio-code/). + +4. **Compilation** + + - Compilation of the query and any associated libraries and tests must be resilient to future development of the standard libraries. This means that the functionality cannot use internal APIs, cannot depend on the output of `getAQlClass`, and cannot make use of regexp matching on `toString`. + - The query and any associated libraries and tests must not cause any compiler warnings to be emitted (such as use of deprecated functionality or missing `override` annotations). + +5. **Results** + + - The query must have at least one true positive result on some revision of a real project. + +## Non-requirements + +Other criteria typically required for our standard queries and libraries are not required for experimental queries and libraries. In particular, fully disciplined query [metadata](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md), query [help](https://github.com/github/codeql/blob/main/docs/query-help-style-guide.md), tests, a low false positive rate and performance tuning are not required (but nonetheless recommended). diff --git a/go/ql/examples/.project b/go/ql/examples/.project new file mode 100644 index 00000000000..45114efbc5a --- /dev/null +++ b/go/ql/examples/.project @@ -0,0 +1,12 @@ + + + go-examples + + + + + + + com.semmle.plugin.qdt.core.qlnature + + diff --git a/go/ql/examples/.qlpath b/go/ql/examples/.qlpath new file mode 100644 index 00000000000..ac27c76308e --- /dev/null +++ b/go/ql/examples/.qlpath @@ -0,0 +1,10 @@ + + + + /go-queries + + /go-queries/go.dbscheme + + go + + diff --git a/go/ql/examples/qlpack.lock.yml b/go/ql/examples/qlpack.lock.yml new file mode 100644 index 00000000000..06dd07fc7dc --- /dev/null +++ b/go/ql/examples/qlpack.lock.yml @@ -0,0 +1,4 @@ +--- +dependencies: {} +compiled: false +lockVersion: 1.0.0 diff --git a/go/ql/examples/qlpack.yml b/go/ql/examples/qlpack.yml new file mode 100644 index 00000000000..bfe19ffd65c --- /dev/null +++ b/go/ql/examples/qlpack.yml @@ -0,0 +1,6 @@ +name: codeql/go-examples +groups: + - go + - examples +dependencies: + codeql/go-all: "*" diff --git a/go/ql/examples/queries.xml b/go/ql/examples/queries.xml new file mode 100644 index 00000000000..6a456b21d09 --- /dev/null +++ b/go/ql/examples/queries.xml @@ -0,0 +1 @@ + diff --git a/go/ql/examples/snippets/calltobuiltin.ql b/go/ql/examples/snippets/calltobuiltin.ql new file mode 100644 index 00000000000..5ff20e563be --- /dev/null +++ b/go/ql/examples/snippets/calltobuiltin.ql @@ -0,0 +1,15 @@ +/** + * @name Call to built-in function + * @description Finds calls to the built-in `len` function. + * @id go/examples/calltolen + * @tags call + * function + * len + * built-in + */ + +import go + +from DataFlow::CallNode call +where call = Builtin::len().getACall() +select call diff --git a/go/ql/examples/snippets/calltofunction.ql b/go/ql/examples/snippets/calltofunction.ql new file mode 100644 index 00000000000..5bbe28b52a6 --- /dev/null +++ b/go/ql/examples/snippets/calltofunction.ql @@ -0,0 +1,16 @@ +/** + * @name Call to library function + * @description Finds calls to "fmt.Println". + * @id go/examples/calltoprintln + * @tags call + * function + * println + */ + +import go + +from Function println, DataFlow::CallNode call +where + println.hasQualifiedName("fmt", "Println") and + call = println.getACall() +select call diff --git a/go/ql/examples/snippets/calltomethod.ql b/go/ql/examples/snippets/calltomethod.ql new file mode 100644 index 00000000000..eebfc707f2b --- /dev/null +++ b/go/ql/examples/snippets/calltomethod.ql @@ -0,0 +1,18 @@ +/** + * @name Call to method + * @description Finds calls to the `Get` method of type `Header` from the `net/http` package. + * @id go/examples/calltoheaderget + * @tags call + * function + * net/http + * Header + * strings + */ + +import go + +from Method get, DataFlow::CallNode call +where + get.hasQualifiedName("net/http", "Header", "Get") and + call = get.getACall() +select call diff --git a/go/ql/examples/snippets/constant.ql b/go/ql/examples/snippets/constant.ql new file mode 100644 index 00000000000..3627efb6722 --- /dev/null +++ b/go/ql/examples/snippets/constant.ql @@ -0,0 +1,14 @@ +/** + * @name Compile-time constant + * @description Finds compile-time constants with value zero. + * @id go/examples/zeroconstant + * @tags expression + * numeric value + * constant + */ + +import go + +from DataFlow::Node zero +where zero.getNumericValue() = 0 +select zero diff --git a/go/ql/examples/snippets/emptythen.ql b/go/ql/examples/snippets/emptythen.ql new file mode 100644 index 00000000000..97a810e388c --- /dev/null +++ b/go/ql/examples/snippets/emptythen.ql @@ -0,0 +1,18 @@ +/** + * @name If statements with empty then branch + * @description Finds 'if' statements where the 'then' branch is + * an empty block statement + * @id go/examples/emptythen + * @tags if + * then + * empty + * conditional + * branch + * statement + */ + +import go + +from IfStmt i +where i.getThen().getNumStmt() = 0 +select i diff --git a/go/ql/examples/snippets/fieldread.ql b/go/ql/examples/snippets/fieldread.ql new file mode 100644 index 00000000000..aef9bc2f4d9 --- /dev/null +++ b/go/ql/examples/snippets/fieldread.ql @@ -0,0 +1,15 @@ +/** + * @name Field read + * @description Finds code that reads `Request.Method`. + * @id go/examples/readofrequestmethod + * @tags field + * read + */ + +import go + +from Field reqm, Read read +where + reqm.hasQualifiedName("net/http", "Request", "Method") and + read = reqm.getARead() +select read diff --git a/go/ql/examples/snippets/fieldwrite.ql b/go/ql/examples/snippets/fieldwrite.ql new file mode 100644 index 00000000000..b9374f4ef24 --- /dev/null +++ b/go/ql/examples/snippets/fieldwrite.ql @@ -0,0 +1,15 @@ +/** + * @name Field write + * @description Finds assignments to field `Status` of type `Response` from package `net/http`. + * @id go/examples/responsestatus + * @tags net/http + * field write + */ + +import go + +from Field status, Write write +where + status.hasQualifiedName("net/http", "Response", "Status") and + write = status.getAWrite() +select write, write.getRhs() diff --git a/go/ql/examples/snippets/function.ql b/go/ql/examples/snippets/function.ql new file mode 100644 index 00000000000..559dd34c234 --- /dev/null +++ b/go/ql/examples/snippets/function.ql @@ -0,0 +1,13 @@ +/** + * @name Function + * @description Finds functions called "main". + * @id go/examples/mainfunction + * @tags function + * main + */ + +import go + +from Function main +where main.getName() = "main" +select main diff --git a/go/ql/examples/snippets/incompleteswitchoverenum.ql b/go/ql/examples/snippets/incompleteswitchoverenum.ql new file mode 100644 index 00000000000..b201e55089e --- /dev/null +++ b/go/ql/examples/snippets/incompleteswitchoverenum.ql @@ -0,0 +1,17 @@ +/** + * @name Incomplete switch over enum + * @description A switch statement of enum type should explicitly reference each + * of the members of that enum. + * @kind problem + * @id go/examples/incomplete-switch + */ + +import go + +from ExpressionSwitchStmt ss, DeclaredConstant c, NamedType t +where + t.getUnderlyingType() instanceof IntegerType and + t = ss.getExpr().getType() and + c.getType() = t and + forall(CaseClause case | case = ss.getACase() | not case = c.getAReference().getParent()) +select ss, "This switch statement is not exhaustive: missing $@", c, c.getName() diff --git a/go/ql/examples/snippets/nilcheck.ql b/go/ql/examples/snippets/nilcheck.ql new file mode 100644 index 00000000000..cb82f14618e --- /dev/null +++ b/go/ql/examples/snippets/nilcheck.ql @@ -0,0 +1,15 @@ +/** + * @name Comparison with nil + * @description Finds comparisons with nil. + * @id go/examples/nilcheck + * @tags comparison + * nil + */ + +import go + +from DataFlow::EqualityTestNode eq, DataFlow::Node nd, DataFlow::Node nil +where + nil = Builtin::nil().getARead() and + eq.eq(_, nd, nil) +select eq diff --git a/go/ql/examples/snippets/param.ql b/go/ql/examples/snippets/param.ql new file mode 100644 index 00000000000..4340e018f9a --- /dev/null +++ b/go/ql/examples/snippets/param.ql @@ -0,0 +1,12 @@ +/** + * @name Parameter + * @description Finds parameters of type "ResponseWriter" from package "net/http". + * @id go/examples/responseparam + * @tags parameter + */ + +import go + +from Parameter req +where req.getType().hasQualifiedName("net/http", "ResponseWriter") +select req diff --git a/go/ql/examples/snippets/pointertype.ql b/go/ql/examples/snippets/pointertype.ql new file mode 100644 index 00000000000..b21f03f243e --- /dev/null +++ b/go/ql/examples/snippets/pointertype.ql @@ -0,0 +1,15 @@ +/** + * @name Type + * @description Finds pointer type `*Request` from package `net/http`. + * @id go/examples/requestptrtype + * @tags net/http + * type + */ + +import go + +from Type reqtp, PointerType reqptrtp +where + reqtp.hasQualifiedName("net/http", "Request") and + reqptrtp.getBaseType() = reqtp +select reqptrtp diff --git a/go/ql/examples/snippets/receiver.ql b/go/ql/examples/snippets/receiver.ql new file mode 100644 index 00000000000..511ef1314f5 --- /dev/null +++ b/go/ql/examples/snippets/receiver.ql @@ -0,0 +1,12 @@ +/** + * @name Receiver variable + * @description Finds receiver variables of pointer type. + * @id go/examples/pointerreceiver + * @tags receiver variable + */ + +import go + +from ReceiverVariable recv +where recv.getType() instanceof PointerType +select recv diff --git a/go/ql/examples/snippets/result.ql b/go/ql/examples/snippets/result.ql new file mode 100644 index 00000000000..1241142bd4a --- /dev/null +++ b/go/ql/examples/snippets/result.ql @@ -0,0 +1,12 @@ +/** + * @name Result variable + * @description Finds result variables of type "error". + * @id go/examples/errresult + * @tags result variable + */ + +import go + +from ResultVariable err +where err.getType() = Builtin::error().getType() +select err diff --git a/go/ql/examples/snippets/type.ql b/go/ql/examples/snippets/type.ql new file mode 100644 index 00000000000..60861c72bad --- /dev/null +++ b/go/ql/examples/snippets/type.ql @@ -0,0 +1,13 @@ +/** + * @name Type + * @description Finds type `Request` from package `net/http`. + * @id go/examples/requesttype + * @tags net/http + * type + */ + +import go + +from Type request +where request.hasQualifiedName("net/http", "Request") +select request diff --git a/go/ql/examples/snippets/typeinfo.ql b/go/ql/examples/snippets/typeinfo.ql new file mode 100644 index 00000000000..b5c22943466 --- /dev/null +++ b/go/ql/examples/snippets/typeinfo.ql @@ -0,0 +1,16 @@ +/** + * @name Type information + * @description Finds code elements of type `*Request` from package `net/http`. + * @id go/examples/requests + * @tags net/http + * types + */ + +import go + +from Type reqtp, PointerType reqptrtp, DataFlow::Node req +where + reqtp.hasQualifiedName("net/http", "Request") and + reqptrtp.getBaseType() = reqtp and + req.getType() = reqptrtp +select req diff --git a/go/ql/examples/snippets/updateinloop.ql b/go/ql/examples/snippets/updateinloop.ql new file mode 100644 index 00000000000..f047f16dae2 --- /dev/null +++ b/go/ql/examples/snippets/updateinloop.ql @@ -0,0 +1,13 @@ +/** + * @name Increment statements in loops + * @description Finds increment statements that are nested in a loop + * @id go/examples/updateinloop + * @tags nesting + * increment + */ + +import go + +from IncStmt s, LoopStmt l +where s.getParent+() = l +select s, l diff --git a/go/ql/examples/snippets/variable.ql b/go/ql/examples/snippets/variable.ql new file mode 100644 index 00000000000..28bb4934544 --- /dev/null +++ b/go/ql/examples/snippets/variable.ql @@ -0,0 +1,13 @@ +/** + * @name Variable + * @description Finds variables called "err". + * @id go/examples/errvariable + * @tags variable + * err + */ + +import go + +from Variable err +where err.getName() = "err" +select err, err.getDeclaration() diff --git a/go/ql/examples/snippets/varread.ql b/go/ql/examples/snippets/varread.ql new file mode 100644 index 00000000000..87282146d41 --- /dev/null +++ b/go/ql/examples/snippets/varread.ql @@ -0,0 +1,14 @@ +/** + * @name Variable read + * @description Finds code that reads a variable called `err`. + * @id go/examples/readoferr + * @tags variable read + */ + +import go + +from Variable err, Read read +where + err.getName() = "err" and + read = err.getARead() +select read diff --git a/go/ql/examples/snippets/varwrite.ql b/go/ql/examples/snippets/varwrite.ql new file mode 100644 index 00000000000..189e915c167 --- /dev/null +++ b/go/ql/examples/snippets/varwrite.ql @@ -0,0 +1,14 @@ +/** + * @name Variable write + * @description Finds assignments to variables named "err". + * @id go/examples/errwrite + * @tags variable write + */ + +import go + +from Variable err, Write write +where + err.getName() = "err" and + write = err.getAWrite() +select write, write.getRhs() diff --git a/go/ql/examples/snippets/zerocheck.ql b/go/ql/examples/snippets/zerocheck.ql new file mode 100644 index 00000000000..467dae7122d --- /dev/null +++ b/go/ql/examples/snippets/zerocheck.ql @@ -0,0 +1,16 @@ +/** + * @name Comparison with zero + * @description Finds comparisons between an unsigned value and zero. + * @id go/examples/unsignedgez + * @tags comparison + * unsigned + */ + +import go + +from DataFlow::RelationalComparisonNode cmp, DataFlow::Node unsigned, DataFlow::Node zero +where + zero.getNumericValue() = 0 and + unsigned.getType().getUnderlyingType() instanceof UnsignedIntegerType and + cmp.leq(_, zero, unsigned, 0) +select cmp, unsigned diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md new file mode 100644 index 00000000000..940f3e17251 --- /dev/null +++ b/go/ql/lib/CHANGELOG.md @@ -0,0 +1,45 @@ +## 0.1.2 + +### New Features + +* Go 1.18 generics are now extracted and can be explored using the new CodeQL classes `TypeParamDecl`, `GenericFunctionInstantiationExpr`, `GenericTypeInstantiationExpr`, `TypeSetTerm`, and `TypeSetLiteralType`, as well as using new predicates defined on the existing `InterfaceType`. Class- and predicate-level documentation can be found in the [Go CodeQL library reference](https://codeql.github.com/codeql-standard-libraries/go/). + +## 0.1.1 + +### Minor Analysis Improvements + +* The method predicate `getACalleeIncludingExternals` on `DataFlow::CallNode` and the function `viableCallable` in `DataFlowDispatch` now also work for calls to functions via a variable, where the function can be determined using local flow. + +## 0.1.0 + +### Minor Analysis Improvements + +* Fixed a bug where dataflow steps were ignored if both ends were inside the initialiser routine of a file-level variable. + +## 0.0.12 + +## 0.0.11 + +## 0.0.10 + +## 0.0.9 + +## 0.0.8 + +## 0.0.7 + +### Deprecated APIs + +* The `codeql/go-upgrades` CodeQL pack has been removed. All database upgrade scripts have been merged into the `codeql/go-all` CodeQL pack. + +### Bug Fixes + +* `Function`'s predicate `getACall` now returns more results in some situations. It now always returns callers that may call a method indirectly via an interface method that it implements. Previously this only happened if the method was in the source code being analysed. + +## 0.0.6 + +## 0.0.5 + +## 0.0.4 + +## 0.0.3 diff --git a/go/ql/lib/Customizations.qll b/go/ql/lib/Customizations.qll new file mode 100644 index 00000000000..127840de9dd --- /dev/null +++ b/go/ql/lib/Customizations.qll @@ -0,0 +1,12 @@ +/** + * Contains customizations to the standard library. + * + * This module is imported by `go.qll`, so any customizations defined here automatically + * apply to all queries. + * + * Typical examples of customizations include adding new subclasses of abstract classes such as + * `FileSystemAccess`, or the `Source` and `Sink` classes associated with the security queries + * to model frameworks that are not covered by the standard library. + */ + +import go diff --git a/go/ql/lib/change-notes/released/0.0.10.md b/go/ql/lib/change-notes/released/0.0.10.md new file mode 100644 index 00000000000..979029c0162 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.0.10.md @@ -0,0 +1 @@ +## 0.0.10 diff --git a/go/ql/lib/change-notes/released/0.0.11.md b/go/ql/lib/change-notes/released/0.0.11.md new file mode 100644 index 00000000000..eba254bd51f --- /dev/null +++ b/go/ql/lib/change-notes/released/0.0.11.md @@ -0,0 +1 @@ +## 0.0.11 diff --git a/go/ql/lib/change-notes/released/0.0.12.md b/go/ql/lib/change-notes/released/0.0.12.md new file mode 100644 index 00000000000..a8e2f0b468e --- /dev/null +++ b/go/ql/lib/change-notes/released/0.0.12.md @@ -0,0 +1 @@ +## 0.0.12 diff --git a/go/ql/lib/change-notes/released/0.0.3.md b/go/ql/lib/change-notes/released/0.0.3.md new file mode 100644 index 00000000000..e47c9f5700e --- /dev/null +++ b/go/ql/lib/change-notes/released/0.0.3.md @@ -0,0 +1 @@ +## 0.0.3 diff --git a/go/ql/lib/change-notes/released/0.0.4.md b/go/ql/lib/change-notes/released/0.0.4.md new file mode 100644 index 00000000000..3268fefb272 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.0.4.md @@ -0,0 +1 @@ +## 0.0.4 diff --git a/go/ql/lib/change-notes/released/0.0.5.md b/go/ql/lib/change-notes/released/0.0.5.md new file mode 100644 index 00000000000..259776640e3 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.0.5.md @@ -0,0 +1 @@ +## 0.0.5 diff --git a/go/ql/lib/change-notes/released/0.0.6.md b/go/ql/lib/change-notes/released/0.0.6.md new file mode 100644 index 00000000000..7cad4d986e5 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.0.6.md @@ -0,0 +1 @@ +## 0.0.6 diff --git a/go/ql/lib/change-notes/released/0.0.7.md b/go/ql/lib/change-notes/released/0.0.7.md new file mode 100644 index 00000000000..338327d3179 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.0.7.md @@ -0,0 +1,9 @@ +## 0.0.7 + +### Deprecated APIs + +* The `codeql/go-upgrades` CodeQL pack has been removed. All database upgrade scripts have been merged into the `codeql/go-all` CodeQL pack. + +### Bug Fixes + +* `Function`'s predicate `getACall` now returns more results in some situations. It now always returns callers that may call a method indirectly via an interface method that it implements. Previously this only happened if the method was in the source code being analysed. diff --git a/go/ql/lib/change-notes/released/0.0.8.md b/go/ql/lib/change-notes/released/0.0.8.md new file mode 100644 index 00000000000..bc5efa50ee2 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.0.8.md @@ -0,0 +1 @@ +## 0.0.8 diff --git a/go/ql/lib/change-notes/released/0.0.9.md b/go/ql/lib/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..a64559b3ac8 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.0.9.md @@ -0,0 +1 @@ +## 0.0.9 diff --git a/go/ql/lib/change-notes/released/0.1.0.md b/go/ql/lib/change-notes/released/0.1.0.md new file mode 100644 index 00000000000..6e062153857 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.1.0.md @@ -0,0 +1,5 @@ +## 0.1.0 + +### Minor Analysis Improvements + +* Fixed a bug where dataflow steps were ignored if both ends were inside the initialiser routine of a file-level variable. diff --git a/go/ql/lib/change-notes/released/0.1.1.md b/go/ql/lib/change-notes/released/0.1.1.md new file mode 100644 index 00000000000..724e8e4cd30 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.1.1.md @@ -0,0 +1,5 @@ +## 0.1.1 + +### Minor Analysis Improvements + +* The method predicate `getACalleeIncludingExternals` on `DataFlow::CallNode` and the function `viableCallable` in `DataFlowDispatch` now also work for calls to functions via a variable, where the function can be determined using local flow. diff --git a/go/ql/lib/change-notes/released/0.1.2.md b/go/ql/lib/change-notes/released/0.1.2.md new file mode 100644 index 00000000000..6dfa74f5b5a --- /dev/null +++ b/go/ql/lib/change-notes/released/0.1.2.md @@ -0,0 +1,5 @@ +## 0.1.2 + +### New Features + +* Go 1.18 generics are now extracted and can be explored using the new CodeQL classes `TypeParamDecl`, `GenericFunctionInstantiationExpr`, `GenericTypeInstantiationExpr`, `TypeSetTerm`, and `TypeSetLiteralType`, as well as using new predicates defined on the existing `InterfaceType`. Class- and predicate-level documentation can be found in the [Go CodeQL library reference](https://codeql.github.com/codeql-standard-libraries/go/). diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml new file mode 100644 index 00000000000..6abd14b1ef8 --- /dev/null +++ b/go/ql/lib/codeql-pack.release.yml @@ -0,0 +1,2 @@ +--- +lastReleaseVersion: 0.1.2 diff --git a/go/ql/lib/definitions.ql b/go/ql/lib/definitions.ql new file mode 100644 index 00000000000..46e28d9fe71 --- /dev/null +++ b/go/ql/lib/definitions.ql @@ -0,0 +1,15 @@ +/** + * @name Jump-to-definition links + * @description Generates use-definition pairs that provide the data + * for jump-to-definition in the code viewer. + * @kind definitions + * @id go/jump-to-definition + */ + +import go + +from Ident def, Ident use, Entity e +where + use.uses(e) and + def.declares(e) +select use, def, "V" diff --git a/go/ql/lib/go.dbscheme b/go/ql/lib/go.dbscheme new file mode 100644 index 00000000000..90fa7836e0a --- /dev/null +++ b/go/ql/lib/go.dbscheme @@ -0,0 +1,547 @@ +/** Auto-generated dbscheme; do not edit. */ + + +/** 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: @namedtype 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 named: @namedtype 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); + +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 +| 55 = @errorexpr; + +@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 = @namedtype +| 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 | @namedtype | @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/go.dbscheme.stats b/go/ql/lib/go.dbscheme.stats new file mode 100644 index 00000000000..b18e8556fb2 --- /dev/null +++ b/go/ql/lib/go.dbscheme.stats @@ -0,0 +1,15183 @@ + + + + @similarity + 0 + + + @duplication + 0 + + + @xmldtd + 0 + + + @xmlelement + 504 + + + @xmlattribute + 408 + + + @externalDataElement + 0 + + + @xmlnamespace + 0 + + + @xmlcomment + 30 + + + @xmlcharacters + 869 + + + @compilation + 1 + + + @diagnostic + 0 + + + @file + 529 + + + @folder + 210 + + + @comment_group + 12083 + + + @slashslashcomment + 24878 + + + @slashstarcomment + 846 + + + @ident + 237316 + + + @ellipsis + 141 + + + @intlit + 7683 + + + @floatlit + 27 + + + @charlit + 838 + + + @stringlit + 24892 + + + @funclit + 678 + + + @compositelit + 2704 + + + @parenexpr + 343 + + + @selectorexpr + 54353 + + + @indexexpr + 4581 + + + @sliceexpr + 836 + + + @typeassertexpr + 2127 + + + @callorconversionexpr + 32041 + + + @starexpr + 10360 + + + @keyvalueexpr + 5616 + + + @arraytypeexpr + 3465 + + + @structtypeexpr + 1207 + + + @functypeexpr + 6015 + + + @interfacetypeexpr + 509 + + + @maptypeexpr + 1013 + + + @minusexpr + 270 + + + @notexpr + 1190 + + + @complementexpr + 21 + + + @addressexpr + 1739 + + + @arrowexpr + 92 + + + @lorexpr + 612 + + + @landexpr + 1234 + + + @eqlexpr + 3244 + + + @neqexpr + 4103 + + + @lssexpr + 785 + + + @leqexpr + 248 + + + @gtrexpr + 619 + + + @geqexpr + 270 + + + @addexpr + 1272 + + + @subexpr + 557 + + + @orexpr + 146 + + + @xorexpr + 14 + + + @mulexpr + 207 + + + @quoexpr + 53 + + + @remexpr + 24 + + + @shlexpr + 164 + + + @shrexpr + 57 + + + @andexpr + 235 + + + @andnotexpr + 19 + + + @sendchantypeexpr + 7 + + + @recvchantypeexpr + 9 + + + @sendrcvchantypeexpr + 101 + + + @badexpr + 0 + + + @imaglit + 0 + + + @plusexpr + 0 + + + @derefexpr + 0 + + + @field + 19974 + + + @location_default + 539178 + + + @declstmt + 1454 + + + @labeledstmt + 49 + + + @exprstmt + 7605 + + + @sendstmt + 69 + + + @incstmt + 614 + + + @decstmt + 71 + + + @gostmt + 72 + + + @deferstmt + 358 + + + @returnstmt + 9225 + + + @breakstmt + 301 + + + @continuestmt + 606 + + + @gotostmt + 8 + + + @fallthroughstmt + 7 + + + @blockstmt + 19358 + + + @ifstmt + 9728 + + + @caseclause + 3476 + + + @exprswitchstmt + 378 + + + @typeswitchstmt + 400 + + + @commclause + 72 + + + @selectstmt + 35 + + + @forstmt + 654 + + + @rangestmt + 2135 + + + @assignstmt + 7478 + + + @definestmt + 9514 + + + @addassignstmt + 223 + + + @subassignstmt + 18 + + + @mulassignstmt + 5 + + + @quoassignstmt + 3 + + + @orassignstmt + 63 + + + @xorassignstmt + 3 + + + @shlassignstmt + 2 + + + @shrassignstmt + 3 + + + @andnotassignstmt + 3 + + + @badstmt + 0 + + + @emptystmt + 0 + + + @remassignstmt + 0 + + + @andassignstmt + 0 + + + @importdecl + 479 + + + @constdecl + 280 + + + @typedecl + 1349 + + + @vardecl + 1769 + + + @funcdecl + 4813 + + + @baddecl + 0 + + + @importspec + 3468 + + + @valuespec + 3056 + + + @typedefspec + 1349 + + + @aliasspec + 16 + + + @universescope + 1 + + + @packagescope + 346 + + + @localscope + 36428 + + + @pkgobject + 3468 + + + @decltypeobject + 3602 + + + @builtintypeobject + 20 + + + @declconstobject + 8857 + + + @builtinconstobject + 4 + + + @declvarobject + 51098 + + + @declfunctionobject + 17793 + + + @builtinfunctionobject + 18 + + + @labelobject + 49 + + + @invalidtype + 1 + + + @boolexprtype + 1 + + + @inttype + 1 + + + @int8type + 1 + + + @int16type + 1 + + + @int32type + 1 + + + @int64type + 1 + + + @uinttype + 1 + + + @uint8type + 1 + + + @uint16type + 1 + + + @uint32type + 1 + + + @uint64type + 1 + + + @uintptrtype + 1 + + + @float32type + 1 + + + @float64type + 1 + + + @complex64type + 1 + + + @complex128type + 1 + + + @stringexprtype + 1 + + + @unsafepointertype + 1 + + + @boolliteraltype + 1 + + + @intliteraltype + 1 + + + @runeliteraltype + 1 + + + @floatliteraltype + 1 + + + @stringliteraltype + 1 + + + @nilliteraltype + 1 + + + @arraytype + 293 + + + @slicetype + 637 + + + @structtype + 2409 + + + @pointertype + 1903 + + + @interfacetype + 247 + + + @tupletype + 559 + + + @signaturetype + 8010 + + + @maptype + 430 + + + @sendchantype + 13 + + + @recvchantype + 10 + + + @sendrcvchantype + 29 + + + @namedtype + 3567 + + + @complexliteraltype + 0 + + + @package + 346 + + + @modline + 6 + + + @modlineblock + 1 + + + @modlparen + 1 + + + @modrparen + 1 + + + @modcommentblock + 0 + + + @unknownerror + 0 + + + @listerror + 0 + + + @parseerror + 0 + + + @typeerror + 0 + + + + + duplicateCode + 0 + + + id + 0 + + + relativePath + 0 + + + equivClass + 0 + + + + + id + relativePath + + + 12 + + + 1 + 2 + 1 + + + + + + + id + equivClass + + + 12 + + + 1 + 2 + 1 + + + + + + + relativePath + id + + + 12 + + + + + + relativePath + equivClass + + + 12 + + + + + + equivClass + id + + + 12 + + + + + + equivClass + relativePath + + + 12 + + + + + + + + similarCode + 0 + + + id + 0 + + + relativePath + 0 + + + equivClass + 0 + + + + + id + relativePath + + + 12 + + + 1 + 2 + 1 + + + + + + + id + equivClass + + + 12 + + + 1 + 2 + 1 + + + + + + + relativePath + id + + + 12 + + + + + + relativePath + equivClass + + + 12 + + + + + + equivClass + id + + + 12 + + + + + + equivClass + relativePath + + + 12 + + + + + + + + tokens + 0 + + + id + 0 + + + offset + 0 + + + beginLine + 0 + + + beginColumn + 0 + + + endLine + 0 + + + endColumn + 0 + + + + + id + offset + + + 12 + + + + + + id + beginLine + + + 12 + + + + + + id + beginColumn + + + 12 + + + + + + id + endLine + + + 12 + + + + + + id + endColumn + + + 12 + + + + + + offset + id + + + 12 + + + + + + offset + beginLine + + + 12 + + + + + + offset + beginColumn + + + 12 + + + + + + offset + endLine + + + 12 + + + + + + offset + endColumn + + + 12 + + + + + + beginLine + id + + + 12 + + + + + + beginLine + offset + + + 12 + + + + + + beginLine + beginColumn + + + 12 + + + + + + beginLine + endLine + + + 12 + + + + + + beginLine + endColumn + + + 12 + + + + + + beginColumn + id + + + 12 + + + + + + beginColumn + offset + + + 12 + + + + + + beginColumn + beginLine + + + 12 + + + + + + beginColumn + endLine + + + 12 + + + + + + beginColumn + endColumn + + + 12 + + + + + + endLine + id + + + 12 + + + + + + endLine + offset + + + 12 + + + + + + endLine + beginLine + + + 12 + + + + + + endLine + beginColumn + + + 12 + + + + + + endLine + endColumn + + + 12 + + + + + + endColumn + id + + + 12 + + + + + + endColumn + offset + + + 12 + + + + + + endColumn + beginLine + + + 12 + + + + + + endColumn + beginColumn + + + 12 + + + + + + endColumn + endLine + + + 12 + + + + + + + + externalData + 0 + + + id + 0 + + + path + 0 + + + column + 0 + + + value + 0 + + + + + id + path + + + 12 + + + + + + id + column + + + 12 + + + + + + id + value + + + 12 + + + + + + path + id + + + 12 + + + + + + path + column + + + 12 + + + + + + path + value + + + 12 + + + + + + column + id + + + 12 + + + + + + column + path + + + 12 + + + + + + column + value + + + 12 + + + + + + value + id + + + 12 + + + + + + value + path + + + 12 + + + + + + value + column + + + 12 + + + + + + + + snapshotDate + 0 + + + snapshotDate + 0 + + + + + + sourceLocationPrefix + 1 + + + prefix + 1 + + + + + + xmlEncoding + 0 + + + id + 0 + + + encoding + 0 + + + + + id + encoding + + + 12 + + + 1 + 2 + 1 + + + + + + + encoding + id + + + 12 + + + + + + + + xmlDTDs + 0 + + + id + 0 + + + root + 0 + + + publicId + 0 + + + systemId + 0 + + + fileid + 0 + + + + + id + root + + + 12 + + + 1 + 2 + 1 + + + + + + + id + publicId + + + 12 + + + 1 + 2 + 1 + + + + + + + id + systemId + + + 12 + + + 1 + 2 + 1 + + + + + + + id + fileid + + + 12 + + + 1 + 2 + 1 + + + + + + + root + id + + + 12 + + + + + + root + publicId + + + 12 + + + + + + root + systemId + + + 12 + + + + + + root + fileid + + + 12 + + + + + + publicId + id + + + 12 + + + + + + publicId + root + + + 12 + + + + + + publicId + systemId + + + 12 + + + + + + publicId + fileid + + + 12 + + + + + + systemId + id + + + 12 + + + + + + systemId + root + + + 12 + + + + + + systemId + publicId + + + 12 + + + + + + systemId + fileid + + + 12 + + + + + + fileid + id + + + 12 + + + + + + fileid + root + + + 12 + + + + + + fileid + publicId + + + 12 + + + + + + fileid + systemId + + + 12 + + + + + + + + xmlElements + 504 + + + id + 504 + + + name + 38 + + + parentid + 199 + + + idx + 86 + + + fileid + 14 + + + + + id + name + + + 12 + + + 1 + 2 + 504 + + + + + + + id + parentid + + + 12 + + + 1 + 2 + 504 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 504 + + + + + + + id + fileid + + + 12 + + + 1 + 2 + 504 + + + + + + + name + id + + + 12 + + + 1 + 2 + 11 + + + 2 + 3 + 3 + + + 3 + 4 + 4 + + + 4 + 6 + 3 + + + 7 + 12 + 3 + + + 12 + 14 + 2 + + + 14 + 16 + 3 + + + 16 + 22 + 3 + + + 27 + 40 + 3 + + + 55 + 101 + 3 + + + + + + + name + parentid + + + 12 + + + 1 + 2 + 15 + + + 2 + 3 + 4 + + + 3 + 4 + 4 + + + 4 + 5 + 3 + + + 5 + 6 + 1 + + + 6 + 7 + 3 + + + 7 + 18 + 3 + + + 18 + 22 + 3 + + + 29 + 76 + 2 + + + + + + + name + idx + + + 12 + + + 1 + 2 + 12 + + + 2 + 3 + 4 + + + 3 + 4 + 5 + + + 4 + 5 + 1 + + + 5 + 6 + 3 + + + 6 + 9 + 3 + + + 10 + 11 + 2 + + + 13 + 15 + 3 + + + 15 + 17 + 3 + + + 17 + 41 + 2 + + + + + + + name + fileid + + + 12 + + + 1 + 2 + 18 + + + 2 + 3 + 7 + + + 3 + 4 + 3 + + + 4 + 5 + 1 + + + 5 + 6 + 4 + + + 7 + 11 + 3 + + + 11 + 14 + 2 + + + + + + + parentid + id + + + 12 + + + 1 + 2 + 116 + + + 2 + 3 + 37 + + + 3 + 4 + 22 + + + 4 + 8 + 15 + + + 8 + 61 + 9 + + + + + + + parentid + name + + + 12 + + + 1 + 2 + 160 + + + 2 + 3 + 23 + + + 3 + 8 + 16 + + + + + + + parentid + idx + + + 12 + + + 1 + 2 + 116 + + + 2 + 3 + 37 + + + 3 + 4 + 22 + + + 4 + 8 + 15 + + + 8 + 61 + 9 + + + + + + + parentid + fileid + + + 12 + + + 1 + 2 + 199 + + + + + + + idx + id + + + 12 + + + 1 + 2 + 54 + + + 2 + 3 + 4 + + + 3 + 4 + 11 + + + 4 + 6 + 6 + + + 6 + 21 + 7 + + + 40 + 141 + 4 + + + + + + + idx + name + + + 12 + + + 1 + 2 + 54 + + + 2 + 3 + 5 + + + 3 + 4 + 11 + + + 4 + 5 + 6 + + + 5 + 12 + 7 + + + 14 + 26 + 3 + + + + + + + idx + parentid + + + 12 + + + 1 + 2 + 54 + + + 2 + 3 + 4 + + + 3 + 4 + 11 + + + 4 + 6 + 6 + + + 6 + 21 + 7 + + + 40 + 141 + 4 + + + + + + + idx + fileid + + + 12 + + + 1 + 2 + 54 + + + 2 + 3 + 4 + + + 3 + 4 + 11 + + + 4 + 5 + 8 + + + 5 + 13 + 7 + + + 13 + 15 + 2 + + + + + + + fileid + id + + + 12 + + + 2 + 3 + 1 + + + 7 + 8 + 1 + + + 8 + 9 + 2 + + + 10 + 11 + 1 + + + 16 + 17 + 1 + + + 18 + 19 + 1 + + + 20 + 21 + 1 + + + 21 + 22 + 2 + + + 58 + 59 + 1 + + + 100 + 101 + 1 + + + 107 + 108 + 1 + + + 108 + 109 + 1 + + + + + + + fileid + name + + + 12 + + + 2 + 3 + 1 + + + 3 + 4 + 2 + + + 4 + 5 + 1 + + + 5 + 6 + 2 + + + 6 + 7 + 2 + + + 8 + 9 + 2 + + + 11 + 12 + 1 + + + 16 + 17 + 1 + + + 17 + 18 + 1 + + + 19 + 20 + 1 + + + + + + + fileid + parentid + + + 12 + + + 2 + 3 + 2 + + + 4 + 5 + 1 + + + 6 + 7 + 2 + + + 7 + 8 + 3 + + + 9 + 10 + 1 + + + 10 + 11 + 1 + + + 20 + 21 + 1 + + + 23 + 24 + 1 + + + 47 + 48 + 1 + + + 49 + 50 + 1 + + + + + + + fileid + idx + + + 12 + + + 1 + 2 + 1 + + + 3 + 4 + 2 + + + 4 + 5 + 1 + + + 7 + 8 + 3 + + + 8 + 9 + 1 + + + 13 + 14 + 1 + + + 14 + 15 + 1 + + + 16 + 17 + 1 + + + 30 + 31 + 1 + + + 34 + 35 + 1 + + + 67 + 68 + 1 + + + + + + + + + xmlAttrs + 408 + + + id + 408 + + + elementid + 288 + + + name + 28 + + + value + 235 + + + idx + 6 + + + fileid + 14 + + + + + id + elementid + + + 12 + + + 1 + 2 + 408 + + + + + + + id + name + + + 12 + + + 1 + 2 + 408 + + + + + + + id + value + + + 12 + + + 1 + 2 + 408 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 408 + + + + + + + id + fileid + + + 12 + + + 1 + 2 + 408 + + + + + + + elementid + id + + + 12 + + + 1 + 2 + 195 + + + 2 + 3 + 69 + + + 3 + 4 + 23 + + + 6 + 7 + 1 + + + + + + + elementid + name + + + 12 + + + 1 + 2 + 195 + + + 2 + 3 + 69 + + + 3 + 4 + 23 + + + 6 + 7 + 1 + + + + + + + elementid + value + + + 12 + + + 1 + 2 + 195 + + + 2 + 3 + 70 + + + 3 + 4 + 22 + + + 4 + 5 + 1 + + + + + + + elementid + idx + + + 12 + + + 1 + 2 + 195 + + + 2 + 3 + 69 + + + 3 + 4 + 23 + + + 6 + 7 + 1 + + + + + + + elementid + fileid + + + 12 + + + 1 + 2 + 288 + + + + + + + name + id + + + 12 + + + 1 + 2 + 12 + + + 2 + 3 + 3 + + + 3 + 4 + 4 + + + 5 + 15 + 2 + + + 21 + 22 + 2 + + + 22 + 23 + 2 + + + 45 + 97 + 2 + + + 132 + 133 + 1 + + + + + + + name + elementid + + + 12 + + + 1 + 2 + 12 + + + 2 + 3 + 3 + + + 3 + 4 + 4 + + + 5 + 15 + 2 + + + 21 + 22 + 2 + + + 22 + 23 + 2 + + + 45 + 97 + 2 + + + 132 + 133 + 1 + + + + + + + name + value + + + 12 + + + 1 + 2 + 16 + + + 2 + 3 + 2 + + + 3 + 4 + 3 + + + 11 + 12 + 1 + + + 15 + 16 + 2 + + + 21 + 36 + 2 + + + 41 + 75 + 2 + + + + + + + name + idx + + + 12 + + + 1 + 2 + 19 + + + 2 + 3 + 5 + + + 3 + 4 + 4 + + + + + + + name + fileid + + + 12 + + + 1 + 2 + 18 + + + 2 + 3 + 2 + + + 3 + 4 + 2 + + + 4 + 6 + 2 + + + 10 + 11 + 3 + + + 13 + 14 + 1 + + + + + + + value + id + + + 12 + + + 1 + 2 + 171 + + + 2 + 3 + 32 + + + 3 + 5 + 18 + + + 5 + 13 + 14 + + + + + + + value + elementid + + + 12 + + + 1 + 2 + 174 + + + 2 + 3 + 29 + + + 3 + 5 + 18 + + + 5 + 13 + 14 + + + + + + + value + name + + + 12 + + + 1 + 2 + 230 + + + 2 + 4 + 5 + + + + + + + value + idx + + + 12 + + + 1 + 2 + 224 + + + 2 + 4 + 11 + + + + + + + value + fileid + + + 12 + + + 1 + 2 + 193 + + + 2 + 3 + 32 + + + 3 + 7 + 10 + + + + + + + idx + id + + + 12 + + + 1 + 2 + 3 + + + 24 + 25 + 1 + + + 93 + 94 + 1 + + + 288 + 289 + 1 + + + + + + + idx + elementid + + + 12 + + + 1 + 2 + 3 + + + 24 + 25 + 1 + + + 93 + 94 + 1 + + + 288 + 289 + 1 + + + + + + + idx + name + + + 12 + + + 1 + 2 + 3 + + + 8 + 9 + 1 + + + 14 + 15 + 1 + + + 16 + 17 + 1 + + + + + + + idx + value + + + 12 + + + 1 + 2 + 3 + + + 23 + 24 + 1 + + + 64 + 65 + 1 + + + 157 + 158 + 1 + + + + + + + idx + fileid + + + 12 + + + 1 + 2 + 3 + + + 6 + 7 + 1 + + + 12 + 13 + 1 + + + 14 + 15 + 1 + + + + + + + fileid + id + + + 12 + + + 2 + 3 + 1 + + + 4 + 5 + 1 + + + 10 + 11 + 2 + + + 11 + 12 + 1 + + + 12 + 13 + 1 + + + 17 + 18 + 1 + + + 18 + 19 + 1 + + + 19 + 20 + 1 + + + 22 + 23 + 1 + + + 48 + 49 + 1 + + + 73 + 74 + 2 + + + 89 + 90 + 1 + + + + + + + fileid + elementid + + + 12 + + + 1 + 2 + 1 + + + 4 + 5 + 1 + + + 8 + 9 + 2 + + + 9 + 10 + 1 + + + 11 + 12 + 1 + + + 12 + 13 + 2 + + + 16 + 17 + 1 + + + 17 + 18 + 1 + + + 18 + 19 + 1 + + + 42 + 43 + 1 + + + 63 + 64 + 1 + + + 67 + 68 + 1 + + + + + + + fileid + name + + + 12 + + + 2 + 3 + 2 + + + 3 + 4 + 2 + + + 4 + 5 + 4 + + + 5 + 6 + 1 + + + 6 + 7 + 2 + + + 7 + 8 + 2 + + + 23 + 24 + 1 + + + + + + + fileid + value + + + 12 + + + 2 + 3 + 1 + + + 3 + 4 + 1 + + + 6 + 7 + 1 + + + 8 + 9 + 2 + + + 9 + 10 + 1 + + + 10 + 11 + 1 + + + 13 + 14 + 1 + + + 14 + 15 + 1 + + + 18 + 19 + 1 + + + 32 + 33 + 1 + + + 54 + 55 + 1 + + + 60 + 61 + 1 + + + 61 + 62 + 1 + + + + + + + fileid + idx + + + 12 + + + 1 + 2 + 2 + + + 2 + 3 + 6 + + + 3 + 4 + 5 + + + 6 + 7 + 1 + + + + + + + + + xmlNs + 0 + + + id + 0 + + + prefixName + 0 + + + URI + 0 + + + fileid + 0 + + + + + id + prefixName + + + 12 + + + + + + id + URI + + + 12 + + + + + + id + fileid + + + 12 + + + + + + prefixName + id + + + 12 + + + + + + prefixName + URI + + + 12 + + + + + + prefixName + fileid + + + 12 + + + + + + URI + id + + + 12 + + + + + + URI + prefixName + + + 12 + + + + + + URI + fileid + + + 12 + + + + + + fileid + id + + + 12 + + + + + + fileid + prefixName + + + 12 + + + + + + fileid + URI + + + 12 + + + + + + + + xmlHasNs + 0 + + + elementId + 0 + + + nsId + 0 + + + fileid + 0 + + + + + elementId + nsId + + + 12 + + + + + + elementId + fileid + + + 12 + + + + + + nsId + elementId + + + 12 + + + + + + nsId + fileid + + + 12 + + + + + + fileid + elementId + + + 12 + + + + + + fileid + nsId + + + 12 + + + + + + + + xmlComments + 30 + + + id + 30 + + + text + 18 + + + parentid + 20 + + + fileid + 10 + + + + + id + text + + + 12 + + + 1 + 2 + 30 + + + + + + + id + parentid + + + 12 + + + 1 + 2 + 30 + + + + + + + id + fileid + + + 12 + + + 1 + 2 + 30 + + + + + + + text + id + + + 12 + + + 1 + 2 + 13 + + + 2 + 3 + 3 + + + 4 + 5 + 1 + + + 7 + 8 + 1 + + + + + + + text + parentid + + + 12 + + + 1 + 2 + 14 + + + 2 + 3 + 2 + + + 4 + 5 + 1 + + + 7 + 8 + 1 + + + + + + + text + fileid + + + 12 + + + 1 + 2 + 15 + + + 2 + 3 + 2 + + + 7 + 8 + 1 + + + + + + + parentid + id + + + 12 + + + 1 + 2 + 15 + + + 2 + 3 + 3 + + + 4 + 5 + 1 + + + 5 + 6 + 1 + + + + + + + parentid + text + + + 12 + + + 1 + 2 + 15 + + + 2 + 3 + 3 + + + 3 + 4 + 1 + + + 5 + 6 + 1 + + + + + + + parentid + fileid + + + 12 + + + 1 + 2 + 20 + + + + + + + fileid + id + + + 12 + + + 1 + 2 + 6 + + + 2 + 3 + 1 + + + 4 + 5 + 1 + + + 8 + 9 + 1 + + + 10 + 11 + 1 + + + + + + + fileid + text + + + 12 + + + 1 + 2 + 6 + + + 2 + 3 + 1 + + + 4 + 5 + 1 + + + 5 + 6 + 1 + + + 9 + 10 + 1 + + + + + + + fileid + parentid + + + 12 + + + 1 + 2 + 7 + + + 3 + 4 + 1 + + + 5 + 6 + 2 + + + + + + + + + xmlChars + 869 + + + id + 869 + + + text + 427 + + + parentid + 432 + + + idx + 87 + + + isCDATA + 1 + + + fileid + 14 + + + + + id + text + + + 12 + + + 1 + 2 + 869 + + + + + + + id + parentid + + + 12 + + + 1 + 2 + 869 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 869 + + + + + + + id + isCDATA + + + 12 + + + 1 + 2 + 869 + + + + + + + id + fileid + + + 12 + + + 1 + 2 + 869 + + + + + + + text + id + + + 12 + + + 1 + 2 + 339 + + + 2 + 3 + 53 + + + 3 + 49 + 33 + + + 68 + 90 + 2 + + + + + + + text + parentid + + + 12 + + + 1 + 2 + 342 + + + 2 + 3 + 50 + + + 3 + 28 + 33 + + + 28 + 32 + 2 + + + + + + + text + idx + + + 12 + + + 1 + 2 + 400 + + + 2 + 58 + 27 + + + + + + + text + isCDATA + + + 12 + + + 1 + 2 + 427 + + + + + + + text + fileid + + + 12 + + + 1 + 2 + 380 + + + 2 + 4 + 36 + + + 4 + 11 + 11 + + + + + + + parentid + id + + + 12 + + + 1 + 2 + 302 + + + 2 + 3 + 53 + + + 3 + 4 + 28 + + + 4 + 7 + 34 + + + 7 + 60 + 15 + + + + + + + parentid + text + + + 12 + + + 1 + 2 + 314 + + + 2 + 3 + 67 + + + 3 + 5 + 37 + + + 5 + 26 + 14 + + + + + + + parentid + idx + + + 12 + + + 1 + 2 + 302 + + + 2 + 3 + 53 + + + 3 + 4 + 28 + + + 4 + 7 + 34 + + + 7 + 60 + 15 + + + + + + + parentid + isCDATA + + + 12 + + + 1 + 2 + 432 + + + + + + + parentid + fileid + + + 12 + + + 1 + 2 + 432 + + + + + + + idx + id + + + 12 + + + 1 + 2 + 55 + + + 2 + 3 + 3 + + + 3 + 4 + 11 + + + 4 + 7 + 7 + + + 8 + 28 + 7 + + + 41 + 408 + 4 + + + + + + + idx + text + + + 12 + + + 1 + 2 + 55 + + + 2 + 3 + 3 + + + 3 + 4 + 12 + + + 4 + 7 + 7 + + + 7 + 28 + 7 + + + 44 + 251 + 3 + + + + + + + idx + parentid + + + 12 + + + 1 + 2 + 55 + + + 2 + 3 + 3 + + + 3 + 4 + 11 + + + 4 + 7 + 7 + + + 8 + 28 + 7 + + + 41 + 408 + 4 + + + + + + + idx + isCDATA + + + 12 + + + 1 + 2 + 87 + + + + + + + idx + fileid + + + 12 + + + 1 + 2 + 55 + + + 2 + 3 + 3 + + + 3 + 4 + 12 + + + 4 + 5 + 7 + + + 5 + 12 + 7 + + + 13 + 15 + 3 + + + + + + + isCDATA + id + + + 12 + + + 869 + 870 + 1 + + + + + + + isCDATA + text + + + 12 + + + 427 + 428 + 1 + + + + + + + isCDATA + parentid + + + 12 + + + 432 + 433 + 1 + + + + + + + isCDATA + idx + + + 12 + + + 87 + 88 + 1 + + + + + + + isCDATA + fileid + + + 12 + + + 14 + 15 + 1 + + + + + + + fileid + id + + + 12 + + + 5 + 6 + 1 + + + 13 + 14 + 1 + + + 14 + 15 + 2 + + + 17 + 18 + 1 + + + 28 + 29 + 1 + + + 30 + 31 + 1 + + + 34 + 35 + 1 + + + 35 + 36 + 1 + + + 36 + 37 + 1 + + + 80 + 81 + 1 + + + 177 + 178 + 1 + + + 191 + 192 + 1 + + + 195 + 196 + 1 + + + + + + + fileid + text + + + 12 + + + 3 + 4 + 1 + + + 7 + 8 + 2 + + + 9 + 10 + 1 + + + 13 + 14 + 1 + + + 15 + 16 + 1 + + + 18 + 19 + 1 + + + 24 + 25 + 1 + + + 25 + 26 + 1 + + + 26 + 27 + 1 + + + 49 + 50 + 1 + + + 100 + 101 + 1 + + + 105 + 106 + 1 + + + 118 + 119 + 1 + + + + + + + fileid + parentid + + + 12 + + + 3 + 4 + 1 + + + 7 + 8 + 1 + + + 9 + 10 + 2 + + + 10 + 11 + 1 + + + 14 + 15 + 1 + + + 15 + 16 + 2 + + + 18 + 19 + 1 + + + 20 + 21 + 1 + + + 33 + 34 + 1 + + + 88 + 89 + 1 + + + 95 + 96 + 1 + + + 96 + 97 + 1 + + + + + + + fileid + idx + + + 12 + + + 2 + 3 + 1 + + + 4 + 5 + 2 + + + 5 + 6 + 1 + + + 7 + 8 + 3 + + + 9 + 10 + 1 + + + 13 + 14 + 1 + + + 15 + 16 + 2 + + + 32 + 33 + 1 + + + 35 + 36 + 1 + + + 65 + 66 + 1 + + + + + + + fileid + isCDATA + + + 12 + + + 1 + 2 + 14 + + + + + + + + + xmllocations + 1825 + + + xmlElement + 1825 + + + location + 1825 + + + + + xmlElement + location + + + 12 + + + 1 + 2 + 1825 + + + + + + + location + xmlElement + + + 12 + + + 1 + 2 + 1825 + + + + + + + + + compilations + 1 + + + id + 1 + + + cwd + 1 + + + + + id + cwd + + + 12 + + + 1 + 2 + 1 + + + + + + + cwd + id + + + 12 + + + 1 + 2 + 1 + + + + + + + + + compilation_args + 3 + + + id + 1 + + + num + 3 + + + arg + 3 + + + + + id + num + + + 12 + + + 3 + 4 + 1 + + + + + + + id + arg + + + 12 + + + 3 + 4 + 1 + + + + + + + num + id + + + 12 + + + 1 + 2 + 3 + + + + + + + num + arg + + + 12 + + + 1 + 2 + 3 + + + + + + + arg + id + + + 12 + + + 1 + 2 + 3 + + + + + + + arg + num + + + 12 + + + 1 + 2 + 3 + + + + + + + + + compilation_time + 0 + + + id + 0 + + + num + 0 + + + kind + 0 + + + secs + 0 + + + + + id + num + + + 12 + + + + + + id + kind + + + 12 + + + + + + id + secs + + + 12 + + + + + + num + id + + + 12 + + + + + + num + kind + + + 12 + + + + + + num + secs + + + 12 + + + + + + kind + id + + + 12 + + + + + + kind + num + + + 12 + + + + + + kind + secs + + + 12 + + + + + + secs + id + + + 12 + + + + + + secs + num + + + 12 + + + + + + secs + kind + + + 12 + + + + + + + + diagnostic_for + 0 + + + diagnostic + 0 + + + compilation + 0 + + + file_number + 0 + + + file_number_diagnostic_number + 0 + + + + + diagnostic + compilation + + + 12 + + + 1 + 2 + 1 + + + + + + + diagnostic + file_number + + + 12 + + + 1 + 2 + 1 + + + + + + + diagnostic + file_number_diagnostic_number + + + 12 + + + 1 + 2 + 1 + + + + + + + compilation + diagnostic + + + 12 + + + + + + compilation + file_number + + + 12 + + + + + + compilation + file_number_diagnostic_number + + + 12 + + + + + + file_number + diagnostic + + + 12 + + + + + + file_number + compilation + + + 12 + + + + + + file_number + file_number_diagnostic_number + + + 12 + + + + + + file_number_diagnostic_number + diagnostic + + + 12 + + + + + + file_number_diagnostic_number + compilation + + + 12 + + + + + + file_number_diagnostic_number + file_number + + + 12 + + + + + + + + compilation_finished + 1 + + + id + 1 + + + cpu_seconds + 1 + + + elapsed_seconds + 1 + + + + + id + cpu_seconds + + + 12 + + + 1 + 2 + 1 + + + + + + + id + elapsed_seconds + + + 12 + + + 1 + 2 + 1 + + + + + + + cpu_seconds + id + + + 12 + + + 1 + 2 + 1 + + + + + + + cpu_seconds + elapsed_seconds + + + 12 + + + 1 + 2 + 1 + + + + + + + elapsed_seconds + id + + + 12 + + + 1 + 2 + 1 + + + + + + + elapsed_seconds + cpu_seconds + + + 12 + + + 1 + 2 + 1 + + + + + + + + + compilation_compiling_files + 515 + + + id + 1 + + + num + 515 + + + file + 515 + + + + + id + num + + + 12 + + + 515 + 516 + 1 + + + + + + + id + file + + + 12 + + + 515 + 516 + 1 + + + + + + + num + id + + + 12 + + + 1 + 2 + 515 + + + + + + + num + file + + + 12 + + + 1 + 2 + 515 + + + + + + + file + id + + + 12 + + + 1 + 2 + 515 + + + + + + + file + num + + + 12 + + + 1 + 2 + 515 + + + + + + + + + diagnostics + 0 + + + id + 0 + + + severity + 0 + + + error_tag + 0 + + + error_message + 0 + + + full_error_message + 0 + + + location + 0 + + + + + id + severity + + + 12 + + + 1 + 2 + 1 + + + + + + + id + error_tag + + + 12 + + + 1 + 2 + 1 + + + + + + + id + error_message + + + 12 + + + 1 + 2 + 1 + + + + + + + id + full_error_message + + + 12 + + + 1 + 2 + 1 + + + + + + + id + location + + + 12 + + + 1 + 2 + 1 + + + + + + + severity + id + + + 12 + + + + + + severity + error_tag + + + 12 + + + + + + severity + error_message + + + 12 + + + + + + severity + full_error_message + + + 12 + + + + + + severity + location + + + 12 + + + + + + error_tag + id + + + 12 + + + + + + error_tag + severity + + + 12 + + + + + + error_tag + error_message + + + 12 + + + + + + error_tag + full_error_message + + + 12 + + + + + + error_tag + location + + + 12 + + + + + + error_message + id + + + 12 + + + + + + error_message + severity + + + 12 + + + + + + error_message + error_tag + + + 12 + + + + + + error_message + full_error_message + + + 12 + + + + + + error_message + location + + + 12 + + + + + + full_error_message + id + + + 12 + + + + + + full_error_message + severity + + + 12 + + + + + + full_error_message + error_tag + + + 12 + + + + + + full_error_message + error_message + + + 12 + + + + + + full_error_message + location + + + 12 + + + + + + location + id + + + 12 + + + + + + location + severity + + + 12 + + + + + + location + error_tag + + + 12 + + + + + + location + error_message + + + 12 + + + + + + location + full_error_message + + + 12 + + + + + + + + locations_default + 539178 + + + id + 539178 + + + file + 529 + + + beginLine + 10312 + + + beginColumn + 211 + + + endLine + 10378 + + + endColumn + 274 + + + + + id + file + + + 12 + + + 1 + 2 + 539178 + + + + + + + id + beginLine + + + 12 + + + 1 + 2 + 539178 + + + + + + + id + beginColumn + + + 12 + + + 1 + 2 + 539178 + + + + + + + id + endLine + + + 12 + + + 1 + 2 + 539178 + + + + + + + id + endColumn + + + 12 + + + 1 + 2 + 539178 + + + + + + + file + id + + + 12 + + + 4 + 39 + 41 + + + 39 + 120 + 40 + + + 120 + 208 + 40 + + + 210 + 290 + 40 + + + 291 + 372 + 40 + + + 372 + 453 + 41 + + + 456 + 563 + 40 + + + 565 + 769 + 40 + + + 774 + 1007 + 40 + + + 1012 + 1339 + 42 + + + 1347 + 1700 + 40 + + + 1701 + 2804 + 40 + + + 2873 + 6918 + 40 + + + 8171 + 11207 + 5 + + + + + + + file + beginLine + + + 12 + + + 3 + 15 + 44 + + + 15 + 27 + 42 + + + 27 + 46 + 40 + + + 46 + 63 + 43 + + + 63 + 78 + 40 + + + 78 + 94 + 41 + + + 95 + 120 + 40 + + + 120 + 152 + 41 + + + 152 + 188 + 40 + + + 189 + 247 + 41 + + + 249 + 325 + 40 + + + 336 + 544 + 40 + + + 554 + 10233 + 37 + + + + + + + file + beginColumn + + + 12 + + + 3 + 16 + 40 + + + 16 + 34 + 40 + + + 34 + 44 + 40 + + + 45 + 51 + 44 + + + 51 + 58 + 41 + + + 58 + 63 + 47 + + + 63 + 68 + 44 + + + 68 + 73 + 43 + + + 73 + 80 + 47 + + + 80 + 86 + 43 + + + 86 + 98 + 42 + + + 98 + 115 + 42 + + + 115 + 157 + 16 + + + + + + + file + endLine + + + 12 + + + 3 + 16 + 41 + + + 16 + 31 + 40 + + + 31 + 52 + 40 + + + 52 + 73 + 43 + + + 73 + 92 + 42 + + + 92 + 111 + 40 + + + 111 + 139 + 40 + + + 139 + 180 + 40 + + + 180 + 219 + 40 + + + 223 + 293 + 40 + + + 294 + 370 + 40 + + + 373 + 616 + 40 + + + 617 + 1835 + 40 + + + 2166 + 10377 + 3 + + + + + + + file + endColumn + + + 12 + + + 4 + 21 + 42 + + + 22 + 45 + 41 + + + 46 + 59 + 43 + + + 59 + 65 + 40 + + + 65 + 71 + 42 + + + 71 + 76 + 47 + + + 76 + 81 + 40 + + + 81 + 85 + 48 + + + 85 + 91 + 41 + + + 91 + 97 + 42 + + + 97 + 105 + 41 + + + 105 + 119 + 42 + + + 119 + 166 + 20 + + + + + + + beginLine + id + + + 12 + + + 1 + 2 + 6869 + + + 2 + 7 + 843 + + + 7 + 20 + 796 + + + 20 + 80 + 780 + + + 80 + 698 + 774 + + + 699 + 1775 + 250 + + + + + + + beginLine + file + + + 12 + + + 1 + 2 + 6947 + + + 2 + 3 + 868 + + + 3 + 6 + 899 + + + 6 + 24 + 774 + + + 24 + 304 + 774 + + + 305 + 530 + 50 + + + + + + + beginLine + beginColumn + + + 12 + + + 1 + 2 + 6894 + + + 2 + 5 + 789 + + + 5 + 11 + 780 + + + 11 + 30 + 796 + + + 30 + 72 + 779 + + + 72 + 115 + 274 + + + + + + + beginLine + endLine + + + 12 + + + 1 + 2 + 7630 + + + 2 + 3 + 1017 + + + 3 + 6 + 779 + + + 6 + 21 + 792 + + + 21 + 315 + 94 + + + + + + + beginLine + endColumn + + + 12 + + + 1 + 2 + 6871 + + + 2 + 5 + 793 + + + 5 + 12 + 789 + + + 12 + 33 + 778 + + + 33 + 81 + 781 + + + 81 + 127 + 300 + + + + + + + beginColumn + id + + + 12 + + + 1 + 2 + 29 + + + 2 + 4 + 19 + + + 4 + 9 + 16 + + + 10 + 22 + 16 + + + 22 + 62 + 16 + + + 62 + 141 + 16 + + + 144 + 330 + 16 + + + 330 + 759 + 16 + + + 781 + 1804 + 16 + + + 1846 + 3757 + 16 + + + 4042 + 8613 + 16 + + + 8764 + 22092 + 16 + + + 28067 + 55590 + 3 + + + + + + + beginColumn + file + + + 12 + + + 1 + 2 + 36 + + + 2 + 4 + 14 + + + 4 + 10 + 18 + + + 10 + 22 + 17 + + + 22 + 48 + 17 + + + 49 + 96 + 17 + + + 96 + 180 + 16 + + + 180 + 292 + 16 + + + 297 + 382 + 16 + + + 383 + 430 + 16 + + + 431 + 463 + 16 + + + 463 + 530 + 12 + + + + + + + beginColumn + beginLine + + + 12 + + + 1 + 2 + 36 + + + 2 + 4 + 13 + + + 4 + 9 + 16 + + + 9 + 20 + 16 + + + 20 + 53 + 16 + + + 55 + 103 + 16 + + + 107 + 209 + 16 + + + 221 + 412 + 16 + + + 422 + 682 + 16 + + + 706 + 975 + 16 + + + 977 + 1410 + 16 + + + 1417 + 1983 + 16 + + + 2809 + 10184 + 2 + + + + + + + beginColumn + endLine + + + 12 + + + 1 + 2 + 36 + + + 2 + 4 + 13 + + + 4 + 9 + 16 + + + 9 + 21 + 19 + + + 24 + 55 + 16 + + + 58 + 128 + 16 + + + 131 + 226 + 16 + + + 231 + 453 + 16 + + + 480 + 769 + 16 + + + 783 + 1037 + 16 + + + 1057 + 1521 + 16 + + + 1526 + 10180 + 15 + + + + + + + beginColumn + endColumn + + + 12 + + + 1 + 2 + 31 + + + 2 + 3 + 16 + + + 3 + 6 + 17 + + + 6 + 12 + 17 + + + 12 + 21 + 16 + + + 21 + 28 + 16 + + + 28 + 35 + 17 + + + 35 + 45 + 16 + + + 46 + 56 + 16 + + + 56 + 77 + 17 + + + 77 + 101 + 17 + + + 101 + 201 + 15 + + + + + + + endLine + id + + + 12 + + + 1 + 2 + 6731 + + + 2 + 6 + 903 + + + 6 + 16 + 817 + + + 16 + 58 + 785 + + + 58 + 457 + 779 + + + 458 + 1734 + 363 + + + + + + + endLine + file + + + 12 + + + 1 + 2 + 6847 + + + 2 + 3 + 810 + + + 3 + 5 + 787 + + + 5 + 14 + 802 + + + 14 + 104 + 780 + + + 105 + 530 + 352 + + + + + + + endLine + beginLine + + + 12 + + + 1 + 2 + 7766 + + + 2 + 3 + 956 + + + 3 + 7 + 860 + + + 7 + 27 + 785 + + + 27 + 31 + 11 + + + + + + + endLine + beginColumn + + + 12 + + + 1 + 2 + 6749 + + + 2 + 4 + 616 + + + 4 + 8 + 878 + + + 8 + 21 + 799 + + + 21 + 53 + 779 + + + 53 + 113 + 557 + + + + + + + endLine + endColumn + + + 12 + + + 1 + 2 + 6792 + + + 2 + 5 + 936 + + + 5 + 12 + 801 + + + 12 + 34 + 791 + + + 34 + 83 + 787 + + + 83 + 127 + 271 + + + + + + + endColumn + id + + + 12 + + + 1 + 2 + 33 + + + 2 + 3 + 60 + + + 3 + 9 + 23 + + + 9 + 40 + 21 + + + 43 + 111 + 21 + + + 121 + 347 + 21 + + + 369 + 1229 + 21 + + + 1267 + 3311 + 21 + + + 3642 + 7560 + 21 + + + 7682 + 12716 + 21 + + + 12740 + 20483 + 11 + + + + + + + endColumn + file + + + 12 + + + 1 + 2 + 94 + + + 2 + 6 + 19 + + + 6 + 16 + 21 + + + 16 + 45 + 21 + + + 45 + 110 + 21 + + + 123 + 281 + 21 + + + 290 + 393 + 21 + + + 395 + 445 + 21 + + + 446 + 468 + 21 + + + 470 + 530 + 14 + + + + + + + endColumn + beginLine + + + 12 + + + 1 + 2 + 94 + + + 2 + 6 + 19 + + + 6 + 21 + 21 + + + 21 + 52 + 21 + + + 54 + 154 + 21 + + + 157 + 449 + 21 + + + 455 + 808 + 21 + + + 814 + 1132 + 21 + + + 1145 + 1769 + 21 + + + 1792 + 2365 + 14 + + + + + + + endColumn + beginColumn + + + 12 + + + 1 + 2 + 39 + + + 2 + 3 + 56 + + + 3 + 7 + 23 + + + 7 + 18 + 21 + + + 18 + 27 + 24 + + + 27 + 37 + 22 + + + 37 + 49 + 23 + + + 49 + 63 + 22 + + + 63 + 74 + 20 + + + 74 + 102 + 21 + + + 103 + 172 + 3 + + + + + + + endColumn + endLine + + + 12 + + + 1 + 2 + 94 + + + 2 + 6 + 19 + + + 6 + 21 + 21 + + + 21 + 52 + 21 + + + 53 + 153 + 21 + + + 156 + 444 + 21 + + + 446 + 789 + 21 + + + 806 + 1121 + 21 + + + 1138 + 1726 + 21 + + + 1787 + 2357 + 14 + + + + + + + + + numlines + 514 + + + element_id + 514 + + + num_lines + 309 + + + num_code + 350 + + + num_comment + 150 + + + + + element_id + num_lines + + + 12 + + + 1 + 2 + 514 + + + + + + + element_id + num_code + + + 12 + + + 1 + 2 + 514 + + + + + + + element_id + num_comment + + + 12 + + + 1 + 2 + 514 + + + + + + + num_lines + element_id + + + 12 + + + 1 + 2 + 183 + + + 2 + 3 + 74 + + + 3 + 4 + 32 + + + 4 + 7 + 20 + + + + + + + num_lines + num_code + + + 12 + + + 1 + 2 + 187 + + + 2 + 3 + 82 + + + 3 + 4 + 23 + + + 4 + 7 + 17 + + + + + + + num_lines + num_comment + + + 12 + + + 1 + 2 + 188 + + + 2 + 3 + 79 + + + 3 + 4 + 28 + + + 4 + 7 + 14 + + + + + + + num_code + element_id + + + 12 + + + 1 + 2 + 252 + + + 2 + 3 + 65 + + + 3 + 5 + 28 + + + 6 + 18 + 5 + + + + + + + num_code + num_lines + + + 12 + + + 1 + 2 + 256 + + + 2 + 3 + 67 + + + 3 + 18 + 27 + + + + + + + num_code + num_comment + + + 12 + + + 1 + 2 + 259 + + + 2 + 3 + 63 + + + 3 + 7 + 27 + + + 17 + 18 + 1 + + + + + + + num_comment + element_id + + + 12 + + + 1 + 2 + 65 + + + 2 + 3 + 27 + + + 3 + 4 + 17 + + + 4 + 5 + 7 + + + 5 + 6 + 10 + + + 6 + 10 + 12 + + + 10 + 31 + 12 + + + + + + + num_comment + num_lines + + + 12 + + + 1 + 2 + 65 + + + 2 + 3 + 27 + + + 3 + 4 + 18 + + + 4 + 5 + 7 + + + 5 + 6 + 10 + + + 6 + 10 + 13 + + + 10 + 25 + 10 + + + + + + + num_comment + num_code + + + 12 + + + 1 + 2 + 66 + + + 2 + 3 + 27 + + + 3 + 4 + 17 + + + 4 + 5 + 6 + + + 5 + 6 + 10 + + + 6 + 9 + 12 + + + 9 + 24 + 12 + + + + + + + + + files + 529 + + + id + 529 + + + name + 529 + + + + + id + name + + + 12 + + + 1 + 2 + 529 + + + + + + + name + id + + + 12 + + + 1 + 2 + 529 + + + + + + + + + folders + 210 + + + id + 210 + + + name + 210 + + + + + id + name + + + 12 + + + 1 + 2 + 210 + + + + + + + name + id + + + 12 + + + 1 + 2 + 210 + + + + + + + + + containerparent + 738 + + + parent + 210 + + + child + 738 + + + + + parent + child + + + 12 + + + 1 + 2 + 115 + + + 2 + 3 + 32 + + + 3 + 4 + 12 + + + 4 + 6 + 19 + + + 6 + 12 + 16 + + + 13 + 38 + 16 + + + + + + + child + parent + + + 12 + + + 1 + 2 + 738 + + + + + + + + + has_location + 599339 + + + locatable + 599339 + + + location + 537353 + + + + + locatable + location + + + 12 + + + 1 + 2 + 599339 + + + + + + + location + locatable + + + 12 + + + 1 + 2 + 475682 + + + 2 + 3 + 61627 + + + 3 + 75 + 44 + + + + + + + + + comment_groups + 12083 + + + id + 12083 + + + parent + 509 + + + idx + 720 + + + + + id + parent + + + 12 + + + 1 + 2 + 12083 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 12083 + + + + + + + parent + id + + + 12 + + + 1 + 2 + 44 + + + 2 + 3 + 45 + + + 3 + 4 + 32 + + + 4 + 5 + 27 + + + 5 + 7 + 38 + + + 7 + 10 + 47 + + + 10 + 13 + 34 + + + 13 + 17 + 47 + + + 17 + 23 + 40 + + + 23 + 29 + 40 + + + 29 + 38 + 39 + + + 38 + 70 + 39 + + + 70 + 721 + 37 + + + + + + + parent + idx + + + 12 + + + 1 + 2 + 44 + + + 2 + 3 + 45 + + + 3 + 4 + 32 + + + 4 + 5 + 27 + + + 5 + 7 + 38 + + + 7 + 10 + 47 + + + 10 + 13 + 34 + + + 13 + 17 + 47 + + + 17 + 23 + 40 + + + 23 + 29 + 40 + + + 29 + 38 + 39 + + + 38 + 70 + 39 + + + 70 + 721 + 37 + + + + + + + idx + id + + + 12 + + + 1 + 2 + 429 + + + 2 + 3 + 53 + + + 3 + 8 + 66 + + + 8 + 16 + 57 + + + 16 + 44 + 54 + + + 44 + 311 + 54 + + + 323 + 510 + 7 + + + + + + + idx + parent + + + 12 + + + 1 + 2 + 429 + + + 2 + 3 + 53 + + + 3 + 8 + 66 + + + 8 + 16 + 57 + + + 16 + 44 + 54 + + + 44 + 311 + 54 + + + 323 + 510 + 7 + + + + + + + + + comments + 25724 + + + id + 25724 + + + kind + 2 + + + parent + 12083 + + + idx + 156 + + + text + 20683 + + + + + id + kind + + + 12 + + + 1 + 2 + 25724 + + + + + + + id + parent + + + 12 + + + 1 + 2 + 25724 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 25724 + + + + + + + id + text + + + 12 + + + 1 + 2 + 25724 + + + + + + + kind + id + + + 12 + + + 846 + 847 + 1 + + + 24878 + 24879 + 1 + + + + + + + kind + parent + + + 12 + + + 846 + 847 + 1 + + + 11239 + 11240 + 1 + + + + + + + kind + idx + + + 12 + + + 2 + 3 + 1 + + + 156 + 157 + 1 + + + + + + + kind + text + + + 12 + + + 690 + 691 + 1 + + + 19993 + 19994 + 1 + + + + + + + parent + id + + + 12 + + + 1 + 2 + 7828 + + + 2 + 3 + 1787 + + + 3 + 4 + 1289 + + + 4 + 11 + 937 + + + 11 + 157 + 242 + + + + + + + parent + kind + + + 12 + + + 1 + 2 + 12081 + + + 2 + 3 + 2 + + + + + + + parent + idx + + + 12 + + + 1 + 2 + 7828 + + + 2 + 3 + 1787 + + + 3 + 4 + 1289 + + + 4 + 11 + 937 + + + 11 + 157 + 242 + + + + + + + parent + text + + + 12 + + + 1 + 2 + 7828 + + + 2 + 3 + 1817 + + + 3 + 4 + 1275 + + + 4 + 10 + 937 + + + 10 + 131 + 226 + + + + + + + idx + id + + + 12 + + + 1 + 2 + 36 + + + 2 + 4 + 13 + + + 4 + 5 + 16 + + + 5 + 7 + 12 + + + 7 + 9 + 12 + + + 9 + 11 + 6 + + + 12 + 14 + 13 + + + 14 + 24 + 13 + + + 26 + 52 + 12 + + + 59 + 218 + 12 + + + 242 + 12084 + 11 + + + + + + + idx + kind + + + 12 + + + 1 + 2 + 154 + + + 2 + 3 + 2 + + + + + + + idx + parent + + + 12 + + + 1 + 2 + 36 + + + 2 + 4 + 13 + + + 4 + 5 + 16 + + + 5 + 7 + 12 + + + 7 + 9 + 12 + + + 9 + 11 + 6 + + + 12 + 14 + 13 + + + 14 + 24 + 13 + + + 26 + 52 + 12 + + + 59 + 218 + 12 + + + 242 + 12084 + 11 + + + + + + + idx + text + + + 12 + + + 1 + 2 + 36 + + + 2 + 4 + 14 + + + 4 + 5 + 18 + + + 5 + 7 + 14 + + + 7 + 9 + 11 + + + 9 + 12 + 14 + + + 12 + 17 + 12 + + + 19 + 36 + 13 + + + 39 + 128 + 12 + + + 165 + 10500 + 12 + + + + + + + text + id + + + 12 + + + 1 + 2 + 19550 + + + 2 + 1935 + 1133 + + + + + + + text + kind + + + 12 + + + 1 + 2 + 20683 + + + + + + + text + parent + + + 12 + + + 1 + 2 + 19575 + + + 2 + 828 + 1108 + + + + + + + text + idx + + + 12 + + + 1 + 2 + 20523 + + + 2 + 107 + 160 + + + + + + + + + doc_comments + 4330 + + + node + 4330 + + + comment + 4330 + + + + + node + comment + + + 12 + + + 1 + 2 + 4330 + + + + + + + comment + node + + + 12 + + + 1 + 2 + 4330 + + + + + + + + + exprs + 414037 + + + id + 414037 + + + kind + 48 + + + parent + 219324 + + + idx + 5163 + + + + + id + kind + + + 12 + + + 1 + 2 + 414037 + + + + + + + id + parent + + + 12 + + + 1 + 2 + 414037 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 414037 + + + + + + + kind + id + + + 12 + + + 7 + 20 + 4 + + + 21 + 54 + 4 + + + 57 + 142 + 4 + + + 146 + 236 + 4 + + + 248 + 344 + 4 + + + 509 + 620 + 4 + + + 678 + 839 + 4 + + + 1013 + 1235 + 4 + + + 1272 + 2705 + 4 + + + 3244 + 4582 + 4 + + + 5616 + 10361 + 4 + + + 24892 + 237317 + 4 + + + + + + + kind + parent + + + 12 + + + 7 + 20 + 4 + + + 21 + 54 + 4 + + + 57 + 142 + 4 + + + 144 + 207 + 4 + + + 233 + 324 + 4 + + + 509 + 613 + 4 + + + 676 + 790 + 4 + + + 1013 + 1226 + 4 + + + 1239 + 1949 + 4 + + + 2582 + 3985 + 4 + + + 4252 + 10115 + 4 + + + 14086 + 154744 + 4 + + + + + + + kind + idx + + + 12 + + + 1 + 2 + 3 + + + 2 + 3 + 8 + + + 3 + 4 + 10 + + + 4 + 5 + 6 + + + 5 + 7 + 4 + + + 7 + 8 + 4 + + + 8 + 14 + 3 + + + 15 + 22 + 4 + + + 23 + 34 + 4 + + + 1057 + 5164 + 2 + + + + + + + parent + id + + + 12 + + + 1 + 2 + 65804 + + + 2 + 3 + 133334 + + + 3 + 5 + 17889 + + + 5 + 5144 + 2297 + + + + + + + parent + kind + + + 12 + + + 1 + 2 + 137263 + + + 2 + 3 + 75813 + + + 3 + 7 + 6248 + + + + + + + parent + idx + + + 12 + + + 1 + 2 + 65804 + + + 2 + 3 + 133334 + + + 3 + 5 + 17889 + + + 5 + 5144 + 2297 + + + + + + + idx + id + + + 12 + + + 1 + 2 + 3910 + + + 2 + 3 + 183 + + + 3 + 4 + 782 + + + 4 + 180006 + 288 + + + + + + + idx + kind + + + 12 + + + 1 + 2 + 4087 + + + 2 + 3 + 1033 + + + 3 + 48 + 43 + + + + + + + idx + parent + + + 12 + + + 1 + 2 + 3910 + + + 2 + 3 + 183 + + + 3 + 4 + 782 + + + 4 + 180006 + 288 + + + + + + + + + literals + 270756 + + + expr + 270756 + + + value + 25795 + + + raw + 27594 + + + + + expr + value + + + 12 + + + 1 + 2 + 270756 + + + + + + + expr + raw + + + 12 + + + 1 + 2 + 270756 + + + + + + + value + expr + + + 12 + + + 1 + 2 + 14635 + + + 2 + 3 + 3291 + + + 3 + 4 + 1783 + + + 4 + 6 + 1931 + + + 6 + 12 + 1968 + + + 12 + 139 + 1935 + + + 139 + 6840 + 252 + + + + + + + value + raw + + + 12 + + + 1 + 2 + 24051 + + + 2 + 5 + 1744 + + + + + + + raw + expr + + + 12 + + + 1 + 2 + 16038 + + + 2 + 3 + 3521 + + + 3 + 4 + 1869 + + + 4 + 7 + 2553 + + + 7 + 18 + 2129 + + + 18 + 6833 + 1484 + + + + + + + raw + value + + + 12 + + + 1 + 2 + 27594 + + + + + + + + + constvalues + 43931 + + + expr + 43931 + + + value + 16896 + + + exact + 16897 + + + + + expr + value + + + 12 + + + 1 + 2 + 43931 + + + + + + + expr + exact + + + 12 + + + 1 + 2 + 43931 + + + + + + + value + expr + + + 12 + + + 1 + 2 + 14932 + + + 2 + 4 + 1388 + + + 4 + 6766 + 576 + + + + + + + value + exact + + + 12 + + + 1 + 2 + 16895 + + + 2 + 3 + 1 + + + + + + + exact + expr + + + 12 + + + 1 + 2 + 14933 + + + 2 + 4 + 1388 + + + 4 + 6766 + 576 + + + + + + + exact + value + + + 12 + + + 1 + 2 + 16897 + + + + + + + + + fields + 19974 + + + id + 19974 + + + parent + 9600 + + + idx + 57 + + + + + id + parent + + + 12 + + + 1 + 2 + 19974 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 19974 + + + + + + + parent + id + + + 12 + + + 1 + 2 + 4790 + + + 2 + 3 + 2214 + + + 3 + 4 + 1363 + + + 4 + 5 + 653 + + + 5 + 53 + 580 + + + + + + + parent + idx + + + 12 + + + 1 + 2 + 4790 + + + 2 + 3 + 2214 + + + 3 + 4 + 1363 + + + 4 + 5 + 653 + + + 5 + 53 + 580 + + + + + + + idx + id + + + 12 + + + 1 + 2 + 14 + + + 2 + 3 + 8 + + + 3 + 6 + 5 + + + 6 + 11 + 5 + + + 12 + 18 + 5 + + + 19 + 31 + 5 + + + 46 + 105 + 5 + + + 115 + 633 + 5 + + + 914 + 7063 + 5 + + + + + + + idx + parent + + + 12 + + + 1 + 2 + 14 + + + 2 + 3 + 8 + + + 3 + 6 + 5 + + + 6 + 11 + 5 + + + 12 + 18 + 5 + + + 19 + 31 + 5 + + + 46 + 105 + 5 + + + 115 + 633 + 5 + + + 914 + 7063 + 5 + + + + + + + + + stmts + 73990 + + + id + 73990 + + + kind + 33 + + + parent + 41543 + + + idx + 81 + + + + + id + kind + + + 12 + + + 1 + 2 + 73990 + + + + + + + id + parent + + + 12 + + + 1 + 2 + 73990 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 73990 + + + + + + + kind + id + + + 12 + + + 2 + 3 + 1 + + + 3 + 4 + 4 + + + 5 + 9 + 3 + + + 18 + 50 + 3 + + + 63 + 72 + 3 + + + 72 + 224 + 3 + + + 301 + 379 + 3 + + + 400 + 615 + 3 + + + 654 + 2136 + 3 + + + 3476 + 7606 + 3 + + + 9225 + 9729 + 3 + + + 19358 + 19359 + 1 + + + + + + + kind + parent + + + 12 + + + 2 + 3 + 1 + + + 3 + 4 + 4 + + + 5 + 9 + 3 + + + 17 + 35 + 3 + + + 47 + 69 + 3 + + + 69 + 205 + 3 + + + 301 + 367 + 3 + + + 385 + 586 + 3 + + + 606 + 1154 + 3 + + + 1719 + 5672 + 3 + + + 5912 + 9226 + 3 + + + 18820 + 18821 + 1 + + + + + + + kind + idx + + + 12 + + + 1 + 2 + 1 + + + 2 + 3 + 5 + + + 3 + 5 + 2 + + + 5 + 8 + 3 + + + 8 + 9 + 3 + + + 9 + 13 + 3 + + + 13 + 16 + 3 + + + 16 + 17 + 2 + + + 17 + 27 + 3 + + + 27 + 33 + 3 + + + 44 + 47 + 3 + + + 55 + 82 + 2 + + + + + + + parent + id + + + 12 + + + 1 + 2 + 29362 + + + 2 + 3 + 6137 + + + 3 + 5 + 3650 + + + 5 + 82 + 2394 + + + + + + + parent + kind + + + 12 + + + 1 + 2 + 31418 + + + 2 + 3 + 5760 + + + 3 + 5 + 3597 + + + 5 + 11 + 768 + + + + + + + parent + idx + + + 12 + + + 1 + 2 + 29362 + + + 2 + 3 + 6137 + + + 3 + 5 + 3650 + + + 5 + 82 + 2394 + + + + + + + idx + id + + + 12 + + + 1 + 2 + 6 + + + 2 + 3 + 20 + + + 5 + 6 + 3 + + + 7 + 8 + 11 + + + 10 + 15 + 7 + + + 15 + 27 + 7 + + + 27 + 70 + 7 + + + 85 + 262 + 7 + + + 314 + 1279 + 7 + + + 1720 + 24879 + 6 + + + + + + + idx + kind + + + 12 + + + 1 + 2 + 12 + + + 2 + 3 + 22 + + + 3 + 5 + 7 + + + 5 + 6 + 6 + + + 6 + 7 + 4 + + + 7 + 9 + 7 + + + 9 + 13 + 7 + + + 13 + 18 + 7 + + + 20 + 28 + 6 + + + 29 + 34 + 3 + + + + + + + idx + parent + + + 12 + + + 1 + 2 + 6 + + + 2 + 3 + 20 + + + 5 + 6 + 3 + + + 7 + 8 + 11 + + + 10 + 15 + 7 + + + 15 + 27 + 7 + + + 27 + 70 + 7 + + + 85 + 262 + 7 + + + 314 + 1279 + 7 + + + 1720 + 24879 + 6 + + + + + + + + + decls + 8690 + + + id + 8690 + + + kind + 5 + + + parent + 1951 + + + idx + 226 + + + + + id + kind + + + 12 + + + 1 + 2 + 8690 + + + + + + + id + parent + + + 12 + + + 1 + 2 + 8690 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 8690 + + + + + + + kind + id + + + 12 + + + 280 + 281 + 1 + + + 479 + 480 + 1 + + + 1349 + 1350 + 1 + + + 1769 + 1770 + 1 + + + 4813 + 4814 + 1 + + + + + + + kind + parent + + + 12 + + + 196 + 197 + 1 + + + 336 + 337 + 1 + + + 478 + 479 + 1 + + + 483 + 484 + 1 + + + 1566 + 1567 + 1 + + + + + + + kind + idx + + + 12 + + + 2 + 3 + 1 + + + 39 + 40 + 1 + + + 105 + 106 + 1 + + + 219 + 220 + 1 + + + 225 + 226 + 1 + + + + + + + parent + id + + + 12 + + + 1 + 2 + 1460 + + + 2 + 6 + 149 + + + 6 + 12 + 155 + + + 12 + 36 + 147 + + + 36 + 227 + 40 + + + + + + + parent + kind + + + 12 + + + 1 + 2 + 1463 + + + 2 + 3 + 111 + + + 3 + 4 + 185 + + + 4 + 5 + 141 + + + 5 + 6 + 51 + + + + + + + parent + idx + + + 12 + + + 1 + 2 + 1460 + + + 2 + 6 + 149 + + + 6 + 12 + 155 + + + 12 + 36 + 147 + + + 36 + 227 + 40 + + + + + + + idx + id + + + 12 + + + 1 + 2 + 4 + + + 2 + 3 + 30 + + + 3 + 4 + 18 + + + 4 + 5 + 66 + + + 5 + 6 + 2 + + + 6 + 7 + 31 + + + 7 + 11 + 17 + + + 11 + 31 + 17 + + + 31 + 65 + 17 + + + 67 + 275 + 17 + + + 323 + 1952 + 7 + + + + + + + idx + kind + + + 12 + + + 1 + 2 + 7 + + + 2 + 3 + 113 + + + 3 + 4 + 69 + + + 4 + 5 + 35 + + + 5 + 6 + 2 + + + + + + + idx + parent + + + 12 + + + 1 + 2 + 4 + + + 2 + 3 + 30 + + + 3 + 4 + 18 + + + 4 + 5 + 66 + + + 5 + 6 + 2 + + + 6 + 7 + 31 + + + 7 + 11 + 17 + + + 11 + 31 + 17 + + + 31 + 65 + 17 + + + 67 + 275 + 17 + + + 323 + 1952 + 7 + + + + + + + + + specs + 7889 + + + id + 7889 + + + kind + 4 + + + parent + 3877 + + + idx + 108 + + + + + id + kind + + + 12 + + + 1 + 2 + 7889 + + + + + + + id + parent + + + 12 + + + 1 + 2 + 7889 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 7889 + + + + + + + kind + id + + + 12 + + + 16 + 17 + 1 + + + 1349 + 1350 + 1 + + + 3056 + 3057 + 1 + + + 3468 + 3469 + 1 + + + + + + + kind + parent + + + 12 + + + 16 + 17 + 1 + + + 479 + 480 + 1 + + + 1333 + 1334 + 1 + + + 2049 + 2050 + 1 + + + + + + + kind + idx + + + 12 + + + 1 + 2 + 1 + + + 14 + 15 + 1 + + + 36 + 37 + 1 + + + 108 + 109 + 1 + + + + + + + parent + id + + + 12 + + + 1 + 2 + 3206 + + + 2 + 6 + 343 + + + 6 + 18 + 298 + + + 18 + 109 + 30 + + + + + + + parent + kind + + + 12 + + + 1 + 2 + 3877 + + + + + + + parent + idx + + + 12 + + + 1 + 2 + 3206 + + + 2 + 6 + 343 + + + 6 + 18 + 298 + + + 18 + 109 + 30 + + + + + + + idx + id + + + 12 + + + 1 + 2 + 53 + + + 2 + 3 + 19 + + + 3 + 6 + 9 + + + 6 + 28 + 9 + + + 30 + 156 + 9 + + + 188 + 3878 + 9 + + + + + + + idx + kind + + + 12 + + + 1 + 2 + 72 + + + 2 + 3 + 22 + + + 3 + 4 + 13 + + + 4 + 5 + 1 + + + + + + + idx + parent + + + 12 + + + 1 + 2 + 53 + + + 2 + 3 + 19 + + + 3 + 6 + 9 + + + 6 + 28 + 9 + + + 30 + 156 + 9 + + + 188 + 3878 + 9 + + + + + + + + + scopes + 36775 + + + id + 36775 + + + kind + 3 + + + + + id + kind + + + 12 + + + 1 + 2 + 36775 + + + + + + + kind + id + + + 12 + + + 1 + 2 + 1 + + + 346 + 347 + 1 + + + 36428 + 36429 + 1 + + + + + + + + + scopenesting + 36774 + + + inner + 36774 + + + outer + 21713 + + + + + inner + outer + + + 12 + + + 1 + 2 + 36774 + + + + + + + outer + inner + + + 12 + + + 1 + 2 + 16964 + + + 2 + 3 + 2474 + + + 3 + 7 + 1759 + + + 7 + 347 + 516 + + + + + + + + + scopenodes + 36428 + + + node + 36428 + + + scope + 36428 + + + + + node + scope + + + 12 + + + 1 + 2 + 36428 + + + + + + + scope + node + + + 12 + + + 1 + 2 + 36428 + + + + + + + + + objects + 84909 + + + id + 84909 + + + kind + 9 + + + name + 30576 + + + + + id + kind + + + 12 + + + 1 + 2 + 84909 + + + + + + + id + name + + + 12 + + + 1 + 2 + 84909 + + + + + + + kind + id + + + 12 + + + 4 + 5 + 1 + + + 18 + 19 + 1 + + + 20 + 21 + 1 + + + 49 + 50 + 1 + + + 3468 + 3469 + 1 + + + 3602 + 3603 + 1 + + + 8857 + 8858 + 1 + + + 17793 + 17794 + 1 + + + 51098 + 51099 + 1 + + + + + + + kind + name + + + 12 + + + 4 + 5 + 1 + + + 18 + 19 + 1 + + + 20 + 21 + 1 + + + 38 + 39 + 1 + + + 203 + 204 + 1 + + + 3004 + 3005 + 1 + + + 8418 + 8419 + 1 + + + 10132 + 10133 + 1 + + + 10913 + 10914 + 1 + + + + + + + name + id + + + 12 + + + 1 + 2 + 25286 + + + 2 + 3 + 2613 + + + 3 + 20 + 2304 + + + 20 + 2222 + 373 + + + + + + + name + kind + + + 12 + + + 1 + 2 + 28809 + + + 2 + 6 + 1767 + + + + + + + + + objectscopes + 54774 + + + object + 54774 + + + scope + 13947 + + + + + object + scope + + + 12 + + + 1 + 2 + 54774 + + + + + + + scope + object + + + 12 + + + 1 + 2 + 7112 + + + 2 + 3 + 2972 + + + 3 + 4 + 1274 + + + 4 + 6 + 1264 + + + 6 + 15 + 1055 + + + 15 + 2694 + 270 + + + + + + + + + objecttypes + 84907 + + + object + 84907 + + + tp + 13462 + + + + + object + tp + + + 12 + + + 1 + 2 + 84907 + + + + + + + tp + object + + + 12 + + + 1 + 2 + 7893 + + + 2 + 3 + 2114 + + + 3 + 4 + 892 + + + 4 + 7 + 1190 + + + 7 + 25 + 1011 + + + 25 + 4267 + 362 + + + + + + + + + methodreceivers + 9873 + + + method + 9873 + + + receiver + 9873 + + + + + method + receiver + + + 12 + + + 1 + 2 + 9873 + + + + + + + receiver + method + + + 12 + + + 1 + 2 + 9873 + + + + + + + + + fieldstructs + 10934 + + + field + 10934 + + + struct + 2408 + + + + + field + struct + + + 12 + + + 1 + 2 + 10934 + + + + + + + struct + field + + + 12 + + + 1 + 2 + 260 + + + 2 + 3 + 677 + + + 3 + 4 + 468 + + + 4 + 5 + 292 + + + 5 + 6 + 194 + + + 6 + 8 + 208 + + + 8 + 13 + 199 + + + 13 + 65 + 110 + + + + + + + + + methodhosts + 838 + + + method + 699 + + + host + 258 + + + + + method + host + + + 12 + + + 1 + 2 + 625 + + + 2 + 3 + 56 + + + 3 + 16 + 18 + + + + + + + host + method + + + 12 + + + 1 + 2 + 99 + + + 2 + 3 + 56 + + + 3 + 4 + 37 + + + 4 + 5 + 20 + + + 5 + 6 + 15 + + + 6 + 11 + 21 + + + 11 + 53 + 10 + + + + + + + + + defs + 40703 + + + ident + 40703 + + + object + 40490 + + + + + ident + object + + + 12 + + + 1 + 2 + 40703 + + + + + + + object + ident + + + 12 + + + 1 + 2 + 40383 + + + 2 + 15 + 107 + + + + + + + + + uses + 195902 + + + ident + 195902 + + + object + 41616 + + + + + ident + object + + + 12 + + + 1 + 2 + 195902 + + + + + + + object + ident + + + 12 + + + 1 + 2 + 15493 + + + 2 + 3 + 9727 + + + 3 + 4 + 5056 + + + 4 + 5 + 2974 + + + 5 + 7 + 3203 + + + 7 + 14 + 3336 + + + 14 + 6833 + 1827 + + + + + + + + + types + 18132 + + + id + 18132 + + + kind + 37 + + + + + id + kind + + + 12 + + + 1 + 2 + 18132 + + + + + + + kind + id + + + 12 + + + 1 + 2 + 25 + + + 10 + 30 + 3 + + + 247 + 431 + 3 + + + 559 + 1904 + 3 + + + 2409 + 8011 + 3 + + + + + + + + + type_of + 397965 + + + expr + 397965 + + + tp + 8687 + + + + + expr + tp + + + 12 + + + 1 + 2 + 397965 + + + + + + + tp + expr + + + 12 + + + 1 + 2 + 2019 + + + 2 + 3 + 967 + + + 3 + 4 + 711 + + + 4 + 5 + 388 + + + 5 + 7 + 780 + + + 7 + 10 + 772 + + + 10 + 15 + 734 + + + 15 + 23 + 700 + + + 23 + 43 + 652 + + + 43 + 143 + 652 + + + 143 + 46949 + 312 + + + + + + + + + typename + 3567 + + + tp + 3567 + + + name + 2983 + + + + + tp + name + + + 12 + + + 1 + 2 + 3567 + + + + + + + name + tp + + + 12 + + + 1 + 2 + 2660 + + + 2 + 4 + 267 + + + 4 + 17 + 56 + + + + + + + + + key_type + 430 + + + map + 430 + + + tp + 149 + + + + + map + tp + + + 12 + + + 1 + 2 + 430 + + + + + + + tp + map + + + 12 + + + 1 + 2 + 106 + + + 2 + 3 + 17 + + + 3 + 6 + 12 + + + 6 + 13 + 12 + + + 20 + 136 + 2 + + + + + + + + + element_type + 1412 + + + container + 1412 + + + tp + 916 + + + + + container + tp + + + 12 + + + 1 + 2 + 1412 + + + + + + + tp + container + + + 12 + + + 1 + 2 + 773 + + + 2 + 3 + 94 + + + 3 + 68 + 49 + + + + + + + + + base_type + 1903 + + + ptr + 1903 + + + tp + 1903 + + + + + ptr + tp + + + 12 + + + 1 + 2 + 1903 + + + + + + + tp + ptr + + + 12 + + + 1 + 2 + 1903 + + + + + + + + + underlying_type + 3567 + + + named + 3567 + + + tp + 2755 + + + + + named + tp + + + 12 + + + 1 + 2 + 3567 + + + + + + + tp + named + + + 12 + + + 1 + 2 + 2582 + + + 2 + 154 + 173 + + + + + + + + + component_types + 36474 + + + parent + 11221 + + + index + 74 + + + name + 5540 + + + tp + 4295 + + + + + parent + index + + + 12 + + + 1 + 2 + 1198 + + + 2 + 3 + 3864 + + + 3 + 4 + 2953 + + + 4 + 5 + 1446 + + + 5 + 6 + 780 + + + 6 + 13 + 860 + + + 13 + 65 + 120 + + + + + + + parent + name + + + 12 + + + 1 + 2 + 8936 + + + 2 + 3 + 733 + + + 3 + 6 + 1008 + + + 6 + 64 + 544 + + + + + + + parent + tp + + + 12 + + + 1 + 2 + 2194 + + + 2 + 3 + 4537 + + + 3 + 4 + 2475 + + + 4 + 5 + 1110 + + + 5 + 12 + 848 + + + 12 + 52 + 57 + + + + + + + index + parent + + + 12 + + + 1 + 2 + 15 + + + 2 + 4 + 6 + + + 4 + 7 + 4 + + + 8 + 13 + 6 + + + 13 + 18 + 6 + + + 18 + 28 + 6 + + + 29 + 49 + 6 + + + 52 + 82 + 6 + + + 89 + 193 + 6 + + + 232 + 824 + 6 + + + 1505 + 6458 + 6 + + + 10274 + 10275 + 1 + + + + + + + index + name + + + 12 + + + 1 + 2 + 22 + + + 2 + 6 + 6 + + + 6 + 9 + 6 + + + 9 + 16 + 4 + + + 16 + 24 + 6 + + + 24 + 37 + 6 + + + 39 + 61 + 6 + + + 69 + 116 + 6 + + + 153 + 379 + 6 + + + 475 + 1260 + 6 + + + + + + + index + tp + + + 12 + + + 1 + 2 + 15 + + + 2 + 4 + 6 + + + 4 + 7 + 6 + + + 7 + 11 + 5 + + + 11 + 14 + 5 + + + 15 + 19 + 6 + + + 20 + 27 + 5 + + + 29 + 44 + 6 + + + 45 + 72 + 6 + + + 86 + 161 + 6 + + + 224 + 1436 + 6 + + + 1878 + 2153 + 2 + + + + + + + name + parent + + + 12 + + + 1 + 2 + 3941 + + + 2 + 3 + 851 + + + 3 + 6 + 484 + + + 6 + 8917 + 264 + + + + + + + name + index + + + 12 + + + 1 + 2 + 4284 + + + 2 + 3 + 737 + + + 3 + 6 + 440 + + + 6 + 28 + 79 + + + + + + + name + tp + + + 12 + + + 1 + 2 + 4599 + + + 2 + 3 + 518 + + + 3 + 21 + 416 + + + 21 + 3014 + 7 + + + + + + + tp + parent + + + 12 + + + 1 + 2 + 2055 + + + 2 + 3 + 812 + + + 3 + 4 + 408 + + + 4 + 6 + 394 + + + 6 + 11 + 342 + + + 11 + 2187 + 284 + + + + + + + tp + index + + + 12 + + + 1 + 2 + 2111 + + + 2 + 3 + 859 + + + 3 + 4 + 580 + + + 4 + 5 + 352 + + + 5 + 10 + 328 + + + 10 + 51 + 65 + + + + + + + tp + name + + + 12 + + + 1 + 2 + 2897 + + + 2 + 3 + 865 + + + 3 + 5 + 343 + + + 5 + 738 + 190 + + + + + + + + + array_length + 293 + + + tp + 293 + + + len + 103 + + + + + tp + len + + + 12 + + + 1 + 2 + 293 + + + + + + + len + tp + + + 12 + + + 1 + 2 + 62 + + + 2 + 3 + 15 + + + 3 + 4 + 7 + + + 4 + 7 + 8 + + + 7 + 15 + 7 + + + 15 + 26 + 4 + + + + + + + + + type_objects + 3567 + + + tp + 3567 + + + object + 3567 + + + + + tp + object + + + 12 + + + 1 + 2 + 3567 + + + + + + + object + tp + + + 12 + + + 1 + 2 + 3567 + + + + + + + + + packages + 346 + + + id + 346 + + + name + 281 + + + path + 346 + + + scope + 346 + + + + + id + name + + + 12 + + + 1 + 2 + 346 + + + + + + + id + path + + + 12 + + + 1 + 2 + 346 + + + + + + + id + scope + + + 12 + + + 1 + 2 + 346 + + + + + + + name + id + + + 12 + + + 1 + 2 + 255 + + + 2 + 3 + 23 + + + 3 + 40 + 3 + + + + + + + name + path + + + 12 + + + 1 + 2 + 255 + + + 2 + 3 + 23 + + + 3 + 40 + 3 + + + + + + + name + scope + + + 12 + + + 1 + 2 + 255 + + + 2 + 3 + 23 + + + 3 + 40 + 3 + + + + + + + path + id + + + 12 + + + 1 + 2 + 346 + + + + + + + path + name + + + 12 + + + 1 + 2 + 346 + + + + + + + path + scope + + + 12 + + + 1 + 2 + 346 + + + + + + + scope + id + + + 12 + + + 1 + 2 + 346 + + + + + + + scope + name + + + 12 + + + 1 + 2 + 346 + + + + + + + scope + path + + + 12 + + + 1 + 2 + 346 + + + + + + + + + modexprs + 9 + + + id + 9 + + + kind + 4 + + + parent + 2 + + + idx + 6 + + + + + id + kind + + + 12 + + + 1 + 2 + 9 + + + + + + + id + parent + + + 12 + + + 1 + 2 + 9 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 9 + + + + + + + kind + id + + + 12 + + + 1 + 2 + 3 + + + 6 + 7 + 1 + + + + + + + kind + parent + + + 12 + + + 1 + 2 + 3 + + + 2 + 3 + 1 + + + + + + + kind + idx + + + 12 + + + 1 + 2 + 3 + + + 5 + 6 + 1 + + + + + + + parent + id + + + 12 + + + 3 + 4 + 1 + + + 6 + 7 + 1 + + + + + + + parent + kind + + + 12 + + + 2 + 3 + 1 + + + 3 + 4 + 1 + + + + + + + parent + idx + + + 12 + + + 3 + 4 + 1 + + + 6 + 7 + 1 + + + + + + + idx + id + + + 12 + + + 1 + 2 + 3 + + + 2 + 3 + 3 + + + + + + + idx + kind + + + 12 + + + 1 + 2 + 4 + + + 2 + 3 + 2 + + + + + + + idx + parent + + + 12 + + + 1 + 2 + 3 + + + 2 + 3 + 3 + + + + + + + + + modtokens + 13 + + + token + 13 + + + parent + 7 + + + idx + 2 + + + + + token + parent + + + 12 + + + 1 + 2 + 13 + + + + + + + token + idx + + + 12 + + + 1 + 2 + 13 + + + + + + + parent + token + + + 12 + + + 1 + 2 + 1 + + + 2 + 3 + 6 + + + + + + + parent + idx + + + 12 + + + 1 + 2 + 1 + + + 2 + 3 + 6 + + + + + + + idx + token + + + 12 + + + 6 + 7 + 1 + + + 7 + 8 + 1 + + + + + + + idx + parent + + + 12 + + + 6 + 7 + 1 + + + 7 + 8 + 1 + + + + + + + + + errors + 0 + + + id + 0 + + + kind + 0 + + + msg + 0 + + + rawpos + 0 + + + file + 0 + + + line + 0 + + + col + 0 + + + package + 0 + + + idx + 0 + + + + + id + kind + + + 12 + + + 1 + 2 + 1 + + + + + + + id + msg + + + 12 + + + 1 + 2 + 1 + + + + + + + id + rawpos + + + 12 + + + 1 + 2 + 1 + + + + + + + id + file + + + 12 + + + 1 + 2 + 1 + + + + + + + id + line + + + 12 + + + 1 + 2 + 1 + + + + + + + id + col + + + 12 + + + 1 + 2 + 1 + + + + + + + id + package + + + 12 + + + 1 + 2 + 1 + + + + + + + id + idx + + + 12 + + + 1 + 2 + 1 + + + + + + + kind + id + + + 12 + + + + + + kind + msg + + + 12 + + + + + + kind + rawpos + + + 12 + + + + + + kind + file + + + 12 + + + + + + kind + line + + + 12 + + + + + + kind + col + + + 12 + + + + + + kind + package + + + 12 + + + + + + kind + idx + + + 12 + + + + + + msg + id + + + 12 + + + + + + msg + kind + + + 12 + + + + + + msg + rawpos + + + 12 + + + + + + msg + file + + + 12 + + + + + + msg + line + + + 12 + + + + + + msg + col + + + 12 + + + + + + msg + package + + + 12 + + + + + + msg + idx + + + 12 + + + + + + rawpos + id + + + 12 + + + + + + rawpos + kind + + + 12 + + + + + + rawpos + msg + + + 12 + + + + + + rawpos + file + + + 12 + + + + + + rawpos + line + + + 12 + + + + + + rawpos + col + + + 12 + + + + + + rawpos + package + + + 12 + + + + + + rawpos + idx + + + 12 + + + + + + file + id + + + 12 + + + + + + file + kind + + + 12 + + + + + + file + msg + + + 12 + + + + + + file + rawpos + + + 12 + + + + + + file + line + + + 12 + + + + + + file + col + + + 12 + + + + + + file + package + + + 12 + + + + + + file + idx + + + 12 + + + + + + line + id + + + 12 + + + + + + line + kind + + + 12 + + + + + + line + msg + + + 12 + + + + + + line + rawpos + + + 12 + + + + + + line + file + + + 12 + + + + + + line + col + + + 12 + + + + + + line + package + + + 12 + + + + + + line + idx + + + 12 + + + + + + col + id + + + 12 + + + + + + col + kind + + + 12 + + + + + + col + msg + + + 12 + + + + + + col + rawpos + + + 12 + + + + + + col + file + + + 12 + + + + + + col + line + + + 12 + + + + + + col + package + + + 12 + + + + + + col + idx + + + 12 + + + + + + package + id + + + 12 + + + + + + package + kind + + + 12 + + + + + + package + msg + + + 12 + + + + + + package + rawpos + + + 12 + + + + + + package + file + + + 12 + + + + + + package + line + + + 12 + + + + + + package + col + + + 12 + + + + + + package + idx + + + 12 + + + + + + idx + id + + + 12 + + + + + + idx + kind + + + 12 + + + + + + idx + msg + + + 12 + + + + + + idx + rawpos + + + 12 + + + + + + idx + file + + + 12 + + + + + + idx + line + + + 12 + + + + + + idx + col + + + 12 + + + + + + idx + package + + + 12 + + + + + + + + has_ellipsis + 268 + + + id + 268 + + + + + + diff --git a/go/ql/lib/go.qll b/go/ql/lib/go.qll new file mode 100644 index 00000000000..7ebaa8a0626 --- /dev/null +++ b/go/ql/lib/go.qll @@ -0,0 +1,64 @@ +/** + * Provides classes for working with Go programs. + */ + +import Customizations +import semmle.go.Architectures +import semmle.go.AST +import semmle.go.Comments +import semmle.go.Concepts +import semmle.go.Decls +import semmle.go.Errors +import semmle.go.Expr +import semmle.go.Files +import semmle.go.GoMod +import semmle.go.HTML +import semmle.go.Locations +import semmle.go.Packages +import semmle.go.Scopes +import semmle.go.Stmt +import semmle.go.StringOps +import semmle.go.Types +import semmle.go.Util +import semmle.go.VariableWithFields +import semmle.go.controlflow.BasicBlocks +import semmle.go.controlflow.ControlFlowGraph +import semmle.go.controlflow.IR +import semmle.go.dataflow.DataFlow +import semmle.go.dataflow.DataFlow2 +import semmle.go.dataflow.GlobalValueNumbering +import semmle.go.dataflow.SSA +import semmle.go.dataflow.TaintTracking +import semmle.go.dataflow.TaintTracking2 +import semmle.go.frameworks.Beego +import semmle.go.frameworks.BeegoOrm +import semmle.go.frameworks.Chi +import semmle.go.frameworks.Couchbase +import semmle.go.frameworks.Echo +import semmle.go.frameworks.ElazarlGoproxy +import semmle.go.frameworks.Email +import semmle.go.frameworks.Encoding +import semmle.go.frameworks.EvanphxJsonPatch +import semmle.go.frameworks.Gin +import semmle.go.frameworks.Glog +import semmle.go.frameworks.GoRestfulHttp +import semmle.go.frameworks.K8sIoApimachineryPkgRuntime +import semmle.go.frameworks.K8sIoApiCoreV1 +import semmle.go.frameworks.K8sIoClientGo +import semmle.go.frameworks.Logrus +import semmle.go.frameworks.Macaron +import semmle.go.frameworks.Mux +import semmle.go.frameworks.NoSQL +import semmle.go.frameworks.Protobuf +import semmle.go.frameworks.Revel +import semmle.go.frameworks.Spew +import semmle.go.frameworks.SQL +import semmle.go.frameworks.Stdlib +import semmle.go.frameworks.SystemCommandExecutors +import semmle.go.frameworks.Testing +import semmle.go.frameworks.WebSocket +import semmle.go.frameworks.XNetHtml +import semmle.go.frameworks.XPath +import semmle.go.frameworks.Yaml +import semmle.go.frameworks.Zap +import semmle.go.security.FlowSources diff --git a/go/ql/lib/ideContextual.qll b/go/ql/lib/ideContextual.qll new file mode 100644 index 00000000000..b729aa81c8f --- /dev/null +++ b/go/ql/lib/ideContextual.qll @@ -0,0 +1,23 @@ +/** + * Provides classes and predicates related to contextual queries + * in the code viewer. + */ + +import go + +/** + * Returns the `File` matching the given source file name as encoded by the VS + * Code extension. + */ +cached +File getFileBySourceArchiveName(string name) { + // The name provided for a file in the source archive by the VS Code extension + // has some differences from the absolute path in the database: + // 1. colons are replaced by underscores + // 2. there's a leading slash, even for Windows paths: "C:/foo/bar" -> + // "/C_/foo/bar" + // 3. double slashes in UNC prefixes are replaced with a single slash + // We can handle 2 and 3 together by unconditionally adding a leading slash + // before replacing double slashes. + name = ("/" + result.getAbsolutePath().replaceAll(":", "_")).replaceAll("//", "/") +} diff --git a/go/ql/lib/localDefinitions.ql b/go/ql/lib/localDefinitions.ql new file mode 100644 index 00000000000..0ef61cbfdd3 --- /dev/null +++ b/go/ql/lib/localDefinitions.ql @@ -0,0 +1,20 @@ +/** + * @name Jump-to-definition links + * @description Generates use-definition pairs that provide the data + * for jump-to-definition in the code viewer. + * @kind definitions + * @id go/ide-jump-to-definition + * @tags ide-contextual-queries/local-definitions + */ + +import go +import ideContextual + +external string selectedSourceFile(); + +from Ident def, Ident use, Entity e +where + use.uses(e) and + def.declares(e) and + use.getFile() = getFileBySourceArchiveName(selectedSourceFile()) +select use, def, "V" diff --git a/go/ql/lib/localReferences.ql b/go/ql/lib/localReferences.ql new file mode 100644 index 00000000000..c0ed61ddfce --- /dev/null +++ b/go/ql/lib/localReferences.ql @@ -0,0 +1,20 @@ +/** + * @name Find-references links + * @description Generates use-definition pairs that provide the data + * for find-references in the code viewer. + * @kind definitions + * @id go/ide-find-references + * @tags ide-contextual-queries/local-references + */ + +import go +import ideContextual + +external string selectedSourceFile(); + +from Ident def, Ident use, Entity e +where + use.uses(e) and + def.declares(e) and + def.getFile() = getFileBySourceArchiveName(selectedSourceFile()) +select use, def, "V" diff --git a/go/ql/lib/printAst.ql b/go/ql/lib/printAst.ql new file mode 100644 index 00000000000..9d6d5c2d7b9 --- /dev/null +++ b/go/ql/lib/printAst.ql @@ -0,0 +1,30 @@ +/** + * @name Print AST + * @description Outputs a representation of a file's Abstract Syntax Tree. This + * query is used by the VS Code extension. + * @id go/print-ast + * @kind graph + * @tags ide-contextual-queries/print-ast + */ + +import go +import semmle.go.PrintAst +import ideContextual + +/** + * The source file to generate an AST from. + */ +external string selectedSourceFile(); + +/** + * Hook to customize the functions printed by this query. + */ +class Cfg extends PrintAstConfiguration { + override predicate shouldPrintFunction(FuncDecl func) { shouldPrintFile(func.getFile()) } + + override predicate shouldPrintFile(File file) { + file = getFileBySourceArchiveName(selectedSourceFile()) + } + + override predicate shouldPrintComments(File file) { none() } +} diff --git a/go/ql/lib/qlpack.lock.yml b/go/ql/lib/qlpack.lock.yml new file mode 100644 index 00000000000..06dd07fc7dc --- /dev/null +++ b/go/ql/lib/qlpack.lock.yml @@ -0,0 +1,4 @@ +--- +dependencies: {} +compiled: false +lockVersion: 1.0.0 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml new file mode 100644 index 00000000000..a4bdaa250f8 --- /dev/null +++ b/go/ql/lib/qlpack.yml @@ -0,0 +1,7 @@ +name: codeql/go-all +version: 0.1.3-dev +groups: go +dbscheme: go.dbscheme +extractor: go +library: true +upgrades: upgrades diff --git a/go/ql/lib/semmle/go/AST.qll b/go/ql/lib/semmle/go/AST.qll new file mode 100644 index 00000000000..a9862ea330f --- /dev/null +++ b/go/ql/lib/semmle/go/AST.qll @@ -0,0 +1,252 @@ +/** + * Provides classes for working with AST nodes. + */ + +import go + +/** + * An AST node. + */ +class AstNode extends @node, Locatable { + /** + * Gets the `i`th child node of this node. + * + * Note that the precise indices of child nodes are considered an implementation detail + * and are subject to change without notice. + */ + AstNode getChild(int i) { + result = this.(ExprParent).getChildExpr(i) or + result = this.(GoModExprParent).getChildGoModExpr(i) or + result = this.(StmtParent).getChildStmt(i) or + result = this.(DeclParent).getDecl(i) or + result = this.(GenDecl).getSpec(i) or + result = this.(FieldParent).getField(i) or + result = this.(File).getCommentGroup(i) or + result = this.(CommentGroup).getComment(i) + } + + /** + * Gets a child node of this node. + */ + AstNode getAChild() { result = getChild(_) } + + /** + * Gets the number of child nodes of this node. + */ + int getNumChild() { result = count(getAChild()) } + + /** + * Gets a child with the given index and of the given kind, if one exists. + * Note that a given parent can have multiple children with the same index but differing kind. + */ + private AstNode getChildOfKind(string kind, int i) { + kind = "expr" and result = this.(ExprParent).getChildExpr(i) + or + kind = "gomodexpr" and result = this.(GoModExprParent).getChildGoModExpr(i) + or + kind = "stmt" and result = this.(StmtParent).getChildStmt(i) + or + kind = "decl" and result = this.(DeclParent).getDecl(i) + or + kind = "spec" and result = this.(GenDecl).getSpec(i) + or + kind = "field" and result = this.(FieldParent).getField(i) + or + kind = "commentgroup" and result = this.(File).getCommentGroup(i) + or + kind = "comment" and result = this.(CommentGroup).getComment(i) + } + + /** + * Get an AstNode child, ordered by child kind and then by index. + */ + AstNode getUniquelyNumberedChild(int index) { + result = + rank[index + 1](AstNode child, string kind, int i | + child = getChildOfKind(kind, i) + | + child order by kind, i + ) + } + + /** Gets the parent node of this AST node, if any. */ + AstNode getParent() { this = result.getAChild() } + + /** Gets the parent node of this AST node, but without crossing function boundaries. */ + private AstNode parentInSameFunction() { + result = getParent() and + not this instanceof FuncDef + } + + /** Gets the innermost function definition to which this AST node belongs, if any. */ + FuncDef getEnclosingFunction() { result = getParent().parentInSameFunction*() } + + /** + * Gets a comma-separated list of the names of the primary CodeQL classes to which this element belongs. + */ + final string getPrimaryQlClasses() { result = concat(getAPrimaryQlClass(), ",") } + + /** + * Gets the name of a primary CodeQL class to which this node belongs. + * + * For most nodes, this is simply the most precise syntactic category to which they belong; + * for example, `AddExpr` is a primary class, but `BinaryExpr` is not. + * + * For identifiers and selector expressions, the class describing what kind of entity they refer + * to (for example `FunctionName` or `TypeName`) is also considered primary. For such nodes, + * this predicate has multiple values. + */ + string getAPrimaryQlClass() { result = "???" } + + override string toString() { result = "AST node" } +} + +/** + * An AST node whose children include expressions. + */ +class ExprParent extends @exprparent, AstNode { + /** + * Gets the `i`th child expression of this node. + * + * Note that the precise indices of child expressions are considered an implementation detail + * and are subject to change without notice. + */ + Expr getChildExpr(int i) { exprs(result, _, this, i) } + + /** + * Gets an expression that is a child node of this node in the AST. + */ + Expr getAChildExpr() { result = getChildExpr(_) } + + /** + * Gets the number of child expressions of this node. + */ + int getNumChildExpr() { result = count(getAChildExpr()) } +} + +/** + * An AST node whose children include go.mod expressions. + */ +class GoModExprParent extends @modexprparent, AstNode { + /** + * Gets the `i`th child expression of this node. + * + * Note that the precise indices of child expressions are considered an implementation detail + * and are subject to change without notice. + */ + GoModExpr getChildGoModExpr(int i) { modexprs(result, _, this, i) } + + /** + * Gets an expression that is a child node of this node in the AST. + */ + GoModExpr getAChildGoModExpr() { result = getChildGoModExpr(_) } + + /** + * Gets the number of child expressions of this node. + */ + int getNumChildGoModExpr() { result = count(getAChildGoModExpr()) } +} + +/** + * An AST node whose children include statements. + */ +class StmtParent extends @stmtparent, AstNode { + /** + * Gets the `i`th child statement of this node. + * + * Note that the precise indices of child statements are considered an implementation detail + * and are subject to change without notice. + */ + Stmt getChildStmt(int i) { stmts(result, _, this, i) } + + /** + * Gets a statement that is a child node of this node in the AST. + */ + Stmt getAChildStmt() { result = getChildStmt(_) } + + /** + * Gets the number of child statements of this node. + */ + int getNumChildStmt() { result = count(getAChildStmt()) } +} + +/** + * An AST node whose children include declarations. + */ +class DeclParent extends @declparent, AstNode { + /** + * Gets the `i`th child declaration of this node. + * + * Note that the precise indices of declarations are considered an implementation detail + * and are subject to change without notice. + */ + Decl getDecl(int i) { decls(result, _, this, i) } + + /** + * Gets a child declaration of this node in the AST. + */ + Decl getADecl() { result = getDecl(_) } + + /** + * Gets the number of child declarations of this node. + */ + int getNumDecl() { result = count(getADecl()) } +} + +/** + * An AST node whose children include fields. + */ +class FieldParent extends @fieldparent, AstNode { + /** + * Gets the `i`th field of this node. + * + * Note that the precise indices of fields are considered an implementation detail + * and are subject to change without notice. + */ + FieldBase getField(int i) { fields(result, this, i) } + + /** + * Gets a child field of this node in the AST. + */ + FieldBase getAField() { result = getField(_) } + + /** + * Gets the number of child fields of this node. + */ + int getNumFields() { result = count(getAField()) } +} + +/** + * An AST node whose children include type parameter declarations. + */ +class TypeParamDeclParent extends @typeparamdeclparent, AstNode { + /** + * Gets the `i`th type parameter declaration of this node. + * + * Note that the precise indices of type parameters are considered an implementation detail + * and are subject to change without notice. + */ + TypeParamDecl getTypeParameterDecl(int i) { typeparamdecls(result, this, i) } + + /** + * Gets a child field of this node in the AST. + */ + TypeParamDecl getATypeParameterDecl() { result = this.getTypeParameterDecl(_) } +} + +/** + * An AST node which may induce a scope. + * + * The following nodes may induce scopes: + * + * - files + * - block statements, `if` statements, `switch` statements, `case` clauses, comm clauses, loops + * - function type expressions + * + * Note that functions themselves do not induce a scope, it is their type declaration that induces + * the scope. + */ +class ScopeNode extends @scopenode, AstNode { + /** Gets the scope induced by this node, if any. */ + LocalScope getScope() { scopenodes(this, result) } +} diff --git a/go/ql/lib/semmle/go/Architectures.qll b/go/ql/lib/semmle/go/Architectures.qll new file mode 100644 index 00000000000..e509de4bc68 --- /dev/null +++ b/go/ql/lib/semmle/go/Architectures.qll @@ -0,0 +1,37 @@ +/** Provides classes for working with architectures. */ + +import go + +/** + * An architecture that is valid in a build constraint. + * + * Information obtained from + * https://github.com/golang/go/blob/e125ccd10ea191101dbc31f0dd39a98f9d3ab929/src/go/types/gccgosizes.go + * where the first field of the struct is 4 for 32-bit architectures + * and 8 for 64-bit architectures. + */ +class Architecture extends string { + int bitSize; + + Architecture() { + this in [ + "386", "amd64p32", "arm", "armbe", "m64k", "mips", "mipsle", "mips64p32", "mips64p32le", + "nios2", "ppc", "riscv", "s390", "sh", "shbe", "sparc" + ] and + bitSize = 32 + or + this in [ + "alpha", "amd64", "arm64", "arm64be", "ia64", "mips64", "mips64le", "ppc64", "ppc64le", + "riscv64", "s390x", "sparc64", "wasm" + ] and + bitSize = 64 + } + + /** + * 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. + */ + int getBitSize() { result = bitSize } +} diff --git a/go/ql/lib/semmle/go/Comments.qll b/go/ql/lib/semmle/go/Comments.qll new file mode 100644 index 00000000000..5026047cc99 --- /dev/null +++ b/go/ql/lib/semmle/go/Comments.qll @@ -0,0 +1,226 @@ +/** + * Provides classes for working with code comments. + */ + +import go + +/** + * A code comment. + * + * Examples: + * + *
    + * // a line comment
    + * /* a block
    + *   comment */
    + * 
    + */ +class Comment extends @comment, AstNode { + /** + * Gets the text of this comment, not including delimiters. + */ + string getText() { comments(this, _, _, _, result) } + + /** + * Gets the comment group to which this comment belongs. + */ + CommentGroup getGroup() { this = result.getAComment() } + + override string toString() { result = "comment" } + + override string getAPrimaryQlClass() { result = "Comment" } +} + +/** + * A comment group, that is, a sequence of comments without any intervening tokens or + * empty lines. + * + * Examples: + * + *
    + * // a line comment
    + * // another line comment
    + *
    + * // a line comment
    + * /* a block
    + *   comment */
    + *
    + * /* a block
    + * comment */
    + * /* another block comment */
    + * 
    + */ +class CommentGroup extends @comment_group, AstNode { + /** + * Gets the file to which this comment group belongs. + */ + override File getParent() { this = result.getACommentGroup() } + + /** Gets the `i`th comment in this group (0-based indexing). */ + Comment getComment(int i) { comments(result, _, this, i, _) } + + /** Gets a comment in this group. */ + Comment getAComment() { result = this.getComment(_) } + + /** Gets the number of comments in this group. */ + int getNumComment() { result = count(this.getAComment()) } + + override string toString() { result = "comment group" } + + override string getAPrimaryQlClass() { result = "CommentGroup" } +} + +/** + * A program element to which a documentation comment group may be attached: + * a file, a field, a specifier, a generic declaration, a function declaration + * or a go.mod expression. + * + * Examples: + * + * ```go + * // function documentation + * func double(x int) int { return 2 * x } + * + * // generic declaration documentation + * const ( + * // specifier documentation + * size int64 = 1024 + * eof = -1 // not specifier documentation + * ) + * ``` + */ +class Documentable extends AstNode, @documentable { + /** Gets the documentation comment group attached to this element, if any. */ + DocComment getDocumentation() { this = result.getDocumentedElement() } +} + +/** + * A comment group that is attached to a program element as documentation. + * + * Examples: + * + * ```go + * // function documentation + * func double(x int) int { return 2 * x } + * + * // generic declaration documentation + * const ( + * // specifier documentation + * size int64 = 1024 + * eof = -1 // not specifier documentation + * ) + * ``` + */ +class DocComment extends CommentGroup { + Documentable node; + + DocComment() { doc_comments(node, this) } + + /** Gets the program element documented by this comment group. */ + Documentable getDocumentedElement() { result = node } + + override string getAPrimaryQlClass() { result = "DocComment" } +} + +/** + * A single-line comment starting with `//`. + * + * Examples: + * + * ```go + * // Single line comment + * ``` + */ +class SlashSlashComment extends @slashslashcomment, Comment { + override string getAPrimaryQlClass() { result = "SlashSlashComment" } +} + +/** + * A block comment starting with `/*` and ending with */. + * + * Examples: + * + *
    + * /* a block
    + *   comment */
    + * 
    + */ +class SlashStarComment extends @slashstarcomment, Comment { + override string getAPrimaryQlClass() { result = "SlashStarComment" } +} + +/** + * A single-line comment starting with `//`. + * + * Examples: + * + * ```go + * // Single line comment + * ``` + */ +class LineComment = SlashSlashComment; + +/** + * A block comment starting with `/*` and ending with */. + * + * Examples: + * + *
    + * /* a block
    + *   comment */
    + * 
    + */ +class BlockComment = SlashStarComment; + +/** Holds if `c` starts at `line`, `col` in `f`, and precedes the package declaration. */ +private predicate isInitialComment(Comment c, File f, int line, int col) { + c.hasLocationInfo(f.getAbsolutePath(), line, col, _, _) and + line < f.getPackageNameExpr().getLocation().getStartLine() +} + +/** Gets the `i`th initial comment in `f` (0-based). */ +private Comment getInitialComment(File f, int i) { + result = + rank[i + 1](Comment c, int line, int col | + isInitialComment(c, f, line, col) + | + c order by line, col + ) +} + +/** + * A build constraint comment of the form `// +build ...` or `//go:build ...`. + * + * Examples: + * + * ```go + * // +build darwin freebsd netbsd openbsd + * // +build !linux + * ``` + */ +class BuildConstraintComment extends LineComment { + BuildConstraintComment() { + // a line comment preceding the package declaration, itself only preceded by + // line comments + exists(File f, int i | + // correctness of the placement of the build constraint is not checked here; + // this is more lax than the actual rules for build constraints + this = getInitialComment(f, i) and + not getInitialComment(f, [0 .. i - 1]) instanceof BlockComment + ) and + ( + // comment text starts with `+build` or `go:build` + this.getText().regexpMatch("\\s*\\+build.*") + or + this.getText().regexpMatch("\\s*go:build.*") + ) + } + + override string getAPrimaryQlClass() { result = "BuildConstraintComment" } + + /** Gets the body of this build constraint. */ + string getConstraintBody() { result = this.getText().splitAt("build ", 1) } + + /** Gets a disjunct of this build constraint. */ + string getADisjunct() { result = this.getConstraintBody().splitAt(" ") } +} diff --git a/go/ql/lib/semmle/go/Concepts.qll b/go/ql/lib/semmle/go/Concepts.qll new file mode 100644 index 00000000000..f3920c2ec5c --- /dev/null +++ b/go/ql/lib/semmle/go/Concepts.qll @@ -0,0 +1,475 @@ +/** + * Provides abstract classes representing generic concepts such as file system + * access or system command execution, for which individual framework libraries + * provide concrete subclasses. + */ + +import go +import semmle.go.dataflow.FunctionInputsAndOutputs +import semmle.go.concepts.HTTP +import semmle.go.concepts.GeneratedFile + +/** + * A data-flow node that executes an operating system command, + * for instance by spawning a new process. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `SystemCommandExecution::Range` instead. + */ +class SystemCommandExecution extends DataFlow::Node { + SystemCommandExecution::Range self; + + SystemCommandExecution() { this = self } + + /** Gets the argument that specifies the command to be executed. */ + DataFlow::Node getCommandName() { result = self.getCommandName() } + + /** Holds if this node is sanitized whenever it follows `--` in an argument list. */ + predicate doubleDashIsSanitizing() { self.doubleDashIsSanitizing() } +} + +/** Provides a class for modeling new system-command execution APIs. */ +module SystemCommandExecution { + /** + * A data-flow node that executes an operating system command, + * for instance by spawning a new process. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `SystemCommandExecution` instead. + */ + abstract class Range extends DataFlow::Node { + /** Gets the argument that specifies the command to be executed. */ + abstract DataFlow::Node getCommandName(); + + /** Holds if this node is sanitized whenever it follows `--` in an argument list. */ + predicate doubleDashIsSanitizing() { none() } + } +} + +/** + * An instantiation of a template; that is, a call which fills out a template with data. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `TemplateInstantiation::Range` instead. + */ +class TemplateInstantiation extends DataFlow::Node { + TemplateInstantiation::Range self; + + TemplateInstantiation() { this = self } + + /** + * Gets the argument to this template instantiation that is the template being + * instantiated. + */ + DataFlow::Node getTemplateArgument() { result = self.getTemplateArgument() } + + /** + * Gets an argument to this template instantiation that is data being inserted + * into the template. + */ + DataFlow::Node getADataArgument() { result = self.getADataArgument() } +} + +/** Provides a class for modeling new template-instantiation APIs. */ +module TemplateInstantiation { + /** + * An instantiation of a template; that is, a call which fills out a template with data. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `TemplateInstantiation` instead. + */ + abstract class Range extends DataFlow::Node { + /** + * Gets the argument to this template instantiation that is the template being + * instantiated. + */ + abstract DataFlow::Node getTemplateArgument(); + + /** + * Gets an argument to this template instantiation that is data being inserted + * into the template. + */ + abstract DataFlow::Node getADataArgument(); + } +} + +/** + * A data-flow node that performs a file system access, including reading and writing data, + * creating and deleting files and folders, checking and updating permissions, and so on. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `FileSystemAccess::Range` instead. + */ +class FileSystemAccess extends DataFlow::Node { + FileSystemAccess::Range self; + + FileSystemAccess() { this = self } + + /** Gets an argument to this file system access that is interpreted as a path. */ + DataFlow::Node getAPathArgument() { result = self.getAPathArgument() } +} + +/** Provides a class for modeling new file-system access APIs. */ +module FileSystemAccess { + /** + * A data-flow node that performs a file system access, including reading and writing data, + * creating and deleting files and folders, checking and updating permissions, and so on. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `FileSystemAccess` instead. + */ + abstract class Range extends DataFlow::Node { + /** Gets an argument to this file system access that is interpreted as a path. */ + abstract DataFlow::Node getAPathArgument(); + } +} + +/** A function that escapes meta-characters to prevent injection attacks. */ +class EscapeFunction extends Function { + EscapeFunction::Range self; + + EscapeFunction() { this = self } + + /** + * The context that this function escapes for. + * + * Currently, this can be "js", "html", or "url". + */ + string kind() { result = self.kind() } +} + +/** Provides a class for modeling new escape-function APIs. */ +module EscapeFunction { + /** + * A function that escapes meta-characters to prevent injection attacks. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `EscapeFunction' instead. + */ + abstract class Range extends Function { + /** + * The context that this function escapes for. + * + * Currently, this can be `js', `html', or `url'. + */ + abstract string kind(); + } +} + +/** + * A function that escapes a string so it can be safely included in a + * JavaScript string literal. + */ +class JsEscapeFunction extends EscapeFunction { + JsEscapeFunction() { self.kind() = "js" } +} + +/** + * A function that escapes a string so it can be safely included in an + * the body of an HTML element, for example, replacing `{}` in + * `

    {}

    `. + */ +class HtmlEscapeFunction extends EscapeFunction { + HtmlEscapeFunction() { self.kind() = "html" } +} + +/** + * A function that escapes a string so it can be safely included as part + * of a URL. + */ +class UrlEscapeFunction extends EscapeFunction { + UrlEscapeFunction() { self.kind() = "url" } +} + +/** + * A node whose value is interpreted as a part of a regular expression. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `RegexpPattern::Range` instead. + */ +class RegexpPattern extends DataFlow::Node { + RegexpPattern::Range self; + + RegexpPattern() { this = self } + + /** + * Gets the node where this pattern is parsed as a part of a regular + * expression. + */ + DataFlow::Node getAParse() { result = self.getAParse() } + + /** + * Gets this regexp pattern as a string. + */ + string getPattern() { result = self.getPattern() } + + /** + * Gets a use of this pattern, either as itself in an argument to a function or as a compiled + * regexp object. + */ + DataFlow::Node getAUse() { result = self.getAUse() } +} + +/** Provides a class for modeling new regular-expression APIs. */ +module RegexpPattern { + /** + * A node whose value is interpreted as a part of a regular expression. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `RegexpPattern' instead. + */ + abstract class Range extends DataFlow::Node { + /** + * Gets a node where the pattern of this node is parsed as a part of + * a regular expression. + */ + abstract DataFlow::Node getAParse(); + + /** + * Gets this regexp pattern as a string. + */ + abstract string getPattern(); + + /** + * Gets a use of this pattern, either as itself in an argument to a function or as a compiled + * regexp object. + */ + abstract DataFlow::Node getAUse(); + } +} + +/** + * A function that matches a regexp with a string or byte slice. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `RegexpMatchFunction::Range` instead. + */ +class RegexpMatchFunction extends Function { + RegexpMatchFunction::Range self; + + RegexpMatchFunction() { this = self } + + /** + * Gets the function input that is the regexp being matched. + */ + FunctionInput getRegexpArg() { result = self.getRegexpArg() } + + /** + * Gets the regexp pattern that is used in the call to this function `call`. + */ + RegexpPattern getRegexp(DataFlow::CallNode call) { + result.getAUse() = this.getRegexpArg().getNode(call) + } + + /** + * Gets the function input that is the string being matched against. + */ + FunctionInput getValue() { result = self.getValue() } + + /** + * Gets the function output that is the Boolean result of the match function. + */ + FunctionOutput getResult() { result = self.getResult() } +} + +/** Provides a class for modeling new regular-expression matcher APIs. */ +module RegexpMatchFunction { + /** + * A function that matches a regexp with a string or byte slice. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `RegexpPattern' instead. + */ + abstract class Range extends Function { + /** + * Gets the function input that is the regexp being matched. + */ + abstract FunctionInput getRegexpArg(); + + /** + * Gets the function input that is the string being matched against. + */ + abstract FunctionInput getValue(); + + /** + * Gets the Boolean result of the match function. + */ + abstract FunctionOutput getResult(); + } +} + +/** + * A function that uses a regexp to replace parts of a string or byte slice. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `RegexpReplaceFunction::Range` instead. + */ +class RegexpReplaceFunction extends Function { + RegexpReplaceFunction::Range self; + + RegexpReplaceFunction() { this = self } + + /** + * Gets the function input that is the regexp that matches text to replace. + */ + FunctionInput getRegexpArg() { result = self.getRegexpArg() } + + /** + * Gets the regexp pattern that is used to match patterns to replace in the call to this function + * `call`. + */ + RegexpPattern getRegexp(DataFlow::CallNode call) { + result.getAUse() = call.(DataFlow::MethodCallNode).getReceiver() + } + + /** + * Gets the function input corresponding to the source value, that is, the value that is having + * its contents replaced. + */ + FunctionInput getSource() { result = self.getSource() } + + /** + * Gets the function output corresponding to the result, that is, the value after replacement has + * occurred. + */ + FunctionOutput getResult() { result = self.getResult() } +} + +/** Provides a class for modeling new regular-expression replacer APIs. */ +module RegexpReplaceFunction { + /** + * A function that uses a regexp to replace parts of a string or byte slice. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `RegexpReplaceFunction' instead. + */ + abstract class Range extends Function { + /** + * Gets the function input that is the regexp that matches text to replace. + */ + abstract FunctionInput getRegexpArg(); + + /** + * Gets the function input corresponding to the source value, that is, the value that is having + * its contents replaced. + */ + abstract FunctionInput getSource(); + + /** + * Gets the function output corresponding to the result, that is, the value after replacement + * has occurred. + */ + abstract FunctionOutput getResult(); + } +} + +/** + * A call to a logging mechanism. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `LoggerCall::Range` instead. + */ +class LoggerCall extends DataFlow::Node { + LoggerCall::Range self; + + LoggerCall() { this = self } + + /** Gets a node that is a part of the logged message. */ + DataFlow::Node getAMessageComponent() { result = self.getAMessageComponent() } +} + +/** Provides a class for modeling new logging APIs. */ +module LoggerCall { + /** + * A call to a logging mechanism. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `LoggerCall` instead. + */ + abstract class Range extends DataFlow::Node { + /** Gets a node that is a part of the logged message. */ + abstract DataFlow::Node getAMessageComponent(); + } +} + +/** + * A function that encodes data into a binary or textual format. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `MarshalingFunction::Range` instead. + */ +class MarshalingFunction extends Function { + MarshalingFunction::Range self; + + MarshalingFunction() { this = self } + + /** Gets an input that is encoded by this function. */ + FunctionInput getAnInput() { result = self.getAnInput() } + + /** Gets the output that contains the encoded data produced by this function. */ + FunctionOutput getOutput() { result = self.getOutput() } + + /** Gets an identifier for the format this function encodes into, such as "JSON". */ + string getFormat() { result = self.getFormat() } +} + +/** Provides a class for modeling new marshaling APIs. */ +module MarshalingFunction { + /** + * A function that encodes data into a binary or textual format. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `MarshalingFunction` instead. + */ + abstract class Range extends Function { + /** Gets an input that is encoded by this function. */ + abstract FunctionInput getAnInput(); + + /** Gets the output that contains the encoded data produced by this function. */ + abstract FunctionOutput getOutput(); + + /** Gets an identifier for the format this function encodes into, such as "JSON". */ + abstract string getFormat(); + } +} + +/** + * A function that decodes data from a binary or textual format. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `UnmarshalingFunction::Range` instead. + */ +class UnmarshalingFunction extends Function { + UnmarshalingFunction::Range self; + + UnmarshalingFunction() { this = self } + + /** Gets an input that is decoded by this function. */ + FunctionInput getAnInput() { result = self.getAnInput() } + + /** Gets the output that contains the decoded data produced by this function. */ + FunctionOutput getOutput() { result = self.getOutput() } + + /** Gets an identifier for the format this function decodes from, such as "JSON". */ + string getFormat() { result = self.getFormat() } +} + +/** Provides a class for modeling new unmarshaling APIs. */ +module UnmarshalingFunction { + /** + * A function that decodes data from a binary or textual format. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `UnmarshalingFunction` instead. + */ + abstract class Range extends Function { + /** Gets an input that is decoded by this function. */ + abstract FunctionInput getAnInput(); + + /** Gets the output that contains the decoded data produced by this function. */ + abstract FunctionOutput getOutput(); + + /** Gets an identifier for the format this function decodes from, such as "JSON". */ + abstract string getFormat(); + } +} diff --git a/go/ql/lib/semmle/go/Decls.qll b/go/ql/lib/semmle/go/Decls.qll new file mode 100644 index 00000000000..0623aa1cc45 --- /dev/null +++ b/go/ql/lib/semmle/go/Decls.qll @@ -0,0 +1,664 @@ +/** + * Provides classes for working with declarations. + */ + +import go + +/** + * A declaration. + */ +class Decl extends @decl, ExprParent, StmtParent, FieldParent { + /** + * Gets the kind of this declaration, which is an integer value representing the declaration's + * node type. + * + * Note that the mapping from node types to integer kinds is considered an implementation detail + * and subject to change without notice. + */ + int getKind() { decls(this, result, _, _) } + + /** + * Holds if the execution of this statement may produce observable side effects. + * + * Memory allocation is not considered an observable side effect. + */ + predicate mayHaveSideEffects() { none() } +} + +/** + * A bad declaration, that is, a declaration that cannot be parsed. + */ +class BadDecl extends @baddecl, Decl { + override string toString() { result = "bad declaration" } + + override string getAPrimaryQlClass() { result = "BadDecl" } +} + +/** + * A generic declaration. + */ +class GenDecl extends @gendecl, Decl, Documentable { + /** Gets the `i`th declaration specifier in this declaration (0-based). */ + Spec getSpec(int i) { specs(result, _, this, i) } + + /** Gets a declaration specifier in this declaration. */ + Spec getASpec() { result = this.getSpec(_) } + + /** Gets the number of declaration specifiers in this declaration. */ + int getNumSpec() { result = count(this.getASpec()) } + + override predicate mayHaveSideEffects() { this.getASpec().mayHaveSideEffects() } + + override string getAPrimaryQlClass() { result = "GenDecl" } +} + +/** + * An import declaration. + */ +class ImportDecl extends @importdecl, GenDecl { + override string toString() { result = "import declaration" } + + override string getAPrimaryQlClass() { result = "ImportDecl" } +} + +/** + * A constant declaration. + */ +class ConstDecl extends @constdecl, GenDecl { + override string toString() { result = "constant declaration" } + + override string getAPrimaryQlClass() { result = "ConstDecl" } +} + +/** + * A type declaration. + */ +class TypeDecl extends @typedecl, GenDecl { + override string toString() { result = "type declaration" } + + override string getAPrimaryQlClass() { result = "TypeDecl" } +} + +/** + * A variable declaration. + */ +class VarDecl extends @vardecl, GenDecl { + override string toString() { result = "variable declaration" } + + override string getAPrimaryQlClass() { result = "VarDecl" } +} + +/** + * A function definition, that is, either a function declaration or + * a function literal. + */ +class FuncDef extends @funcdef, StmtParent, ExprParent { + /** Gets the body of the defined function, if any. */ + BlockStmt getBody() { none() } + + /** Gets the name of the defined function, if any. */ + string getName() { none() } + + /** Gets the expression denoting the type of this function. */ + FuncTypeExpr getTypeExpr() { none() } + + /** Gets the type of this function. */ + SignatureType getType() { none() } + + /** Gets the scope induced by this function. */ + FunctionScope getScope() { result.getFunction() = this } + + /** Gets a `defer` statement in this function. */ + DeferStmt getADeferStmt() { result.getEnclosingFunction() = this } + + /** Gets the `i`th result variable of this function. */ + ResultVariable getResultVar(int i) { result.isResultOf(this, i) } + + /** Gets a result variable of this function. */ + ResultVariable getAResultVar() { result.getFunction() = this } + + /** + * Gets the `i`th parameter of this function. + * + * The receiver variable, if any, is considered to be the -1st parameter. + */ + Parameter getParameter(int i) { result.isParameterOf(this, i) } + + /** Gets a parameter of this function. */ + Parameter getAParameter() { result.getFunction() = this } + + /** + * Gets the number of parameters of this function. + */ + int getNumParameter() { result = count(this.getAParameter()) } + + /** + * Gets a call to this function. + */ + DataFlow::CallNode getACall() { result.getACallee() = this } + + /** Holds if this function is variadic. */ + predicate isVariadic() { this.getType().isVariadic() } + + override string getAPrimaryQlClass() { result = "FuncDef" } +} + +/** + * A function declaration. + */ +class FuncDecl extends @funcdecl, Decl, Documentable, FuncDef, TypeParamDeclParent { + /** Gets the identifier denoting the name of this function. */ + Ident getNameExpr() { result = this.getChildExpr(0) } + + override string getName() { result = this.getNameExpr().getName() } + + override FuncTypeExpr getTypeExpr() { result = this.getChildExpr(1) } + + override SignatureType getType() { result = this.getNameExpr().getType() } + + /** Gets the body of this function, if any. */ + override BlockStmt getBody() { result = this.getChildStmt(2) } + + /** Gets the function declared by this function declaration. */ + DeclaredFunction getFunction() { this = result.getFuncDecl() } + + override string toString() { result = "function declaration" } + + override string getAPrimaryQlClass() { result = "FuncDecl" } +} + +/** + * A method declaration. + */ +class MethodDecl extends FuncDecl { + ReceiverDecl recv; + + MethodDecl() { recv.getFunction() = this } + + /** + * Gets the receiver declaration of this method. + * + * For example, the receiver declaration of + * + * ``` + * func (p *Rectangle) Area() float64 { ... } + * ``` + * + * is `p *Rectangle`. + */ + ReceiverDecl getReceiverDecl() { result = recv } + + /** + * Gets the receiver type of this method. + * + * For example, the receiver type of + * + * ``` + * func (p *Rectangle) Area() float64 { ... } + * ``` + * + * is `*Rectangle`. + */ + Type getReceiverType() { result = this.getReceiverDecl().getType() } + + /** + * Gets the receiver base type of this method. + * + * For example, the receiver base type of + * + * ``` + * func (p *Rectangle) Area() float64 { ... } + * ``` + * + * is `Rectangle`. + */ + NamedType getReceiverBaseType() { + result = this.getReceiverType() or + result = this.getReceiverType().(PointerType).getBaseType() + } + + /** + * Gets the receiver variable of this method. + * + * For example, the receiver variable of + * + * ``` + * func (p *Rectangle) Area() float64 { ... } + * ``` + * + * is the variable `p`. + */ + ReceiverVariable getReceiver() { result.getFunction() = this } + + override string getAPrimaryQlClass() { result = "MethodDecl" } +} + +/** + * A declaration specifier. + */ +class Spec extends @spec, ExprParent, Documentable { + /** Gets the declaration to which this specifier belongs */ + Decl getParentDecl() { specs(this, _, result, _) } + + /** + * Gets the kind of this specifier, which is an integer value representing the specifier's + * node type. + * + * Note that the mapping from node types to integer kinds is considered an implementation detail + * and subject to change without notice. + */ + int getKind() { specs(this, result, _, _) } + + /** + * Holds if the execution of this specifier may produce observable side effects. + * + * Memory allocation is not considered an observable side effect. + */ + predicate mayHaveSideEffects() { none() } + + override string getAPrimaryQlClass() { result = "Spec" } +} + +/** + * An import specifier. + */ +class ImportSpec extends @importspec, Spec { + /** Gets the identifier denoting the imported name. */ + Ident getNameExpr() { result = this.getChildExpr(0) } + + /** Gets the imported name. */ + string getName() { result = this.getNameExpr().getName() } + + /** Gets the string literal denoting the imported path. */ + StringLit getPathExpr() { result = this.getChildExpr(1) } + + /** Gets the imported path. */ + string getPath() { result = this.getPathExpr().getValue() } + + override string toString() { result = "import specifier" } + + override string getAPrimaryQlClass() { result = "ImportSpec" } +} + +/** + * A constant or variable declaration specifier. + */ +class ValueSpec extends @valuespec, Spec { + /** Gets the identifier denoting the `i`th name declared by this specifier (0-based). */ + Ident getNameExpr(int i) { + i >= 0 and + result = this.getChildExpr(-(i + 1)) + } + + /** Holds if this specifier is a part of a constant declaration. */ + predicate isConstSpec() { this.getParentDecl() instanceof ConstDecl } + + /** Gets an identifier denoting a name declared by this specifier. */ + Ident getANameExpr() { result = this.getNameExpr(_) } + + /** Gets the `i`th name declared by this specifier (0-based). */ + string getName(int i) { result = this.getNameExpr(i).getName() } + + /** Gets a name declared by this specifier. */ + string getAName() { result = this.getName(_) } + + /** Gets the number of names declared by this specifier. */ + int getNumName() { result = count(this.getANameExpr()) } + + /** Gets the expression denoting the type of the symbols declared by this specifier. */ + Expr getTypeExpr() { result = this.getChildExpr(0) } + + /** Gets the `i`th initializer of this specifier (0-based). */ + Expr getInit(int i) { + i >= 0 and + result = this.getChildExpr(i + 1) + } + + /** Gets an initializer of this specifier. */ + Expr getAnInit() { result = this.getInit(_) } + + /** Gets the number of initializers of this specifier. */ + int getNumInit() { result = count(this.getAnInit()) } + + /** Gets the unique initializer of this specifier, if there is only one. */ + Expr getInit() { this.getNumInit() = 1 and result = this.getInit(0) } + + /** + * Gets the specifier that contains the initializers for this specifier. + * If this valuespec has initializers, the result is itself. Otherwise, it is the + * last specifier declared before this one that has initializers. + */ + private ValueSpec getEffectiveSpec() { + (exists(this.getAnInit()) or not this.isConstSpec()) and + result = this + or + not exists(this.getAnInit()) and + exists(ConstDecl decl, int idx | + decl = this.getParentDecl() and + decl.getSpec(idx) = this + | + result = decl.getSpec(idx - 1).(ValueSpec).getEffectiveSpec() + ) + } + + /** + * Gets the `i`th effective initializer of this specifier, that is, the expression + * that the `i`th name will get initialized to. This is the same as `getInit` + * if it exists, or `getInit` on the last specifier in the declaration that this + * is a child of. + */ + private Expr getEffectiveInit(int i) { result = this.getEffectiveSpec().getInit(i) } + + /** Holds if this specifier initializes `name` to the value of `init`. */ + predicate initializes(string name, Expr init) { + exists(int i | + name = this.getName(i) and + init = this.getEffectiveInit(i) + ) + } + + override predicate mayHaveSideEffects() { this.getAnInit().mayHaveSideEffects() } + + override string toString() { result = "value declaration specifier" } + + override string getAPrimaryQlClass() { result = "ValueSpec" } +} + +/** + * A type declaration specifier, which is either a type definition or an alias declaration. + * + * Examples: + * + * ``` + * type ( + * status int + * intlist = []int + * ) + * ``` + */ +class TypeSpec extends @typespec, Spec, TypeParamDeclParent { + /** Gets the identifier denoting the name of the declared type. */ + Ident getNameExpr() { result = this.getChildExpr(0) } + + /** Gets the name of the declared type. */ + string getName() { result = this.getNameExpr().getName() } + + /** + * Gets the expression denoting the underlying type to which the newly declared type is bound. + */ + Expr getTypeExpr() { result = this.getChildExpr(1) } + + override string toString() { result = "type declaration specifier" } + + override string getAPrimaryQlClass() { result = "TypeSpec" } +} + +/** + * An alias declaration specifier. + * + * Examples: + * + * ``` + * type intlist = []int + * ``` + */ +class AliasSpec extends @aliasspec, TypeSpec { } + +/** + * A type definition specifier. + * + * Examples: + * + * ``` + * type status int + * ``` + */ +class TypeDefSpec extends @typedefspec, TypeSpec { } + +/** + * A field declaration, of a struct, a function (in which case this is a parameter or result variable), + * or an interface (in which case this is a method or embedding spec). + */ +class FieldBase extends @field, ExprParent { + /** + * Gets the expression representing the type of the fields declared in this declaration. + */ + Expr getTypeExpr() { result = this.getChildExpr(0) } + + /** + * Gets the type of the fields declared in this declaration. + */ + Type getType() { result = this.getTypeExpr().getType() } +} + +/** + * A field declaration in a struct type. + */ +class FieldDecl extends FieldBase, Documentable, ExprParent { + StructTypeExpr st; + + FieldDecl() { this = st.getField(_) } + + /** + * Gets the expression representing the name of the `i`th field declared in this declaration + * (0-based). + */ + Expr getNameExpr(int i) { + i >= 0 and + result = this.getChildExpr(i + 1) + } + + /** Gets the tag expression of this field declaration, if any. */ + Expr getTag() { result = this.getChildExpr(-1) } + + /** Gets the struct type expression to which this field declaration belongs. */ + StructTypeExpr getDeclaringStructTypeExpr() { result = st } + + /** Gets the struct type to which this field declaration belongs. */ + StructType getDeclaringType() { result = this.getDeclaringStructTypeExpr().getType() } + + override string toString() { result = "field declaration" } + + override string getAPrimaryQlClass() { result = "FieldDecl" } +} + +/** + * An embedded field declaration in a struct. + */ +class EmbeddedFieldDecl extends FieldDecl { + EmbeddedFieldDecl() { not exists(this.getNameExpr(_)) } + + override string getAPrimaryQlClass() { result = "EmbeddedFieldDecl" } +} + +/** + * A function parameter or result variable declaration. + */ +class ParameterOrResultDecl extends FieldBase, Documentable, ExprParent { + int rawIndex; + FuncTypeExpr ft; + + ParameterOrResultDecl() { this = ft.getField(rawIndex) } + + /** + * Gets the function type expression to which this declaration belongs. + */ + FuncTypeExpr getFunctionTypeExpr() { result = ft } + + /** + * Gets the function to which this declaration belongs. + */ + FuncDef getFunction() { result.getTypeExpr() = this.getFunctionTypeExpr() } + + /** + * Gets the expression representing the name of the `i`th variable declared in this declaration + * (0-based). + */ + Expr getNameExpr(int i) { + i >= 0 and + result = this.getChildExpr(i + 1) + } + + /** + * Gets an expression representing the name of a variable declared in this declaration. + */ + Expr getANameExpr() { result = this.getNameExpr(_) } +} + +/** + * A parameter declaration. + */ +class ParameterDecl extends ParameterOrResultDecl { + ParameterDecl() { rawIndex >= 0 } + + /** + * Gets the index of this parameter declarations among all parameter declarations of + * its associated function type. + */ + int getIndex() { result = rawIndex } + + override string toString() { result = "parameter declaration" } + + override string getAPrimaryQlClass() { result = "ParameterDecl" } +} + +/** + * A receiver declaration in a function declaration. + */ +class ReceiverDecl extends FieldBase, Documentable, ExprParent { + FuncDecl fd; + + ReceiverDecl() { fd.getField(-1) = this } + + /** + * Gets the function declaration to which this receiver belongs. + */ + FuncDecl getFunction() { result = fd } + + /** + * Gets the expression representing the name of the receiver declared in this declaration. + */ + Expr getNameExpr() { result = this.getChildExpr(1) } + + override string toString() { result = "receiver declaration" } + + override string getAPrimaryQlClass() { result = "ReceiverDecl" } +} + +/** + * A result variable declaration. + */ +class ResultVariableDecl extends ParameterOrResultDecl { + ResultVariableDecl() { rawIndex < 0 } + + /** + * Gets the index of this result variable declaration among all result variable declarations of + * its associated function type. + */ + int getIndex() { result = -(rawIndex + 1) } + + override string toString() { result = "result variable declaration" } + + override string getAPrimaryQlClass() { result = "ResultVariableDecl" } +} + +/** + * A type parameter declaration in a type specification. + */ +class TypeParamDecl extends @typeparamdecl, Documentable, ExprParent { + TypeParamDecl() { typeparamdecls(this, _, _) } + + /** + * Gets the expression representing the type constraint of the type + * parameters in this declaration. + * + * If you want the type constraint type itself then use `getTypeConstraint`, + * as that wraps type set literals with implicit interface types. + */ + Expr getTypeConstraintExpr() { result = this.getChildExpr(0) } + + /** + * Gets the type constraint of the type parameters in this declaration. + * + * If the type constraint is a type set literal then it will be wrapped + * with an implicit interface type. + */ + Type getTypeConstraint() { + exists(Type t | t = this.getTypeConstraintExpr().getType() | + if t instanceof TypeSetLiteralType + then result = t.(TypeSetLiteralType).getInterfaceType() + else result = t + ) + } + + /** + * Gets the expression representing the name of the `i`th type parameter + * in this declaration (0-based). + */ + Expr getNameExpr(int i) { + i >= 0 and + result = this.getChildExpr(i + 1) + } + + /** + * Gets the `i`th type parameter type in this declaration (0-based). + */ + TypeParamType getTypeParamType(int i) { + i >= 0 and + result = this.getNameExpr(i).getType() + } + + override string toString() { result = "type parameter declaration" } + + override string getAPrimaryQlClass() { result = "TypeParamDecl" } +} + +/** + * A method or embedding specification in an interface type expression. + */ +class InterfaceMemberSpec extends FieldBase, Documentable, ExprParent { + InterfaceTypeExpr ite; + int idx; + + InterfaceMemberSpec() { this = ite.getField(idx) } + + /** + * Gets the interface type expression to which this member specification belongs. + */ + InterfaceTypeExpr getInterfaceTypeExpr() { result = ite } + + /** + * Gets the index of this member specification among all member specifications of + * its associated interface type expression. + */ + int getIndex() { result = idx } +} + +/** + * A method specification in an interface. + */ +class MethodSpec extends InterfaceMemberSpec { + Expr name; + + MethodSpec() { name = this.getChildExpr(1) } + + /** + * Gets the expression representing the name of the method declared in this specification. + */ + Expr getNameExpr() { result = name } + + override string toString() { result = "method declaration" } + + override string getAPrimaryQlClass() { result = "MethodSpec" } +} + +/** + * An embedding specification in an interface. + */ +class EmbeddingSpec extends InterfaceMemberSpec { + EmbeddingSpec() { not exists(this.getChildExpr(1)) } + + override string toString() { result = "interface embedding" } + + override string getAPrimaryQlClass() { result = "EmbeddingSpec" } +} diff --git a/go/ql/lib/semmle/go/Errors.qll b/go/ql/lib/semmle/go/Errors.qll new file mode 100644 index 00000000000..cf83a87ff15 --- /dev/null +++ b/go/ql/lib/semmle/go/Errors.qll @@ -0,0 +1,53 @@ +/** Provides classes for working with Go frontend errors recorded during extraction. */ + +import go + +/** + * An error reported by the Go frontend during extraction. + */ +class Error extends @error { + /** Gets the message associated with this error. */ + string getMessage() { errors(this, _, result, _, _, _, _, _, _) } + + /** Gets the raw position reported by the frontend for this error. */ + string getRawPosition() { errors(this, _, _, result, _, _, _, _, _) } + + /** Gets the package in which this error was reported. */ + Package getPackage() { errors(this, _, _, _, _, _, _, result, _) } + + /** Gets the index of this error among all errors reported for the same package. */ + int getIndex() { errors(this, _, _, _, _, _, _, _, result) } + + /** Gets the file in which this error was reported, if it can be determined. */ + ExtractedOrExternalFile getFile() { hasLocationInfo(result.getAbsolutePath(), _, _, _, _) } + + /** + * 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 + * [LGTM locations](https://lgtm.com/help/ql/locations). + */ + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + errors(this, _, _, _, filepath, startline, startcolumn, _, _) and + endline = startline and + endcolumn = startcolumn + } + + /** Gets a textual representation of this error. */ + string toString() { result = getMessage() } +} + +/** An error reported by an unknown part of the Go frontend. */ +class UnknownError extends Error, @unknownerror { } + +/** An error reported by the Go frontend driver. */ +class ListError extends Error, @listerror { } + +/** An error reported by the Go parser. */ +class ParseError extends Error, @parseerror { } + +/** An error reported by the Go type checker. */ +class TypeError extends Error, @typeerror { } diff --git a/go/ql/lib/semmle/go/Expr.qll b/go/ql/lib/semmle/go/Expr.qll new file mode 100644 index 00000000000..d32d87287fe --- /dev/null +++ b/go/ql/lib/semmle/go/Expr.qll @@ -0,0 +1,2234 @@ +/** + * Provides classes for working with expressions. + */ + +import go + +/** + * An expression. + * + * Examples: + * + * ```go + * x + 1 + * y < 0 + * ``` + */ +class Expr extends @expr, ExprParent { + /** + * Gets the kind of this expression, which is an integer value representing the expression's + * node type. + * + * Note that the mapping from node types to integer kinds is considered an implementation detail + * and subject to change without notice. + */ + int getKind() { exprs(this, result, _, _) } + + /** Gets this expression, with any surrounding parentheses removed. */ + Expr stripParens() { result = this } + + /** + * Holds if this expression is constant, that is, if its value is determined at + * compile-time. + */ + predicate isConst() { constvalues(this, _, _) } + + /** + * Gets the boolean value this expression evalutes to, if any. + */ + boolean getBoolValue() { + this.getType().getUnderlyingType() instanceof BoolType and + exists(string val | constvalues(this, val, _) | + val = "true" and result = true + or + val = "false" and result = false + ) + } + + /** Gets the floating-point value this expression evaluates to, if any. */ + float getFloatValue() { + this.getType().getUnderlyingType() instanceof FloatType and + exists(string val | constvalues(this, val, _) | result = val.toFloat()) + } + + /** + * Gets the integer value this expression evaluates to, if any. + * + * Note that this does not have a result if the value is too large to fit in a + * 32-bit signed integer type. + */ + int getIntValue() { + this.getType().getUnderlyingType() instanceof IntegerType and + exists(string val | constvalues(this, val, _) | result = val.toInt()) + } + + /** Gets either `getFloatValue` or `getIntValue`. */ + float getNumericValue() { result = this.getFloatValue() or result = this.getIntValue() } + + /** + * Holds if the complex value this expression evaluates to has real part `real` and imaginary + * part `imag`. + */ + predicate hasComplexValue(float real, float imag) { + this.getType().getUnderlyingType() instanceof ComplexType and + exists(string val | constvalues(this, val, _) | + exists(string cmplxre | + cmplxre = "^\\((.+) \\+ (.+)i\\)$" and + real = val.regexpCapture(cmplxre, 1).toFloat() and + imag = val.regexpCapture(cmplxre, 2).toFloat() + ) + ) + } + + /** Gets the string value this expression evaluates to, if any. */ + string getStringValue() { + this.getType().getUnderlyingType() instanceof StringType and + constvalues(this, result, _) + } + + /** + * Gets the string representation of the exact value this expression + * evaluates to, if any. + * + * For example, for the constant 3.141592653589793238462, this will + * result in 1570796326794896619231/500000000000000000000 + */ + string getExactValue() { constvalues(this, _, result) } + + /** + * Holds if this expression has a constant value which is guaranteed not to depend on the + * platform where it is evaluated. + * + * This is a conservative approximation, that is, the predicate may fail to hold for expressions + * whose value is platform independent, but it will never hold for expressions whose value is not + * platform independent. + * + * Examples of platform-dependent constants include constants declared in files with build + * constraints, the value of `runtime.GOOS`, and the return value of `unsafe.Sizeof`. + */ + predicate isPlatformIndependentConstant() { none() } + + /** Gets the type of this expression. */ + Type getType() { + type_of(this, result) + or + not type_of(this, _) and + result instanceof InvalidType + } + + /** + * Gets the global value number of this expression. + * + * Expressions with the same global value number are guaranteed to have the same value at runtime. + * The converse does not hold in general, that is, expressions with different global value numbers + * may still have the same value at runtime. + */ + GVN getGlobalValueNumber() { result = globalValueNumber(DataFlow::exprNode(this)) } + + /** + * Holds if this expression may have observable side effects of its own (that is, independent + * of whether its sub-expressions may have side effects). + * + * Memory allocation is not considered an observable side effect. + */ + predicate mayHaveOwnSideEffects() { none() } + + /** + * Holds if the evaluation of this expression may produce observable side effects. + * + * Memory allocation is not considered an observable side effect. + */ + predicate mayHaveSideEffects() { + this.mayHaveOwnSideEffects() or this.getAChildExpr().mayHaveSideEffects() + } + + override string toString() { result = "expression" } +} + +/** + * A bad expression, that is, an expression that could not be parsed. + * + * Examples: + * + * ```go + * x + + * y < + * ``` + */ +class BadExpr extends @badexpr, Expr { + override string toString() { result = "bad expression" } + + override string getAPrimaryQlClass() { result = "BadExpr" } +} + +/** + * An identifier. + * + * Examples: + * + * ```go + * x + * ``` + */ +class Ident extends @ident, Expr { + /** Gets the name of this identifier. */ + string getName() { literals(this, result, _) } + + /** Holds if this identifier is a use of `e`. */ + predicate uses(Entity e) { uses(this, e) } + + /** Holds if this identifier is a definition or declaration of `e` */ + predicate declares(Entity e) { defs(this, e) } + + /** Holds if this identifier refers to (that is, uses, defines or declares) `e`. */ + predicate refersTo(Entity e) { this.uses(e) or this.declares(e) } + + override string toString() { result = this.getName() } + + override string getAPrimaryQlClass() { result = "Ident" } +} + +/** + * The blank identifier `_`. + * + * Examples: + * + * ```go + * _ + * ``` + */ +class BlankIdent extends Ident { + BlankIdent() { this.getName() = "_" } + + override string getAPrimaryQlClass() { result = "BlankIdent" } +} + +/** + * An ellipsis expression, representing either the `...` type in a parameter list or + * the `...` length in an array type. + * + * Examples: + * + * ```go + * ... + * ``` + */ +class Ellipsis extends @ellipsis, Expr { + /** Gets the operand of this ellipsis expression. */ + Expr getOperand() { result = this.getChildExpr(0) } + + override string toString() { result = "..." } + + override string getAPrimaryQlClass() { result = "Ellipsis" } +} + +/** + * A literal expression. + * + * Examples: + * + * ```go + * "hello" + * func(x, y int) int { return x + y } + * map[string]int{"A": 1, "B": 2} + * ``` + */ +class Literal extends Expr { + Literal() { + this instanceof @basiclit or this instanceof @funclit or this instanceof @compositelit + } +} + +/** + * A literal expression of basic type. + * + * Examples: + * + * ```go + * 1 + * "hello" + * ``` + */ +class BasicLit extends @basiclit, Literal { + /** Gets the value of this literal expressed as a string. */ + string getValue() { literals(this, result, _) } + + /** Gets the raw program text corresponding to this literal. */ + string getText() { literals(this, _, result) } + + override predicate isConst() { + // override to make sure literals are always considered constants even if we did not get + // information about constant values from the extractor (for example due to missing + // type information) + any() + } + + override predicate isPlatformIndependentConstant() { any() } + + override string toString() { result = this.getText() } +} + +/** + * An integer literal. + * + * Examples: + * + * ```go + * 256 + * ``` + */ +class IntLit extends @intlit, BasicLit { + override string getAPrimaryQlClass() { result = "IntLit" } +} + +/** + * A floating-point literal. + * + * Examples: + * + * ```go + * 2.71828 + * ``` + */ +class FloatLit extends @floatlit, BasicLit { + override string getAPrimaryQlClass() { result = "FloatLit" } +} + +/** + * An imaginary literal. + * + * Examples: + * + * ```go + * 2i + * 2.7i + * ``` + */ +class ImagLit extends @imaglit, BasicLit { + override string getAPrimaryQlClass() { result = "ImagLit" } +} + +/** + * A rune literal. + * + * Examples: + * + * ```go + * 'a' + * 'ä' + * '本' + * '\377' + * '\xff' + * '\u12e4' + * '\U00101234' + * '\n' + * ``` + */ +class CharLit extends @charlit, BasicLit { + // use the constant value of the literal as the string value, as the value we get from the + // compiler is an integer, meaning we would not otherwise have a string value for rune literals + override string getStringValue() { result = this.getValue() } + + override string getAPrimaryQlClass() { result = "CharLit" } +} + +class RuneLit = CharLit; + +/** + * A string literal. + * + * Examples: + * + * ```go + * "hello world" + * ``` + */ +class StringLit extends @stringlit, BasicLit { + override string getAPrimaryQlClass() { result = "StringLit" } + + /** Holds if this string literal is a raw string literal. */ + predicate isRaw() { this.getText().matches("`%`") } +} + +/** + * A function literal. + * + * Examples: + * + * ```go + * func(x, y int) int { return x + y } + * ``` + */ +class FuncLit extends @funclit, Literal, StmtParent, FuncDef { + override FuncTypeExpr getTypeExpr() { result = this.getChildExpr(0) } + + override SignatureType getType() { result = Literal.super.getType() } + + /** Gets the body of this function literal. */ + override BlockStmt getBody() { result = this.getChildStmt(1) } + + override predicate isPlatformIndependentConstant() { any() } + + override string toString() { result = "function literal" } + + override string getAPrimaryQlClass() { result = "FuncLit" } +} + +/** + * A composite literal + * + * Examples: + * + * ```go + * Point3D{0.5, -0.5, 0.5} + * map[string]int{"A": 1, "B": 2} + * ``` + */ +class CompositeLit extends @compositelit, Literal { + /** Gets the expression representing the type of this composite literal. */ + Expr getTypeExpr() { result = this.getChildExpr(0) } + + /** Gets the `i`th element of this composite literal (0-based). */ + Expr getElement(int i) { + i >= 0 and + result = this.getChildExpr(i + 1) + } + + /** Gets an element of this composite literal. */ + Expr getAnElement() { result = this.getElement(_) } + + /** Gets the number of elements in this composite literal. */ + int getNumElement() { result = count(this.getAnElement()) } + + /** + * Gets the `i`th key expression in this literal. + * + * If the `i`th element of this literal has no key, this predicate is undefined for `i`. + */ + Expr getKey(int i) { result = this.getElement(i).(KeyValueExpr).getKey() } + + /** + * Gets the `i`th value expression in this literal. + */ + Expr getValue(int i) { + exists(Expr elt | elt = this.getElement(i) | + result = elt.(KeyValueExpr).getValue() + or + not elt instanceof KeyValueExpr and result = elt + ) + } + + override string toString() { result = "composite literal" } + + override string getAPrimaryQlClass() { result = "CompositeLit" } +} + +/** + * A map literal. + * + * Examples: + * + * ```go + * map[string]int{"A": 1, "B": 2} + * ``` + */ +class MapLit extends CompositeLit { + MapType mt; + + MapLit() { mt = this.getType().getUnderlyingType() } + + /** Gets the key type of this literal. */ + Type getKeyType() { result = mt.getKeyType() } + + /** Gets the value type of this literal. */ + Type getValueType() { result = mt.getValueType() } + + override string toString() { result = "map literal" } + + override string getAPrimaryQlClass() { result = "MapLit" } +} + +/** + * A struct literal. + * + * Examples: + * + * ```go + * Point3D{0.5, -0.5, 0.5} + * Point3D{y: 1} + * Point3D{} + * ``` + */ +class StructLit extends CompositeLit { + StructType st; + + StructLit() { st = this.getType().getUnderlyingType() } + + /** Gets the struct type underlying this literal. */ + StructType getStructType() { result = st } + + override string toString() { result = "struct literal" } + + override string getAPrimaryQlClass() { result = "StructLit" } +} + +/** + * An array or slice literal. + * + * Examples: + * + * ```go + * [10]string{} + * [6]int{1, 2, 3, 5} + * [...]string{"Sat", "Sun"} + * []int{1, 2, 3, 5} + * []string{"Sat", "Sun"} + * ``` + */ +class ArrayOrSliceLit extends CompositeLit { + CompositeType type; + + ArrayOrSliceLit() { + type = this.getType().getUnderlyingType() and + ( + type instanceof ArrayType + or + type instanceof SliceType + ) + } +} + +/** + * An array literal. + * + * Examples: + * + * ```go + * [10]string{} + * [6]int{1, 2, 3, 5} + * [...]string{"Sat", "Sun"} + * ``` + */ +class ArrayLit extends ArrayOrSliceLit { + override ArrayType type; + + /** Gets the array type underlying this literal. */ + ArrayType getArrayType() { result = type } + + override string toString() { result = "array literal" } + + override string getAPrimaryQlClass() { result = "ArrayLit" } +} + +/** + * A slice literal. + * + * Examples: + * + * ```go + * []int{1, 2, 3, 5} + * []string{"Sat", "Sun"} + * ``` + */ +class SliceLit extends ArrayOrSliceLit { + override SliceType type; + + /** Gets the slice type underlying this literal. */ + SliceType getSliceType() { result = type } + + override string toString() { result = "slice literal" } + + override string getAPrimaryQlClass() { result = "SliceLit" } +} + +/** + * A parenthesized expression. + * + * Examples: + * + * ```go + * (x + y) + * ``` + */ +class ParenExpr extends @parenexpr, Expr { + /** Gets the expression between parentheses. */ + Expr getExpr() { result = this.getChildExpr(0) } + + override Expr stripParens() { result = this.getExpr().stripParens() } + + override predicate isPlatformIndependentConstant() { + this.getExpr().isPlatformIndependentConstant() + } + + override string toString() { result = "(...)" } + + override string getAPrimaryQlClass() { result = "ParenExpr" } +} + +/** + * A selector expression, that is, a base expression followed by a selector. + * + * Examples: + * + * ```go + * x.f + * ``` + */ +class SelectorExpr extends @selectorexpr, Expr { + /** Gets the base of this selector expression. */ + Expr getBase() { result = this.getChildExpr(0) } + + /** Gets the selector of this selector expression. */ + Ident getSelector() { result = this.getChildExpr(1) } + + /** Holds if this selector is a use of `e`. */ + predicate uses(Entity e) { this.getSelector().uses(e) } + + /** Holds if this selector is a definition of `e` */ + predicate declares(Entity e) { this.getSelector().declares(e) } + + /** Holds if this selector refers to (that is, uses, defines or declares) `e`. */ + predicate refersTo(Entity e) { this.getSelector().refersTo(e) } + + override predicate mayHaveOwnSideEffects() { any() } + + override string toString() { result = "selection of " + this.getSelector() } + + override string getAPrimaryQlClass() { result = "SelectorExpr" } +} + +/** + * A selector expression that refers to a promoted field or a promoted method. These + * selectors may implicitly address an embedded struct of their base type - for example, + * the selector `x.field` may implicitly address `x.Embedded.field`). Note they may also + * explicitly address `field`; being a `PromotedSelector` only indicates the addressed + * field or method may be promoted, not that it is promoted in this particular context. + */ +class PromotedSelector extends SelectorExpr { + PromotedSelector() { + exists(ValueEntity ve | this.refersTo(ve) | + ve instanceof PromotedField or ve instanceof PromotedMethod + ) + } + + /** + * Gets the underlying struct type of this selector's base. Note because this selector + * addresses a promoted field, the addressed field may not directly occur in the returned + * struct type. + */ + StructType getSelectedStructType() { + exists(Type baseType | baseType = this.getBase().getType().getUnderlyingType() | + pragma[only_bind_into](result) = + [baseType, baseType.(PointerType).getBaseType().getUnderlyingType()] + ) + } +} + +/** + * An index expression, that is, a base expression followed by an index. + * Expressions which represent generic type instantiations have been + * excluded. + * + * Examples: + * + * ```go + * array[i] + * arrayptr[i] + * slice[i] + * map[key] + * ``` + */ +class IndexExpr extends @indexexpr, Expr { + IndexExpr() { not isTypeExprBottomUp(this.getChildExpr(0)) } + + /** Gets the base of this index expression. */ + Expr getBase() { result = this.getChildExpr(0) } + + /** Gets the index of this index expression. */ + Expr getIndex() { result = this.getChildExpr(1) } + + override predicate mayHaveOwnSideEffects() { any() } + + override string toString() { result = "index expression" } + + override string getAPrimaryQlClass() { result = "IndexExpr" } +} + +/** + * A generic function instantiation, that is, a base expression that represents + * a generic function, followed by a list of type arguments. + * + * Examples: + * + * ```go + * genericfunction[type] + * genericfunction[type1, type2] + * ``` + */ +class GenericFunctionInstantiationExpr extends @genericfunctioninstantiationexpr, Expr { + /** Gets the generic function expression. */ + Expr getBase() { result = this.getChildExpr(0) } + + /** Gets the `i`th type argument. */ + Expr getTypeArgument(int i) { + i >= 0 and + result = this.getChildExpr(i + 1) + } + + override predicate mayHaveOwnSideEffects() { any() } + + override string toString() { result = "generic function instantiation expression" } + + override string getAPrimaryQlClass() { result = "GenericFunctionInstantiationExpr" } +} + +/** + * A generic type instantiation, that is, a base expression that is a generic + * type followed by a list of type arguments. + * + * Examples: + * + * ```go + * generictype[type] + * generictype[type1, type2] + * ``` + */ +class GenericTypeInstantiationExpr extends Expr { + GenericTypeInstantiationExpr() { + this instanceof @generictypeinstantiationexpr + or + this instanceof @indexexpr and isTypeExprBottomUp(this.getChildExpr(0)) + } + + /** Gets the generic type expression. */ + Expr getBase() { result = this.getChildExpr(0) } + + /** Gets the `i`th type argument. */ + Expr getTypeArgument(int i) { + i >= 0 and + result = this.getChildExpr(i + 1) + } + + override predicate mayHaveOwnSideEffects() { any() } + + override string toString() { result = "generic type instantiation expression" } + + override string getAPrimaryQlClass() { result = "GenericTypeInstantiationExpr" } +} + +/** + * A slice expression, that is, a base expression followed by slice indices. + * + * Examples: + * + * ```go + * a[1:3] + * a[1:3:5] + * ``` + */ +class SliceExpr extends @sliceexpr, Expr { + /** Gets the base of this slice expression. */ + Expr getBase() { result = this.getChildExpr(0) } + + /** Gets the lower bound of this slice expression. */ + Expr getLow() { result = this.getChildExpr(1) } + + /** Gets the upper bound of this slice expression. */ + Expr getHigh() { result = this.getChildExpr(2) } + + /** Gets the maximum of this slice expression, if any. */ + Expr getMax() { result = this.getChildExpr(3) } + + override string toString() { result = "slice expression" } + + override string getAPrimaryQlClass() { result = "SliceExpr" } +} + +/** + * A type assertion expression. + * + * Examples: + * + * ```go + * x.(T) + * ``` + */ +class TypeAssertExpr extends @typeassertexpr, Expr { + /** Gets the base expression whose type is being asserted. */ + Expr getExpr() { result = this.getChildExpr(0) } + + /** Gets the expression representing the asserted type. */ + Expr getTypeExpr() { result = this.getChildExpr(1) } + + override predicate mayHaveOwnSideEffects() { any() } + + override predicate isPlatformIndependentConstant() { + this.getExpr().isPlatformIndependentConstant() + } + + override string toString() { result = "type assertion" } + + override string getAPrimaryQlClass() { result = "TypeAssertExpr" } +} + +/** + * An expression that syntactically could either be a function call or a type + * conversion expression. + * + * In most cases, the subclasses `CallExpr` and `ConversionExpr` should be used + * instead. + * + * Examples: + * + * ```go + * f(x) + * g(a, b...) + * []byte("x") + * ``` + */ +class CallOrConversionExpr extends @callorconversionexpr, Expr { + override string getAPrimaryQlClass() { result = "CallOrConversionExpr" } +} + +/** + * A type conversion expression. + * + * Examples: + * + * ```go + * []byte("x") + * ``` + */ +class ConversionExpr extends CallOrConversionExpr { + ConversionExpr() { isTypeExprBottomUp(this.getChildExpr(0)) } + + /** Gets the type expression representing the target type of the conversion. */ + Expr getTypeExpr() { result = this.getChildExpr(0) } + + /** Gets the operand of the type conversion. */ + Expr getOperand() { result = this.getChildExpr(1) } + + override predicate isPlatformIndependentConstant() { + this.getOperand().isPlatformIndependentConstant() + } + + override string toString() { result = "type conversion" } + + override string getAPrimaryQlClass() { result = "ConversionExpr" } +} + +/** + * A function call expression. + * + * On snapshots with incomplete type information, type conversions may be misclassified + * as function call expressions. + * + * Examples: + * + * ```go + * f(x) + * g(a, b...) + * ``` + */ +class CallExpr extends CallOrConversionExpr { + CallExpr() { + exists(Expr callee | callee = this.getChildExpr(0) | not isTypeExprBottomUp(callee)) + or + // only calls can have an ellipsis after their last argument + has_ellipsis(this) + } + + /** Gets the expression representing the function being called. */ + Expr getCalleeExpr() { + if this.getChildExpr(0) instanceof GenericFunctionInstantiationExpr + then result = this.getChildExpr(0).(GenericFunctionInstantiationExpr).getBase() + else result = this.getChildExpr(0) + } + + /** Gets the `i`th argument expression of this call (0-based). */ + Expr getArgument(int i) { + i >= 0 and + result = this.getChildExpr(i + 1) + } + + /** Gets an argument expression of this call. */ + Expr getAnArgument() { result = this.getArgument(_) } + + /** Gets the number of argument expressions of this call. */ + int getNumArgument() { result = count(this.getAnArgument()) } + + /** + * Gets the name of the invoked function, method or variable if it can be + * determined syntactically. + * + * Note that if a variable is being called then this gets the variable name + * rather than the name of the function or method that has been assigned to + * the variable. + */ + string getCalleeName() { + exists(Expr callee | callee = this.getCalleeExpr().stripParens() | + result = callee.(Ident).getName() + or + result = callee.(SelectorExpr).getSelector().getName() + ) + } + + /** Gets the declared target of this call. */ + Function getTarget() { this.getCalleeExpr() = result.getAReference() } + + /** Holds if this call has an ellipsis after its last argument. */ + predicate hasEllipsis() { has_ellipsis(this) } + + override predicate mayHaveOwnSideEffects() { + this.getTarget().mayHaveSideEffects() or + not exists(this.getTarget()) + } + + override string toString() { + result = "call to " + this.getCalleeName() + or + not exists(this.getCalleeName()) and + result = "function call" + } + + override string getAPrimaryQlClass() { result = "CallExpr" } +} + +/** + * A star expression. + * + * Examples: + * + * ```go + * *x + * ``` + */ +class StarExpr extends @starexpr, Expr { + /** Gets the base expression of this star expression. */ + Expr getBase() { result = this.getChildExpr(0) } + + override predicate mayHaveOwnSideEffects() { any() } + + override string toString() { result = "star expression" } + + override string getAPrimaryQlClass() { result = "StarExpr" } +} + +/** + * A key-value pair in a composite literal. + * + * Examples: + * + * ```go + * "A": 1 + * ``` + */ +class KeyValueExpr extends @keyvalueexpr, Expr { + /** Gets the key expression of this key-value pair. */ + Expr getKey() { result = this.getChildExpr(0) } + + /** Gets the value expression of this key-value pair. */ + Expr getValue() { result = this.getChildExpr(1) } + + /** Gets the composite literal to which this key-value pair belongs. */ + CompositeLit getLiteral() { this = result.getElement(_) } + + override string toString() { result = "key-value pair" } + + override string getAPrimaryQlClass() { result = "KeyValueExpr" } +} + +/** + * An expression representing an array type. + * + * Examples: + * + * ```go + * [5]int + * ``` + */ +class ArrayTypeExpr extends @arraytypeexpr, TypeExpr { + /** Gets the length expression of this array type. */ + Expr getLength() { result = this.getChildExpr(0) } + + /** Gets the expression representing the element type of this array type. */ + Expr getElement() { result = this.getChildExpr(1) } + + override string toString() { result = "array type" } + + override string getAPrimaryQlClass() { result = "ArrayTypeExpr" } +} + +/** + * An expression representing a struct type. + * + * Examples: + * + * ```go + * struct {x, y int; z float32} + * ``` + */ +class StructTypeExpr extends @structtypeexpr, TypeExpr, FieldParent { + override string toString() { result = "struct type" } + + override string getAPrimaryQlClass() { result = "StructTypeExpr" } +} + +/** + * An expression representing a function type. + * + * Examples: + * + * ```go + * func(a, b int, c float32) (float32, bool) + * ``` + */ +class FuncTypeExpr extends @functypeexpr, TypeExpr, ScopeNode, FieldParent { + /** Gets the `i`th parameter of this function type (0-based). */ + ParameterDecl getParameterDecl(int i) { result = this.getField(i) and i >= 0 } + + /** Gets a parameter of this function type. */ + ParameterDecl getAParameterDecl() { result = this.getParameterDecl(_) } + + /** Gets the number of parameters of this function type. */ + int getNumParameter() { result = count(this.getAParameterDecl()) } + + /** Gets the `i`th result of this function type (0-based). */ + ResultVariableDecl getResultDecl(int i) { result = this.getField(-(i + 1)) } + + /** Gets a result of this function type. */ + ResultVariableDecl getAResultDecl() { result = this.getResultDecl(_) } + + /** Gets the number of results of this function type. */ + int getNumResult() { result = count(this.getAResultDecl()) } + + /** Gets the result of this function type, if there is only one. */ + ResultVariableDecl getResultDecl() { this.getNumResult() = 1 and result = this.getAResultDecl() } + + override string toString() { result = "function type" } + + override string getAPrimaryQlClass() { result = "FuncTypeExpr" } + + /** Gets the `i`th child of this node, parameters first followed by results. */ + override AstNode getUniquelyNumberedChild(int i) { + if i < this.getNumParameter() + then result = this.getParameterDecl(i) + else result = this.getResultDecl(i - this.getNumParameter()) + } +} + +/** + * An expression representing an interface type. + * + * Examples: + * + * ```go + * interface { Read(p []byte) (n int, err error); Close() error} + * ``` + */ +class InterfaceTypeExpr extends @interfacetypeexpr, TypeExpr, FieldParent { + /** Gets the `i`th method specification of this interface type. */ + MethodSpec getMethod(int i) { result = this.getField(i) } + + /** Gets a method of this interface type. */ + MethodSpec getAMethod() { result = this.getMethod(_) } + + /** Gets the number of methods of this interface type. */ + int getNumMethod() { result = count(this.getAMethod()) } + + override string toString() { result = "interface type" } + + override string getAPrimaryQlClass() { result = "InterfaceTypeExpr" } +} + +/** + * An expression representing a map type. + * + * Examples: + * + * ```go + * map[string]int + * ``` + */ +class MapTypeExpr extends @maptypeexpr, TypeExpr { + /** Gets the expression representing the key type of this map type. */ + Expr getKeyTypeExpr() { result = this.getChildExpr(0) } + + /** Gets the key type of this map type. */ + Type getKeyType() { result = this.getKeyTypeExpr().getType() } + + /** Gets the expression representing the value type of this map type. */ + Expr getValueTypeExpr() { result = this.getChildExpr(1) } + + /** Gets the value type of this map type. */ + Type getValueType() { result = this.getValueTypeExpr().getType() } + + override string toString() { result = "map type" } + + override string getAPrimaryQlClass() { result = "MapTypeExpr" } +} + +/** + * An expression representing a type set literal. + * + * Examples: + * + * ```go + * ~string + * int64 | float64 + * ``` + */ +class TypeSetLiteralExpr extends @typesetliteralexpr, TypeExpr { + override string toString() { result = "type set literal" } + + override string getAPrimaryQlClass() { result = "TypeSetLiteralExpr" } +} + +/** + * An expression with a (unary or binary) operator. + * + * Examples: + * + * ```go + * a * b + * -c + * ``` + */ +class OperatorExpr extends @operatorexpr, Expr { + /** Gets the operator of this expression. */ + string getOperator() { none() } + + /** Gets an operand of this expression. */ + Expr getAnOperand() { none() } +} + +/** + * An expression with an arithmetic operator like `-` or `/`. + * + * Examples: + * + * ```go + * x - y + * u / v + * ``` + */ +class ArithmeticExpr extends @arithmeticexpr, OperatorExpr { } + +/** + * An expression with a logical operator like `!` or `&&`. + * + * Examples: + * + * ```go + * !a + * b && c + * ``` + */ +class LogicalExpr extends @logicalexpr, OperatorExpr { } + +/** + * An expression with a bitwise operator such as `^` or `|`. + * + * Examples: + * + * ```go + * x ^ y + * a | b + * ``` + */ +class BitwiseExpr extends @bitwiseexpr, OperatorExpr { } + +/** + * An expression with a unary operator. + * + * Examples: + * + * ```go + * +7 + * -2.5i + * !x + * ``` + */ +class UnaryExpr extends @unaryexpr, OperatorExpr { + /** Gets the operand of this unary expression. */ + Expr getOperand() { result = this.getChildExpr(0) } + + override Expr getAnOperand() { result = this.getOperand() } + + override predicate isPlatformIndependentConstant() { + this.getOperand().isPlatformIndependentConstant() + } + + override string toString() { result = this.getOperator() + "..." } +} + +/** + * An expression with a unary arithmetic operator, that is, unary `-` or `+`. + * + * Examples: + * + * ```go + * +7 + * -2.5i + * ``` + */ +class ArithmeticUnaryExpr extends @arithmeticunaryexpr, ArithmeticExpr, UnaryExpr { } + +/** + * An expression with a unary logical operator, that is, `!`. + * + * Examples: + * + * ```go + * !x + * ``` + */ +class LogicalUnaryExpr extends @logicalunaryexpr, LogicalExpr, UnaryExpr { } + +/** + * An expression with a unary bitwise operator, that is, `^`. + * + * Examples: + * + * ```go + * ^x + * ``` + */ +class BitwiseUnaryExpr extends @bitwiseunaryexpr, BitwiseExpr, UnaryExpr { } + +/** + * A unary plus expression using `+`. + * + * Examples: + * + * ```go + * +7 + * ``` + */ +class PlusExpr extends @plusexpr, ArithmeticUnaryExpr { + override string getOperator() { result = "+" } + + override string getAPrimaryQlClass() { result = "PlusExpr" } +} + +/** + * A unary minus expression using `-`. + * + * Examples: + * + * ```go + * -2.5i + * ``` + */ +class MinusExpr extends @minusexpr, ArithmeticUnaryExpr { + override string getOperator() { result = "-" } + + override string getAPrimaryQlClass() { result = "MinusExpr" } +} + +/** + * A unary "not" expression using `!`. + * + * Examples: + * + * ```go + * !x + * ``` + */ +class NotExpr extends @notexpr, LogicalUnaryExpr { + override string getOperator() { result = "!" } + + override string getAPrimaryQlClass() { result = "NotExpr" } +} + +/** + * A unary complement expression using `^`. + * + * Examples: + * + * ```go + * ^x + * ``` + */ +class ComplementExpr extends @complementexpr, BitwiseUnaryExpr { + override string getOperator() { result = "^" } + + override string getAPrimaryQlClass() { result = "ComplementExpr" } +} + +/** + * A unary pointer-dereference expression. + * + * This class exists for compatibility reasons only and should not normally be used directly. Use `StarExpr` instead. + */ +class DerefExpr extends @derefexpr, UnaryExpr { + override predicate mayHaveOwnSideEffects() { any() } + + override string getOperator() { result = "*" } + + override string getAPrimaryQlClass() { result = "DerefExpr" } +} + +/** + * A unary address-of expression using `&`. + * + * Examples: + * + * ```go + * &x + * ``` + */ +class AddressExpr extends @addressexpr, UnaryExpr { + override predicate mayHaveOwnSideEffects() { any() } + + override string getOperator() { result = "&" } + + override string getAPrimaryQlClass() { result = "AddressExpr" } +} + +/** + * A unary receive expression using `<-`. + * + * Examples: + * + * ```go + * <-chan + * ``` + */ +class RecvExpr extends @arrowexpr, UnaryExpr { + override predicate mayHaveOwnSideEffects() { any() } + + override string getOperator() { result = "<-" } + + override string getAPrimaryQlClass() { result = "RecvExpr" } +} + +/** + * A binary expression. + * + * Examples: + * + * ```go + * a * b + * a || b + * b != c + * ``` + */ +class BinaryExpr extends @binaryexpr, OperatorExpr { + /** Gets the left operand of this binary expression. */ + Expr getLeftOperand() { result = this.getChildExpr(0) } + + /** Gets the right operand of this binary expression. */ + Expr getRightOperand() { result = this.getChildExpr(1) } + + override Expr getAnOperand() { result = this.getChildExpr([0 .. 1]) } + + /** Holds if `e` and `f` (in either order) are the two operands of this binary expression. */ + predicate hasOperands(Expr e, Expr f) { + e = this.getAnOperand() and + f = this.getAnOperand() and + e != f + } + + override predicate isPlatformIndependentConstant() { + this.getLeftOperand().isPlatformIndependentConstant() and + this.getRightOperand().isPlatformIndependentConstant() + } + + override string toString() { result = "..." + this.getOperator() + "..." } +} + +/** + * A binary arithmetic expression, that is, `+`, `-`, `*`, `/` or `%`. + * + * Examples: + * + * ```go + * a * b + * ``` + */ +class ArithmeticBinaryExpr extends @arithmeticbinaryexpr, ArithmeticExpr, BinaryExpr { } + +/** + * A binary logical expression, that is, `&&` or `||`. + * + * Examples: + * + * ```go + * a || b + * ``` + */ +class LogicalBinaryExpr extends @logicalbinaryexpr, LogicalExpr, BinaryExpr { } + +/** + * A binary bitwise expression, that is, `<<`, `>>`, `|`, `^`, `&` or `&^`. + * + * Examples: + * + * ```go + * a << i + * b ^ c + * ``` + */ +class BitwiseBinaryExpr extends @bitwisebinaryexpr, BitwiseExpr, BinaryExpr { } + +/** + * A shift expression, that is, `<<` or `>>`. + * + * Examples: + * + * ```go + * a << i + * ``` + */ +class ShiftExpr extends @shiftexpr, BitwiseBinaryExpr { } + +/** + * A comparison expression, that is, `==`, `!=`, `<`, `<=`, `>=` or `>`. + * + * Examples: + * + * ```go + * a != b + * c > d + * ``` + */ +class ComparisonExpr extends @comparison, BinaryExpr { } + +/** + * An equality test, that is, `==` or `!=`. + * + * Examples: + * + * ```go + * a != b + * ``` + */ +class EqualityTestExpr extends @equalitytest, ComparisonExpr { + /** Gets the polarity of this equality test, that is, `true` for `==` and `false` for `!=`. */ + boolean getPolarity() { none() } +} + +/** + * A relational comparison, that is, `<`, `<=`, `>=` or `>`. + * + * Examples: + * + * ```go + * c > d + * ``` + */ +class RelationalComparisonExpr extends @relationalcomparison, ComparisonExpr { + /** Holds if this comparison is strict, that is, it implies inequality. */ + predicate isStrict() { none() } + + /** + * Gets the greater operand of this comparison, that is, the right operand for + * a `<` or `<=` comparison, and the left operand for `>=` or `>`. + */ + Expr getGreaterOperand() { none() } + + /** + * Gets the lesser operand of this comparison, that is, the left operand for + * a `<` or `<=` comparison, and the right operand for `>=` or `>`. + */ + Expr getLesserOperand() { none() } +} + +/** + * A logical-or expression using `||`. + * + * Examples: + * + * ```go + * a || b + * ``` + */ +class LorExpr extends @lorexpr, LogicalBinaryExpr { + override string getOperator() { result = "||" } + + override string getAPrimaryQlClass() { result = "LorExpr" } +} + +class LogOrExpr = LorExpr; + +/** + * A logical-and expression using `&&`. + * + * Examples: + * + * ```go + * a && b + * ``` + */ +class LandExpr extends @landexpr, LogicalBinaryExpr { + override string getOperator() { result = "&&" } + + override string getAPrimaryQlClass() { result = "LandExpr" } +} + +class LogAndExpr = LandExpr; + +/** + * An equality test using `==`. + * + * Examples: + * + * ```go + * a == b + * ``` + */ +class EqlExpr extends @eqlexpr, EqualityTestExpr { + override string getOperator() { result = "==" } + + override boolean getPolarity() { result = true } + + override string getAPrimaryQlClass() { result = "EqlExpr" } +} + +class EqExpr = EqlExpr; + +/** + * An inequality test using `!=`. + * + * Examples: + * + * ```go + * a != b + * ``` + */ +class NeqExpr extends @neqexpr, EqualityTestExpr { + override string getOperator() { result = "!=" } + + override boolean getPolarity() { result = false } + + override string getAPrimaryQlClass() { result = "NeqExpr" } +} + +/** + * A less-than test using `<`. + * + * Examples: + * + * ```go + * a < b + * ``` + */ +class LssExpr extends @lssexpr, RelationalComparisonExpr { + override string getOperator() { result = "<" } + + override predicate isStrict() { any() } + + override Expr getLesserOperand() { result = this.getLeftOperand() } + + override Expr getGreaterOperand() { result = this.getRightOperand() } + + override string getAPrimaryQlClass() { result = "LssExpr" } +} + +class LTExpr = LssExpr; + +/** + * A less-than-or-equal test using `<=`. + * + * Examples: + * + * ```go + * a <= b + * ``` + */ +class LeqExpr extends @leqexpr, RelationalComparisonExpr { + override string getOperator() { result = "<=" } + + override Expr getLesserOperand() { result = this.getLeftOperand() } + + override Expr getGreaterOperand() { result = this.getRightOperand() } + + override string getAPrimaryQlClass() { result = "LeqExpr" } +} + +class LEExpr = LeqExpr; + +/** + * A greater-than test using `>`. + * + * Examples: + * + * ```go + * a > b + * ``` + */ +class GtrExpr extends @gtrexpr, RelationalComparisonExpr { + override string getOperator() { result = ">" } + + override predicate isStrict() { any() } + + override Expr getLesserOperand() { result = this.getRightOperand() } + + override Expr getGreaterOperand() { result = this.getLeftOperand() } + + override string getAPrimaryQlClass() { result = "GtrExpr" } +} + +class GTExpr = GtrExpr; + +/** + * A greater-than-or-equal test using `>=`. + * + * Examples: + * + * ```go + * a >= b + * ``` + */ +class GeqExpr extends @geqexpr, RelationalComparisonExpr { + override string getOperator() { result = ">=" } + + override Expr getLesserOperand() { result = this.getRightOperand() } + + override Expr getGreaterOperand() { result = this.getLeftOperand() } + + override string getAPrimaryQlClass() { result = "GeqExpr" } +} + +class GEExpr = GeqExpr; + +/** + * An addition expression using `+`. + * + * Examples: + * + * ```go + * a + b + * ``` + */ +class AddExpr extends @addexpr, ArithmeticBinaryExpr { + override string getOperator() { result = "+" } + + override string getAPrimaryQlClass() { result = "AddExpr" } +} + +/** + * A subtraction expression using `-`. + * + * Examples: + * + * ```go + * a - b + * ``` + */ +class SubExpr extends @subexpr, ArithmeticBinaryExpr { + override string getOperator() { result = "-" } + + override string getAPrimaryQlClass() { result = "SubExpr" } +} + +/** + * A bitwise or expression using `|`. + * + * Examples: + * + * ```go + * a | b + * ``` + */ +class OrExpr extends @orexpr, BitwiseBinaryExpr { + override string getOperator() { result = "|" } + + override string getAPrimaryQlClass() { result = "OrExpr" } +} + +class BitOrExpr = OrExpr; + +/** + * An exclusive-or expression using `^`. + * + * Examples: + * + * ```go + * a ^ b + * ``` + */ +class XorExpr extends @xorexpr, BitwiseBinaryExpr { + override string getOperator() { result = "^" } + + override string getAPrimaryQlClass() { result = "XorExpr" } +} + +/** + * A multiplication expression using `*`. + * + * Examples: + * + * ```go + * a * b + * ``` + */ +class MulExpr extends @mulexpr, ArithmeticBinaryExpr { + override string getOperator() { result = "*" } + + override string getAPrimaryQlClass() { result = "MulExpr" } +} + +/** + * A divison or quotient expression using `/`. + * + * Examples: + * + * ```go + * a / b + * ``` + */ +class QuoExpr extends @quoexpr, ArithmeticBinaryExpr { + override predicate mayHaveOwnSideEffects() { any() } + + override string getOperator() { result = "/" } + + override string getAPrimaryQlClass() { result = "QuoExpr" } +} + +class DivExpr = QuoExpr; + +/** + * A remainder or modulo expression using `%`. + * + * Examples: + * + * ```go + * a % b + * ``` + */ +class RemExpr extends @remexpr, ArithmeticBinaryExpr { + override string getOperator() { result = "%" } + + override string getAPrimaryQlClass() { result = "RemExpr" } +} + +class ModExpr = RemExpr; + +/** + * A left-shift expression using `<<`. + * + * Examples: + * + * ```go + * a << i + * ``` + */ +class ShlExpr extends @shlexpr, ShiftExpr { + override string getOperator() { result = "<<" } + + override string getAPrimaryQlClass() { result = "ShlExpr" } +} + +class LShiftExpr = ShlExpr; + +/** + * A right-shift expression using `>>`. + * + * Examples: + * + * ```go + * a >> i + * ``` + */ +class ShrExpr extends @shrexpr, ShiftExpr { + override string getOperator() { result = ">>" } + + override string getAPrimaryQlClass() { result = "ShrExpr" } +} + +class RShiftExpr = ShrExpr; + +/** + * A bitwise and-expression using `&`. + * + * Examples: + * + * ```go + * a & b + * ``` + */ +class AndExpr extends @andexpr, BitwiseBinaryExpr { + override string getOperator() { result = "&" } + + override string getAPrimaryQlClass() { result = "AndExpr" } +} + +class BitAndExpr = AndExpr; + +/** + * A bitwise and-not expression using `&^`. + * + * Examples: + * + * ```go + * a &^ b + * ``` + */ +class AndNotExpr extends @andnotexpr, BitwiseBinaryExpr { + override string getOperator() { result = "&^" } + + override string getAPrimaryQlClass() { result = "AndNotExpr" } +} + +/** + * An expression representing a channel type. + * + * Examples: + * + * ```go + * chan float64 + * chan<- bool + * <-chan int + * ``` + */ +class ChanTypeExpr extends @chantypeexpr, TypeExpr { + /** + * Gets the expression representing the type of values flowing through the channel. + */ + Expr getValueTypeExpr() { result = this.getChildExpr(0) } + + /** Holds if this channel can send data. */ + predicate canSend() { none() } + + /** Holds if this channel can receive data. */ + predicate canReceive() { none() } + + override string toString() { result = "channel type" } + + override string getAPrimaryQlClass() { result = "ChanTypeExpr" } +} + +/** + * An expression representing a send-only channel type. + * + * Examples: + * + * ```go + * chan<- bool + * ``` + */ +class SendChanTypeExpr extends @sendchantypeexpr, ChanTypeExpr { + override predicate canSend() { any() } + + override string getAPrimaryQlClass() { result = "SendChanTypeExpr" } +} + +/** + * An expression representing a receive-only channel type. + * + * Examples: + * + * ```go + * <-chan int + * ``` + */ +class RecvChanTypeExpr extends @recvchantypeexpr, ChanTypeExpr { + override predicate canReceive() { any() } + + override string getAPrimaryQlClass() { result = "RecvChanTypeExpr" } +} + +/** + * An expression representing a duplex channel type that can both send and receive data. + * + * Examples: + * + * ```go + * chan float64 + * ``` + */ +class SendRecvChanTypeExpr extends @sendrcvchantypeexpr, ChanTypeExpr { + override predicate canSend() { any() } + + override predicate canReceive() { any() } + + override string getAPrimaryQlClass() { result = "SendRecvChanTypeExpr" } +} + +/** + * A (possibly qualified) name referring to a package, type, constant, variable, function or label. + * + * Examples: + * + * ```go + * Println + * fmt.Println + * fmt + * int + * T + * x + * Outerloop + * ``` + */ +class Name extends Expr { + Entity target; + + Name() { this.(Ident).refersTo(target) or this.(SelectorExpr).refersTo(target) } + + /** Gets the entity this name refers to. */ + Entity getTarget() { result = target } +} + +/** + * A simple (that is, unqualified) name. + * + * Examples: + * + * ```go + * Println + * ``` + */ +class SimpleName extends Name, Ident { } + +/** + * A qualified name. + * + * Examples: + * + * ```go + * fmt.Println + * ``` + */ +class QualifiedName extends Name, SelectorExpr { } + +/** + * A name referring to an imported package. + * + * Examples: + * + * ```go + * fmt + * ``` + */ +class PackageName extends Name { + override PackageEntity target; + + /** Gets the package this name refers to. */ + override PackageEntity getTarget() { result = target } + + override string getAPrimaryQlClass() { result = "PackageName" } +} + +/** + * A name referring to a type. + * + * Examples: + * + * ```go + * int + * T + * ``` + */ +class TypeName extends Name { + override TypeEntity target; + + /** Gets the type this name refers to. */ + override TypeEntity getTarget() { result = target } + + override string getAPrimaryQlClass() { result = "TypeName" } +} + +/** + * A name referring to a value, that is, a constant, variable or function. + * + * Examples: + * + * ```go + * c + * f + * x + * ``` + */ +class ValueName extends Name { + override ValueEntity target; + + /** Gets the constant, variable or function this name refers to. */ + override ValueEntity getTarget() { result = target } + + override string getAPrimaryQlClass() { result = "ValueName" } +} + +/** + * A name referring to a constant. + * + * Examples: + * + * ```go + * c + * ``` + */ +class ConstantName extends ValueName { + override Constant target; + + /** Gets the constant this name refers to. */ + override Constant getTarget() { result = target } + + override predicate isPlatformIndependentConstant() { + target = Builtin::bool(_) + or + target = Builtin::iota() + or + target = Builtin::nil() + or + exists(DeclaredConstant c | c = target | + not c.getSpec().getFile().hasBuildConstraints() and + c.getInit().isPlatformIndependentConstant() + ) + } + + override string getAPrimaryQlClass() { result = "ConstantName" } +} + +/** + * A name referring to a variable. + * + * Examples: + * + * ```go + * x + * ``` + */ +class VariableName extends ValueName { + override Variable target; + + /** Gets the variable this name refers to. */ + override Variable getTarget() { result = target } + + override string getAPrimaryQlClass() { result = "VariableName" } +} + +/** + * A name referring to a function. + * + * Examples: + * + * ```go + * f + * ``` + */ +class FunctionName extends ValueName { + override Function target; + + /** Gets the function this name refers to. */ + override Function getTarget() { result = target } + + override string getAPrimaryQlClass() { result = "FunctionName" } +} + +/** + * A name referring to a statement label. + * + * Examples: + * + * ```go + * Outerloop + * ``` + */ +class LabelName extends Name { + override Label target; + + /** Gets the label this name refers to. */ + override Label getTarget() { result = target } + + override string getAPrimaryQlClass() { result = "LabelName" } +} + +/** + * Holds if `e` is a type expression, as determined by a bottom-up syntactic + * analysis starting with `TypeName`s. + * + * On a snapshot with full type information, this predicate covers all type + * expressions. However, if type information is missing then not all type names + * may be identified as such, so not all type expressions can be determined by + * a bottom-up analysis. In such cases, `isTypeExprTopDown` below is useful. + */ +private predicate isTypeExprBottomUp(Expr e) { + e instanceof TypeName + or + e instanceof @arraytypeexpr + or + e instanceof @structtypeexpr + or + e instanceof @functypeexpr + or + e instanceof @interfacetypeexpr + or + e instanceof @maptypeexpr + or + e instanceof @chantypeexpr + or + e instanceof @typesetliteralexpr + or + e instanceof @generictypeinstantiationexpr + or + e instanceof @indexexpr and isTypeExprBottomUp(e.getChildExpr(0)) + or + isTypeExprBottomUp(e.(ParenExpr).getExpr()) + or + isTypeExprBottomUp(e.(StarExpr).getBase()) + or + isTypeExprBottomUp(e.(Ellipsis).getOperand()) +} + +/** + * Holds if `e` must be a type expression because it either occurs in a syntactic + * position where a type is expected, or it is part of a larger type expression. + * + * This predicate is only needed on snapshots for which type information is + * incomplete. It is an underapproximation; in cases where it is syntactically ambiguous + * whether an expression refers to a type or a value, we conservatively assume that + * it may be the latter and so this predicate does not consider the expression to be + * a type expression. + */ +private predicate isTypeExprTopDown(Expr e) { + e = any(CompositeLit cl).getTypeExpr() + or + e = any(TypeAssertExpr ta).getTypeExpr() + or + e = any(ArrayTypeExpr ae).getElement() + or + e = any(FieldDecl f).getTypeExpr() + or + e = any(ParameterDecl pd).getTypeExpr() + or + e = any(TypeParamDecl tpd).getTypeConstraintExpr() + or + e = any(TypeParamDecl tpd).getNameExpr(_) + or + e = any(ReceiverDecl rd).getTypeExpr() + or + e = any(ResultVariableDecl rvd).getTypeExpr() + or + e = any(MethodSpec md).getTypeExpr() + or + e = any(MapTypeExpr mt).getKeyTypeExpr() + or + e = any(MapTypeExpr mt).getValueTypeExpr() + or + e = any(ChanTypeExpr ct).getValueTypeExpr() + or + e = any(ValueSpec s).getTypeExpr() + or + e = any(TypeSpec s).getTypeExpr() + or + e = any(GenericTypeInstantiationExpr gtie).getBase() + or + e = any(GenericTypeInstantiationExpr gtie).getTypeArgument(_) + or + e = any(TypeSwitchStmt s).getACase().getExpr(_) and + // special case: `nil` is allowed in a type case but isn't a type + not e = Builtin::nil().getAReference() + or + e = any(SelectorExpr sel | isTypeExprTopDown(sel)).getBase() + or + e = any(ParenExpr pe | isTypeExprTopDown(pe)).getExpr() + or + e = any(StarExpr se | isTypeExprTopDown(se)).getBase() + or + e = any(Ellipsis ell | isTypeExprTopDown(ell)).getOperand() +} + +/** + * An expression referring to a type. + * + * Examples: + * + * ```go + * int + * func + * ``` + */ +class TypeExpr extends Expr { + TypeExpr() { + isTypeExprBottomUp(this) or + isTypeExprTopDown(this) + } +} + +/** + * An expression referring to a memory location. + * + * Examples: + * + * ```go + * a[i] + * *p + * ``` + */ +class ReferenceExpr extends Expr { + ReferenceExpr() { + (this instanceof Ident or this instanceof SelectorExpr) and + not (this instanceof PackageName or this instanceof TypeName or this instanceof LabelName) and + not this instanceof TypeExpr and + not this = any(ImportSpec is).getNameExpr() and + not this = any(File f).getPackageNameExpr() and + not this = any(LabeledStmt ls).getLabelExpr() and + not this = any(BranchStmt bs).getLabelExpr() and + not this = any(FieldDecl f).getNameExpr(_) and + not this = any(ParameterDecl pd).getNameExpr(_) and + not this = any(ReceiverDecl rd).getNameExpr() and + not this = any(ResultVariableDecl rvd).getNameExpr(_) and + not this = any(MethodSpec md).getNameExpr() and + not this = any(StructLit sl).getKey(_) + or + this.(ParenExpr).getExpr() instanceof ReferenceExpr + or + this.(StarExpr).getBase() instanceof ReferenceExpr + or + this instanceof DerefExpr + or + this instanceof IndexExpr + } + + /** Holds if this reference expression occurs in a position where it is being assigned to. */ + predicate isLvalue() { + this = any(Assignment assgn).getLhs(_) + or + this = any(IncDecStmt ids).getOperand() + or + exists(RangeStmt rs | + this = rs.getKey() or + this = rs.getValue() + ) + or + exists(ValueSpec spec, int i | this = spec.getNameExpr(i)) + or + exists(FuncDecl fd | this = fd.getNameExpr()) + } + + /** Holds if this reference expression occurs in a position where it is evaluated to a value. */ + predicate isRvalue() { + not this.isLvalue() + or + this = any(CompoundAssignStmt cmp).getLhs(_) + or + this = any(IncDecStmt ids).getOperand() + } +} + +/** + * An expression that refers to a value (as opposed to a package, a type or a statement label). + * + * Examples: + * + * ```go + * x + y + * f(x) + * ``` + */ +class ValueExpr extends Expr { + ValueExpr() { + this.(ReferenceExpr).isRvalue() or + this instanceof BasicLit or + this instanceof FuncLit or + this instanceof CompositeLit or + this.(ParenExpr).getExpr() instanceof ValueExpr or + this instanceof SliceExpr or + this instanceof TypeAssertExpr or + this instanceof CallOrConversionExpr or + this.(StarExpr).getBase() instanceof ValueExpr or + this instanceof OperatorExpr + } +} diff --git a/go/ql/lib/semmle/go/Files.qll b/go/ql/lib/semmle/go/Files.qll new file mode 100644 index 00000000000..825b40f8b44 --- /dev/null +++ b/go/ql/lib/semmle/go/Files.qll @@ -0,0 +1,288 @@ +/** Provides classes for working with files and folders. */ + +import go + +/** A file or folder. */ +abstract class Container extends @container { + /** + * Gets the absolute, canonical path of this container, using forward slashes + * as path separator. + * + * The path starts with a _root prefix_ followed by zero or more _path + * segments_ separated by forward slashes. + * + * The root prefix is of one of the following forms: + * + * 1. A single forward slash `/` (Unix-style) + * 2. An upper-case drive letter followed by a colon and a forward slash, + * such as `C:/` (Windows-style) + * 3. Two forward slashes, a computer name, and then another forward slash, + * such as `//FileServer/` (UNC-style) + * + * Path segments are never empty (that is, absolute paths never contain two + * contiguous slashes, except as part of a UNC-style root prefix). Also, path + * segments never contain forward slashes, and no path segment is of the + * form `.` (one dot) or `..` (two dots). + * + * Note that an absolute path never ends with a forward slash, except if it is + * a bare root prefix, that is, the path has no path segments. A container + * whose absolute path has no segments is always a `Folder`, not a `File`. + */ + abstract string getAbsolutePath(); + + /** + * Gets a URL representing the location of this container. + * + * For more information see https://lgtm.com/help/ql/locations#providing-urls. + */ + abstract string getURL(); + + /** + * Gets the relative path of this file or folder from the root folder of the + * analyzed source location. The relative path of the root folder itself is + * the empty string. + * + * This has no result if the container is outside the source root, that is, + * if the root folder is not a reflexive, transitive parent of this container. + */ + string getRelativePath() { + exists(string absPath, string pref | + absPath = this.getAbsolutePath() and sourceLocationPrefix(pref) + | + absPath = pref and result = "" + or + absPath = pref.regexpReplaceAll("/$", "") + "/" + result and + not result.matches("/%") + ) + } + + /** + * Gets the base name of this container including extension, that is, the last + * segment of its absolute path, or the empty string if it has no segments. + * + * Here are some examples of absolute paths and the corresponding base names + * (surrounded with quotes to avoid ambiguity): + * + * + * + * + * + * + * + * + * + *
    Absolute pathBase name
    "/tmp/tst.go""tst.go"
    "C:/Program Files (x86)""Program Files (x86)"
    "/"""
    "C:/"""
    "D:/"""
    "//FileServer/"""
    + */ + string getBaseName() { + result = this.getAbsolutePath().regexpCapture(".*/(([^/]*?)(?:\\.([^.]*))?)", 1) + } + + /** + * Gets the extension of this container, that is, the suffix of its base name + * after the last dot character, if any. + * + * In particular, + * + * - if the name does not include a dot, there is no extension, so this + * predicate has no result; + * - if the name ends in a dot, the extension is the empty string; + * - if the name contains multiple dots, the extension follows the last dot. + * + * Here are some examples of absolute paths and the corresponding extensions + * (surrounded with quotes to avoid ambiguity): + * + * + * + * + * + * + * + * + *
    Absolute pathExtension
    "/tmp/tst.go""go"
    "/tmp/.classpath""classpath"
    "/bin/bash"not defined
    "/tmp/tst2."""
    "/tmp/x.tar.gz""gz"
    + */ + string getExtension() { + result = this.getAbsolutePath().regexpCapture(".*/([^/]*?)(\\.([^.]*))?", 3) + } + + /** + * Gets the stem of this container, that is, the prefix of its base name up to + * (but not including) the last dot character if there is one, or the entire + * base name if there is not. + * + * Here are some examples of absolute paths and the corresponding stems + * (surrounded with quotes to avoid ambiguity): + * + * + * + * + * + * + * + * + *
    Absolute pathStem
    "/tmp/tst.go""tst"
    "/tmp/.classpath"""
    "/bin/bash""bash"
    "/tmp/tst2.""tst2"
    "/tmp/x.tar.gz""x.tar"
    + */ + string getStem() { + result = this.getAbsolutePath().regexpCapture(".*/([^/]*?)(?:\\.([^.]*))?", 1) + } + + /** Gets the parent container of this file or folder, if any. */ + Container getParentContainer() { containerparent(result, this) } + + /** Gets a file or sub-folder in this container. */ + Container getAChildContainer() { this = result.getParentContainer() } + + /** Gets a file in this container. */ + File getAFile() { result = this.getAChildContainer() } + + /** Gets the file in this container that has the given `baseName`, if any. */ + File getFile(string baseName) { + result = this.getAFile() and + result.getBaseName() = baseName + } + + /** Gets a sub-folder in this container. */ + Folder getAFolder() { result = this.getAChildContainer() } + + /** Gets the sub-folder in this container that has the given `baseName`, if any. */ + Folder getFolder(string baseName) { + result = this.getAFolder() and + result.getBaseName() = baseName + } + + /** + * Gets a textual representation of the path of this container. + * + * This is the absolute path of the container. + */ + string toString() { result = this.getAbsolutePath() } +} + +/** A folder. */ +class Folder extends Container, @folder { + override string getAbsolutePath() { folders(this, result) } + + /** Gets the file or subfolder in this folder that has the given `name`, if any. */ + Container getChildContainer(string name) { + result = this.getAChildContainer() and + result.getBaseName() = name + } + + /** Gets the file in this folder that has the given `stem` and `extension`, if any. */ + File getFile(string stem, string extension) { + result = this.getAChildContainer() and + result.getStem() = stem and + result.getExtension() = extension + } + + /** Gets a subfolder contained in this folder. */ + Folder getASubFolder() { result = this.getAChildContainer() } + + /** Gets the URL of this folder. */ + override string getURL() { result = "folder://" + this.getAbsolutePath() } +} + +/** Any file, including files that have not been extracted but are referred to as locations for errors. */ +class ExtractedOrExternalFile extends Container, @file, Documentable, ExprParent, GoModExprParent, + DeclParent, ScopeNode { + override Location getLocation() { has_location(this, result) } + + override string getAbsolutePath() { files(this, result) } + + /** Gets the number of lines in this file. */ + int getNumberOfLines() { numlines(this, result, _, _) } + + /** Gets the number of lines containing code in this file. */ + int getNumberOfLinesOfCode() { numlines(this, _, result, _) } + + /** Gets the number of lines containing comments in this file. */ + int getNumberOfLinesOfComments() { numlines(this, _, _, result) } + + /** Gets the package name as specified in the package clause of this file. */ + Ident getPackageNameExpr() { result = this.getChildExpr(0) } + + /** Gets the name of the package to which this file belongs. */ + string getPackageName() { result = this.getPackageNameExpr().getName() } + + /** Holds if this file contains at least one build constraint. */ + pragma[noinline] + predicate hasBuildConstraints() { exists(BuildConstraintComment bc | this = bc.getFile()) } + + /** + * Holds if this file contains build constraints that ensure that it + * is only built on architectures of bit size `bitSize`, which can be + * 32 or 64. + */ + predicate constrainsIntBitSize(int bitSize) { + this.explicitlyConstrainsIntBitSize(bitSize) or + this.implicitlyConstrainsIntBitSize(bitSize) + } + + /** + * Holds if this file contains explicit build constraints that ensure + * that it is only built on an architecture of bit size `bitSize`, + * which can be 32 or 64. + */ + predicate explicitlyConstrainsIntBitSize(int bitSize) { + exists(BuildConstraintComment bcc | this = bcc.getFile() | + forex(string disjunct | disjunct = bcc.getADisjunct() | + disjunct.splitAt(",").(Architecture).getBitSize() = bitSize + or + disjunct.splitAt("/").(Architecture).getBitSize() = bitSize + ) + ) + } + + /** + * Holds if this file has a name which acts as an implicit build + * constraint that ensures that it is only built on an + * architecture of bit size `bitSize`, which can be 32 or 64. + */ + predicate implicitlyConstrainsIntBitSize(int bitSize) { + exists(Architecture arch | arch.getBitSize() = bitSize | + this.getStem().regexpMatch("(?i).*_\\Q" + arch + "\\E(_test)?") + ) + } + + override string toString() { result = Container.super.toString() } + + /** Gets the URL of this file. */ + override string getURL() { result = "file://" + this.getAbsolutePath() + ":0:0:0:0" } + + /** Gets the `i`th child comment group. */ + CommentGroup getCommentGroup(int i) { comment_groups(result, this, i) } + + /** Gets a child comment group. */ + CommentGroup getACommentGroup() { result = this.getCommentGroup(_) } + + /** Gets the number of child comment groups of this file. */ + int getNumCommentGroups() { result = count(this.getACommentGroup()) } + + override string getAPrimaryQlClass() { result = "ExtractedOrExternalFile" } +} + +/** A file that has been extracted. */ +class File extends ExtractedOrExternalFile { + File() { + // getAChild is specifically for the Go AST and so does not apply to non-go files + // we care about all non-go extracted files, as only go files can have `@file` entries due to requiring a file entry for diagnostic errors + not this.getExtension() = "go" + or + exists(this.getAChild()) + } + + override string getAPrimaryQlClass() { result = "File" } +} + +/** A Go file. */ +class GoFile extends File { + GoFile() { this.getExtension() = "go" } + + override string getAPrimaryQlClass() { result = "GoFile" } +} + +/** An HTML file. */ +class HtmlFile extends File { + HtmlFile() { this.getExtension().regexpMatch("x?html?") } + + override string getAPrimaryQlClass() { result = "HtmlFile" } +} diff --git a/go/ql/lib/semmle/go/GoMod.qll b/go/ql/lib/semmle/go/GoMod.qll new file mode 100644 index 00000000000..119339c18eb --- /dev/null +++ b/go/ql/lib/semmle/go/GoMod.qll @@ -0,0 +1,231 @@ +/** + * Provides classes for working with go.mod files. + */ + +import go + +/** A go.mod file. */ +class GoModFile extends File { + GoModFile() { this.getBaseName() = "go.mod" } + + /** + * Gets the module declaration of this file, that is, the line declaring the path of this module. + */ + GoModModuleLine getModuleDeclaration() { result.getFile() = this } + + override string getAPrimaryQlClass() { result = "GoModFile" } +} + +/** + * An expression in a go.mod file, which is used to declare dependencies. + */ +class GoModExpr extends @modexpr, GoModExprParent { + /** + * Gets the kind of this expression, which is an integer value representing the expression's + * node type. + * + * Note that the mapping from node types to integer kinds is considered an implementation detail + * and subject to change without notice. + */ + int getKind() { modexprs(this, result, _, _) } + + /** + * Get the comment group associated with this expression. + */ + DocComment getComments() { result.getDocumentedElement() = this } + + override GoModFile getFile() { result = GoModExprParent.super.getFile() } + + /** Gets path of the module of this go.mod expression. */ + string getModulePath() { result = this.getFile().getModuleDeclaration().getPath() } + + override string toString() { result = "go.mod expression" } + + override string getAPrimaryQlClass() { result = "GoModExpr" } +} + +/** + * A top-level block of comments separate from any rule. + */ +class GoModCommentBlock extends @modcommentblock, GoModExpr { + override string getAPrimaryQlClass() { result = "GoModCommentBlock" } +} + +/** + * A single line of tokens. + */ +class GoModLine extends @modline, GoModExpr { + /** + * Gets the `i`th token on this line, 0-based. + * + * Generally, one should use `getToken`, as that accounts for lines inside of line blocks. + */ + string getRawToken(int i) { modtokens(result, this, i) } + + /** + * Gets the `i`th token of `line`, including the token in the line block declaration, if it there is + * one, 0-based. + * + * This compensates for the fact that lines in line blocks have their 0th token in the line block + * declaration, and makes dealing with lines more uniform. + * + * For example, `.getToken(1)` will result in the dependency path (`github.com/github/codeql-go`) + * for both lines for normal require lines like `require "github.com/github/codeql-go" v1.2.3` and + * in a line block like + * + * ``` + * require ( + * "github.com/github/codeql-go" v1.2.3 + * ... + * ) + * ``` + * + * As a special case, when `i` is `0` and the line is in a line block, the result will be the + * token from the line block. + */ + string getToken(int i) { + i = 0 and result = this.getParent().(GoModLineBlock).getRawToken(0) + or + if this.getParent() instanceof GoModLineBlock + then result = this.getRawToken(i - 1) + else result = this.getRawToken(i) + } + + override string toString() { result = "go.mod line" } + + override string getAPrimaryQlClass() { result = "GoModLine" } +} + +/** + * A factored block of lines, for example: + * ``` + * require ( + * "github.com/github/codeql-go" v1.2.3 + * "golang.org/x/tools" v3.2.1 + * ) + * ``` + */ +class GoModLineBlock extends @modlineblock, GoModExpr { + /** + * Gets the `i`th token of this line block, 0-based. + * + * Usually one should not have to use this, as `GoModLine.getToken(0)` will get the token from its + * parent line block, if any. + */ + string getRawToken(int i) { modtokens(result, this, i) } + + override string toString() { result = "go.mod line block" } + + override string getAPrimaryQlClass() { result = "GoModLineBlock" } +} + +/** + * A line that contains the module's package path, for example `module github.com/github/codeql-go`. + */ +class GoModModuleLine extends GoModLine { + GoModModuleLine() { this.getToken(0) = "module" } + + /** + * Get the path of the module being declared. + */ + string getPath() { result = this.getToken(1) } + + override string toString() { result = "go.mod module line" } + + override string getAPrimaryQlClass() { result = "GoModModuleLine" } +} + +/** + * A line that declares the Go version to be used, for example `go 1.14`. + */ +class GoModGoLine extends GoModLine { + GoModGoLine() { this.getToken(0) = "go" } + + /** Gets the Go version declared. */ + string getVersion() { result = this.getToken(1) } + + override string toString() { result = "go.mod go line" } + + override string getAPrimaryQlClass() { result = "GoModGoLine" } +} + +/** + * A line that declares a requirement, for example `require "github.com/github/codeql-go" v1.2.3`. + */ +class GoModRequireLine extends GoModLine { + GoModRequireLine() { this.getToken(0) = "require" } + + /** Gets the path of the dependency. */ + string getPath() { result = this.getToken(1) } + + /** Gets the version of the dependency. */ + string getVersion() { result = this.getToken(2) } + + override string toString() { result = "go.mod require line" } + + override string getAPrimaryQlClass() { result = "GoModRequireLine" } +} + +/** + * A line that declares a dependency version to exclude, for example + * `exclude "github.com/github/codeql-go" v1.2.3`. + */ +class GoModExcludeLine extends GoModLine { + GoModExcludeLine() { this.getToken(0) = "exclude" } + + /** Gets the path of the dependency to exclude a version of. */ + string getPath() { result = this.getToken(1) } + + /** Gets the excluded version. */ + string getVersion() { result = this.getToken(2) } + + override string toString() { result = "go.mod exclude line" } + + override string getAPrimaryQlClass() { result = "GoModExcludeLine" } +} + +/** + * A line that specifies a dependency to use instead of another one, for example + * `replace "golang.org/x/tools" => "github.com/golang/tools" v1.2.3`. + */ +class GoModReplaceLine extends GoModLine { + GoModReplaceLine() { this.getToken(0) = "replace" } + + /** Gets the path of the dependency to be replaced. */ + string getOriginalPath() { result = this.getToken(1) } + + /** Gets the path of the dependency to be replaced, if any. */ + string getOriginalVersion() { result = this.getToken(2) and not result = "=>" } + + /** Gets the path of the replacement dependency. */ + string getReplacementPath() { + if exists(this.getOriginalVersion()) + then result = this.getToken(4) + else result = this.getToken(3) + } + + /** Gets the version of the replacement dependency. */ + string getReplacementVersion() { + if exists(this.getOriginalVersion()) + then result = this.getToken(5) + else result = this.getToken(4) + } + + override string toString() { result = "go.mod replace line" } + + override string getAPrimaryQlClass() { result = "GoModReplaceLine" } +} + +/** A left parenthesis for a line block. */ +class GoModLParen extends @modlparen, GoModExpr { + override string toString() { result = "go.mod (" } + + override string getAPrimaryQlClass() { result = "GoModLParen" } +} + +/** A right parenthesis for a line block. */ +class GoModRParen extends @modrparen, GoModExpr { + override string toString() { result = "go.mod )" } + + override string getAPrimaryQlClass() { result = "GoModRParen" } +} diff --git a/go/ql/lib/semmle/go/HTML.qll b/go/ql/lib/semmle/go/HTML.qll new file mode 100644 index 00000000000..f4fb773ca8e --- /dev/null +++ b/go/ql/lib/semmle/go/HTML.qll @@ -0,0 +1,207 @@ +/** Provides classes for working with HTML documents. */ + +import go + +module HTML { + /** + * An HTML element. + * + * Example: + * + * ``` + * Semmle + * ``` + */ + class Element extends Locatable, @xmlelement { + Element() { exists(HtmlFile f | xmlElements(this, _, _, _, f)) } + + override Location getLocation() { xmllocations(this, result) } + + /** + * Gets the name of this HTML element. + * + * For example, the name of `
    ` is `br`. + */ + string getName() { xmlElements(this, result, _, _, _) } + + /** + * Gets the parent element of this element, if any. + */ + Element getParent() { xmlElements(this, _, result, _, _) } + + /** + * Holds if this is a toplevel element, that is, if it does not have a parent element. + */ + predicate isTopLevel() { not exists(getParent()) } + + /** + * Gets the root HTML document element in which this element is contained. + */ + DocumentElement getDocument() { result = getRoot() } + + /** + * Gets the root element in which this element is contained. + */ + Element getRoot() { if isTopLevel() then result = this else result = getParent().getRoot() } + + /** + * Gets the `i`th child element (0-based) of this element. + */ + Element getChild(int i) { xmlElements(result, _, this, i, _) } + + /** + * Gets a child element of this element. + */ + Element getChild() { result = getChild(_) } + + /** + * Gets the `i`th attribute (0-based) of this element. + */ + Attribute getAttribute(int i) { xmlAttrs(result, this, _, _, i, _) } + + /** + * Gets an attribute of this element. + */ + Attribute getAnAttribute() { result = getAttribute(_) } + + /** + * Gets an attribute of this element that has the given name. + */ + Attribute getAttributeByName(string name) { + result = getAnAttribute() and + result.getName() = name + } + + /** + * Gets the text node associated with this element. + */ + TextNode getTextNode() { result.getParent() = this } + + override string toString() { result = "<" + getName() + ">..." } + } + + /** + * An attribute of an HTML element. + * + * Examples: + * + * ``` + * + * target=_blank + * >Semmle + * ``` + */ + class Attribute extends Locatable, @xmlattribute { + Attribute() { xmlAttrs(this, _, _, _, _, any(HtmlFile f)) } + + override Location getLocation() { xmllocations(this, result) } + + /** + * Gets the element to which this attribute belongs. + */ + Element getElement() { xmlAttrs(this, result, _, _, _, _) } + + /** + * Gets the root element in which the element to which this attribute + * belongs is contained. + */ + Element getRoot() { result = getElement().getRoot() } + + /** + * Gets the name of this attribute. + */ + string getName() { xmlAttrs(this, _, result, _, _, _) } + + /** + * Gets the value of this attribute. + * + * For attributes without an explicitly specified value, the + * result is the empty string. + */ + string getValue() { xmlAttrs(this, _, _, result, _, _) } + + override string toString() { result = getName() + "=" + getValue() } + } + + /** + * An HTML `` element. + * + * Example: + * + * ``` + * + * + * This is a test. + * + * + * ``` + */ + class DocumentElement extends Element { + DocumentElement() { getName() = "html" } + } + + /** + * An HTML text node. + * + * Example: + * + * ``` + *
    + * This text is represented as a text node. + *
    + * ``` + */ + class TextNode extends Locatable, @xmlcharacters { + TextNode() { exists(HtmlFile f | xmlChars(this, _, _, _, _, f)) } + + override string toString() { result = getText() } + + /** + * Gets the content of this text node. + * + * Note that entity expansion has been performed already. + */ + string getText() { xmlChars(this, result, _, _, _, _) } + + /** + * Gets the parent this text. + */ + Element getParent() { xmlChars(this, _, result, _, _, _) } + + /** + * Gets the child index number of this text node. + */ + int getIndex() { xmlChars(this, _, _, result, _, _) } + + /** + * Holds if this text node is inside a `CDATA` tag. + */ + predicate isCData() { xmlChars(this, _, _, _, 1, _) } + + override Location getLocation() { xmllocations(this, result) } + } + + /** + * An HTML comment. + * + * Example: + * + * ``` + * + * ``` + */ + class CommentNode extends Locatable, @xmlcomment { + CommentNode() { exists(HtmlFile f | xmlComments(this, _, _, f)) } + + /** Gets the element in which this comment occurs. */ + Element getParent() { xmlComments(this, _, result, _) } + + /** Gets the text of this comment, not including delimiters. */ + string getText() { result = toString().regexpCapture("(?s)", 1) } + + override string toString() { xmlComments(this, result, _, _) } + + override Location getLocation() { xmllocations(this, result) } + } +} diff --git a/go/ql/lib/semmle/go/Locations.qll b/go/ql/lib/semmle/go/Locations.qll new file mode 100644 index 00000000000..4fb69be21c1 --- /dev/null +++ b/go/ql/lib/semmle/go/Locations.qll @@ -0,0 +1,81 @@ +/** Provides classes for working with locations and program elements that have locations. */ + +import go + +/** + * 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 [LGTM locations](https://lgtm.com/help/ql/locations). + */ +class Location extends @location { + /** Gets the file for this location. */ + File getFile() { locations_default(this, result, _, _, _, _) } + + /** Gets the 1-based line number (inclusive) where this location starts. */ + int getStartLine() { locations_default(this, _, result, _, _, _) } + + /** Gets the 1-based column number (inclusive) where this location starts. */ + int getStartColumn() { locations_default(this, _, _, result, _, _) } + + /** Gets the 1-based line number (inclusive) where this location ends. */ + int getEndLine() { locations_default(this, _, _, _, result, _) } + + /** Gets the 1-based column number (inclusive) where this location ends. */ + int getEndColumn() { locations_default(this, _, _, _, _, result) } + + /** Gets the number of lines covered by this location. */ + int getNumLines() { result = getEndLine() - getStartLine() + 1 } + + /** Gets a textual representation of this element. */ + string toString() { + exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | + hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and + result = filepath + "@" + startline + ":" + startcolumn + ":" + endline + ":" + endcolumn + ) + } + + /** + * 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 + * [LGTM locations](https://lgtm.com/help/ql/locations). + */ + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + exists(File f | + locations_default(this, f, startline, startcolumn, endline, endcolumn) and + filepath = f.getAbsolutePath() + ) + } +} + +/** A program element with a location. */ +class Locatable extends @locatable { + /** Gets the file this program element comes from. */ + File getFile() { result = getLocation().getFile() } + + /** Gets this element's location. */ + Location getLocation() { has_location(this, result) } + + /** Gets the number of lines covered by this element. */ + int getNumLines() { result = getLocation().getNumLines() } + + /** + * 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 + * [LGTM locations](https://lgtm.com/help/ql/locations). + */ + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + + /** Gets a textual representation of this element. */ + string toString() { result = "locatable element" } +} diff --git a/go/ql/lib/semmle/go/Packages.qll b/go/ql/lib/semmle/go/Packages.qll new file mode 100644 index 00000000000..bc51911da27 --- /dev/null +++ b/go/ql/lib/semmle/go/Packages.qll @@ -0,0 +1,41 @@ +/** + * Provides classes for working with packages. + */ + +import go + +/** + * A package. + */ +class Package extends @package { + /** Gets the name of this package. */ + string getName() { packages(this, result, _, _) } + + /** Gets the path of this package. */ + string getPath() { + exists(string fullPath | packages(this, _, fullPath, _) | + result = fullPath.regexpReplaceAll("^.*/vendor/", "") + ) + } + + /** Gets the scope of this package. */ + PackageScope getScope() { packages(this, _, _, result) } + + /** Gets a textual representation of this element. */ + string toString() { result = "package " + getPath() } +} + +/** + * Gets an import path that identifies a package in module `mod` with the given path, + * possibly modulo [semantic import versioning](https://github.com/golang/go/wiki/Modules#semantic-import-versioning). + * + * For example, `package("github.com/go-pg/pg", "types")` gets an import path that can + * refer to `"github.com/go-pg/pg/types"`, but also to `"github.com/go-pg/pg/v10/types"`. + */ +bindingset[mod, path] +string package(string mod, string path) { + // "\Q" and "\E" start and end a quoted section of a regular expression. Anything like "." or "*" that + // "*" that comes between them is not interpreted as it would normally be in a regular expression. + result.regexpMatch("\\Q" + mod + "\\E([/.]v[^/]+)?($|/)\\Q" + path + "\\E") and + result = any(Package p).getPath() +} diff --git a/go/ql/lib/semmle/go/PrintAst.ql b/go/ql/lib/semmle/go/PrintAst.ql new file mode 100644 index 00000000000..23b6b123b06 --- /dev/null +++ b/go/ql/lib/semmle/go/PrintAst.ql @@ -0,0 +1,20 @@ +/** + * @name Print AST + * @description Outputs a representation of the Abstract Syntax Tree. + * @id go/print-ast + * @kind graph + */ + +import go +import PrintAst + +/** + * Hook to customize the functions printed by this query. + */ +class Cfg extends PrintAstConfiguration { + override predicate shouldPrintFunction(FuncDecl func) { any() } + + override predicate shouldPrintFile(File file) { any() } + + override predicate shouldPrintComments(File file) { any() } +} diff --git a/go/ql/lib/semmle/go/PrintAst.qll b/go/ql/lib/semmle/go/PrintAst.qll new file mode 100644 index 00000000000..cf28be44f49 --- /dev/null +++ b/go/ql/lib/semmle/go/PrintAst.qll @@ -0,0 +1,271 @@ +/** + * Provides queries to pretty-print a Go AST as a graph. + */ + +import go + +/** + * Hook to customize the files and functions printed by this module. + * + * For an AstNode to be printed, it always requires `shouldPrintFile(f)` to hold + * for its containing file `f`, and additionally requires `shouldPrintFunction(fun)` + * to hold if it is, or is a child of, function `fun`. + */ +class PrintAstConfiguration extends string { + /** + * Restrict to a single string, making this a singleton type. + */ + PrintAstConfiguration() { this = "PrintAstConfiguration" } + + /** + * Holds if the AST for `func` should be printed. By default, holds for all + * functions. + */ + predicate shouldPrintFunction(FuncDecl func) { any() } + + /** + * Holds if the AST for `file` should be printed. By default, holds for all + * files. + */ + predicate shouldPrintFile(File file) { any() } + + /** + * Holds if the AST for `file` should include comments. By default, holds for all + * files. + */ + predicate shouldPrintComments(File file) { any() } +} + +private predicate shouldPrintFunction(FuncDef func) { + exists(PrintAstConfiguration config | config.shouldPrintFunction(func)) +} + +private predicate shouldPrintFile(File file) { + exists(PrintAstConfiguration config | config.shouldPrintFile(file)) +} + +private predicate shouldPrintComments(File file) { + exists(PrintAstConfiguration config | config.shouldPrintComments(file)) +} + +private FuncDecl getEnclosingFunctionDecl(AstNode n) { result = n.getParent*() } + +/** + * An AST node that should be printed. + */ +private newtype TPrintAstNode = + TAstNode(AstNode ast) { + shouldPrintFile(ast.getFile()) and + // Do print ast nodes without an enclosing function, e.g. file headers, that are not otherwise excluded + forall(FuncDecl f | f = getEnclosingFunctionDecl(ast) | shouldPrintFunction(f)) and + ( + shouldPrintComments(ast.getFile()) + or + not ast instanceof Comment and not ast instanceof CommentGroup + ) + } + +/** + * A node in the output tree. + */ +class PrintAstNode extends TPrintAstNode { + /** + * Gets a textual representation of this node. + */ + abstract string toString(); + + /** + * Gets the child node at index `childIndex`. Child indices must be unique, + * but need not be contiguous. + */ + abstract PrintAstNode getChild(int childIndex); + + /** + * Holds if this node should be printed in the output. By default, all nodes + * within a function are printed, but the query can override + * `PrintAstConfiguration.shouldPrintFunction` to filter the output. + */ + predicate shouldPrint() { exists(getLocation()) } + + /** + * Gets a child of this node. + */ + PrintAstNode getAChild() { result = getChild(_) } + + /** + * Gets the location of this node in the source code. + */ + abstract Location getLocation(); + + /** + * Gets the value of the property of this node, where the name of the property + * is `key`. + */ + string getProperty(string key) { + key = "semmle.label" and + result = toString() + } + + /** + * Gets the label for the edge from this node to the specified child. By + * default, this is just the index of the child, but subclasses can override + * this. + */ + string getChildEdgeLabel(int childIndex) { + exists(getChild(childIndex)) and + result = childIndex.toString() + } + + /** + * Gets the `FuncDef` that contains this node. + */ + abstract FuncDef getEnclosingFunction(); +} + +/** + * Gets a pretty-printed representation of the QL class(es) for entity `el`. + */ +private string qlClass(AstNode el) { + // This version shows all non-overridden QL classes: + // result = "[" + concat(el.getAQlClass(), ", ") + "] " + // Normally we prefer to show just the canonical class: + result = "[" + concat(el.getAPrimaryQlClass(), ", ") + "] " +} + +/** + * A graph node representing a real AST node. + */ +class BaseAstNode extends PrintAstNode, TAstNode { + AstNode ast; + + BaseAstNode() { this = TAstNode(ast) } + + override BaseAstNode getChild(int childIndex) { + // Note a node can have several results for getChild(n) because some + // nodes have multiple different types of child (e.g. a File has a + // child expression, the package name, and child declarations whose + // indices may clash), so we renumber them: + result = TAstNode(ast.getUniquelyNumberedChild(childIndex)) + } + + override string toString() { result = qlClass(ast) + ast } + + final override Location getLocation() { result = ast.getLocation() } + + final override FuncDef getEnclosingFunction() { + result = ast or result = ast.getEnclosingFunction() + } +} + +/** + * A node representing an `Expr`. + */ +class ExprNode extends BaseAstNode { + override Expr ast; + + override string getProperty(string key) { + result = super.getProperty(key) + or + key = "Value" and + result = qlClass(ast) + ast.getExactValue() + or + key = "Type" and + not ast.getType() instanceof InvalidType and + result = ast.getType().pp() + } +} + +/** + * A node representing a `File` + */ +class FileNode extends BaseAstNode { + override File ast; + + private string getRelativePath() { result = ast.getRelativePath() } + + private int getSortOrder() { + rank[result](FileNode fn | any() | fn order by fn.getRelativePath()) = this + } + + override string getProperty(string key) { + result = super.getProperty(key) + or + key = "semmle.order" and + result = getSortOrder().toString() + } + + /** + * Gets a child of this node, renumbering `packageNode`, our parent's + * `oldPackageIndex`th child, as the first child and moving others accordingly. + */ + private BaseAstNode getChildPackageFirst( + int childIndex, BaseAstNode packageNode, int oldPackageIndex + ) { + super.getChild(oldPackageIndex) = packageNode and + ( + childIndex = 0 and result = packageNode + or + result = + rank[childIndex](BaseAstNode node, int i | + node = super.getChild(i) and i != oldPackageIndex + | + node order by i + ) + ) + } + + /** + * Gets a child of this node, moving the package-name expression to the front + * of the list if one exists. + */ + override BaseAstNode getChild(int childIndex) { + if exists(ast.getPackageNameExpr()) + then result = getChildPackageFirst(childIndex, TAstNode(ast.getPackageNameExpr()), _) + else result = super.getChild(childIndex) + } + + /** + * Gets the label for the edge from this node to the specified child. The package name + * expression is named 'package'; others are numbered as per our parent's implementation + * of this method. + */ + override string getChildEdgeLabel(int childIndex) { + if getChild(childIndex) = TAstNode(ast.getPackageNameExpr()) + then result = "package" + else result = super.getChildEdgeLabel(childIndex) + } + + /** + * Gets the string representation of this File. Note explicitly using a relative path + * like this rather than absolute as per default for the File class is a workaround for + * a bug with codeql run test, which should replace absolute paths but currently does not. + */ + override string toString() { result = qlClass(ast) + ast.getRelativePath() } +} + +/** Holds if `node` belongs to the output tree, and its property `key` has the given `value`. */ +query predicate nodes(PrintAstNode node, string key, string value) { + node.shouldPrint() and + value = node.getProperty(key) +} + +/** + * Holds if `target` is a child of `source` in the AST, and property `key` of the edge has the + * given `value`. + */ +query predicate edges(PrintAstNode source, PrintAstNode target, string key, string value) { + exists(int childIndex | + source.shouldPrint() and + target.shouldPrint() and + target = source.getChild(childIndex) + | + key = "semmle.label" and value = source.getChildEdgeLabel(childIndex) + or + key = "semmle.order" and value = childIndex.toString() + ) +} + +/** Holds if property `key` of the graph has the given `value`. */ +query predicate graphProperties(string key, string value) { + key = "semmle.graphKind" and value = "tree" +} diff --git a/go/ql/lib/semmle/go/Scopes.qll b/go/ql/lib/semmle/go/Scopes.qll new file mode 100644 index 00000000000..02ead4b9468 --- /dev/null +++ b/go/ql/lib/semmle/go/Scopes.qll @@ -0,0 +1,818 @@ +/** + * Provides classes for working with scopes and declared objects. + */ + +import go + +/** + * A scope. + */ +class Scope extends @scope { + /** Gets the enclosing scope of this scope, if any. */ + Scope getOuterScope() { scopenesting(this, result) } + + /** Gets a scope nested inside this scope. */ + Scope getAnInnerScope() { this = result.getOuterScope() } + + /** Looks up the entity with the given name in this scope. */ + Entity getEntity(string name) { + result.getName() = name and + result.getScope() = this + } + + /** Gets a textual representation of this scope. */ + string toString() { result = "scope" } +} + +/** Provides helper predicates for working with scopes. */ +module Scope { + /** Gets the universe scope. */ + UniverseScope universe() { any() } +} + +/** + * The universe scope. + */ +class UniverseScope extends @universescope, Scope { + override string toString() { result = "universe scope" } +} + +/** A package scope. */ +class PackageScope extends @packagescope, Scope { + /** Gets the package whose scope this is. */ + Package getPackage() { this = result.getScope() } + + override string toString() { result = "package scope" } +} + +/** A local scope. */ +class LocalScope extends @localscope, Scope, Locatable { + /** Gets the AST node inducing this scope. */ + ScopeNode getNode() { this = result.getScope() } + + /** + * Gets the function scope in which this scope is nested. + * + * For function scopes, this is the scope itself. + */ + FunctionScope getEnclosingFunctionScope() { + result = this.getOuterScope().(LocalScope).getEnclosingFunctionScope() + } + + override string toString() { result = "local scope" } +} + +/** A local scope induced by a file. */ +class FileScope extends LocalScope { + FileScope() { this.getNode() instanceof File } +} + +/** A local scope induced by a function definition. */ +class FunctionScope extends LocalScope { + FuncDef f; + + FunctionScope() { this.getNode() = f.getTypeExpr() } + + /** Gets the function inducing this scope. */ + FuncDef getFunction() { result = f } + + override FunctionScope getEnclosingFunctionScope() { result = this } + + override string toString() { result = "function scope" } +} + +/** + * A declared or built-in entity (that is, package, type, constant, variable, function or label) + */ +class Entity extends @object { + /** + * Gets the name of this entity. + * + * Anonymous entities (such as the receiver variables of interface methods) have the empty string as their name. + */ + string getName() { objects(this, _, result) } + + /** Gets the package in which this entity is declared, if any. */ + Package getPackage() { result.getScope() = this.getScope() } + + /** Holds if this entity is declared in a package with path `pkg` and has the given `name`. */ + predicate hasQualifiedName(string pkg, string name) { + pkg = this.getPackage().getPath() and + name = this.getName() + } + + /** Gets the qualified name of this entity, if any. */ + string getQualifiedName() { + exists(string pkg, string name | this.hasQualifiedName(pkg, name) | result = pkg + "." + name) + } + + /** + * Gets the scope in which this entity is declared, if any. + * + * Entities corresponding to fields and methods do not have a scope. + */ + Scope getScope() { objectscopes(this, result) } + + /** Gets the declaring identifier for this entity. */ + Ident getDeclaration() { result.declares(this) } + + /** Gets a reference to this entity. */ + Name getAReference() { result.getTarget() = this } + + /** Gets the type of this entity. */ + Type getType() { objecttypes(this, result) } + + /** Gets a textual representation of this entity. */ + string toString() { result = this.getName() } + + /** + * 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 + * [LGTM locations](https://lgtm.com/help/ql/locations). + */ + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + // take the location of the declaration if there is one + this.getDeclaration().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + or + // otherwise fall back on dummy location + not exists(this.getDeclaration()) and + filepath = "" and + startline = 0 and + startcolumn = 0 and + endline = 0 and + endcolumn = 0 + } +} + +/** A declared entity (that is, type, constant, variable or function). */ +class DeclaredEntity extends Entity, @declobject { + /** Gets the expression to which this entity is initialized, if any. */ + Expr getInit() { + exists(ValueSpec spec, int i | + spec.getNameExpr(i) = this.getDeclaration() and + spec.getInit(i) = result + ) + } +} + +/** A built-in entity (that is, type, constant or function). */ +class BuiltinEntity extends Entity, @builtinobject { } + +/** An imported package. */ +class PackageEntity extends Entity, @pkgobject { } + +/** A built-in or declared named type. */ +class TypeEntity extends Entity, @typeobject { } + +/** A declared named type. */ +class DeclaredType extends TypeEntity, DeclaredEntity, @decltypeobject { + /** Gets the declaration specifier declaring this type. */ + TypeSpec getSpec() { result.getNameExpr() = this.getDeclaration() } +} + +/** A built-in named type. */ +class BuiltinType extends TypeEntity, BuiltinEntity, @builtintypeobject { } + +/** A built-in or declared constant, variable, field, method or function. */ +class ValueEntity extends Entity, @valueobject { + /** Gets a data-flow node that reads the value of this entity. */ + Read getARead() { result.reads(this) } + + /** Gets a control-flow node that updates the value of this entity. */ + Write getAWrite() { result.writes(this, _) } +} + +/** A built-in or declared constant. */ +class Constant extends ValueEntity, @constobject { } + +/** A declared constant. */ +class DeclaredConstant extends Constant, DeclaredEntity, @declconstobject { + /** Gets the declaration specifier declaring this constant. */ + ValueSpec getSpec() { result.getANameExpr() = this.getDeclaration() } +} + +/** A built-in constant. */ +class BuiltinConstant extends Constant, BuiltinEntity, @builtinconstobject { } + +/** + * A built-in or declared variable. + * + * Note that Go currently does not have any built-in variables, so this class is effectively + * an alias for `DeclaredVariable`. + */ +class Variable extends ValueEntity, @varobject { } + +/** A declared variable. */ +class DeclaredVariable extends Variable, DeclaredEntity, @declvarobject { + /** Gets the declaration specifier declaring this variable. */ + ValueSpec getSpec() { result.getANameExpr() = this.getDeclaration() } +} + +/** A variable declared in a local scope (as opposed to a package scope or the universal scope). */ +class LocalVariable extends DeclaredVariable { + LocalVariable() { this.getScope() instanceof LocalScope } + + /** Gets the innermost function containing the scope of this variable, if any. */ + FuncDef getDeclaringFunction() { + result = this.getScope().(LocalScope).getEnclosingFunctionScope().getFunction() + } + + /** Holds if this variable is referenced inside a nested function. */ + predicate isCaptured() { + this.getDeclaringFunction() != this.getAReference().getEnclosingFunction() + } +} + +/** + * A (named) function parameter. + * + * Note that receiver variables are considered parameters. + */ +class Parameter extends DeclaredVariable { + FuncDef f; + int index; + + Parameter() { + f.(MethodDecl).getReceiverDecl().getNameExpr() = this.getDeclaration() and + index = -1 + or + exists(FuncTypeExpr tp | tp = f.getTypeExpr() | + this = + rank[index + 1](DeclaredVariable parm, int j, int k | + parm.getDeclaration() = tp.getParameterDecl(j).getNameExpr(k) + | + parm order by j, k + ) + ) + } + + /** Gets the function to which this parameter belongs. */ + FuncDef getFunction() { result = f } + + /** + * Gets the index of this parameter among all parameters of the function. + * + * The receiver is considered to have index -1. + */ + int getIndex() { result = index } + + /** Holds if this is the `i`th parameter of function `fd`. */ + predicate isParameterOf(FuncDef fd, int i) { fd = f and i = index } +} + +/** The receiver variable of a method. */ +class ReceiverVariable extends Parameter { + override MethodDecl f; + + ReceiverVariable() { index = -1 } + + /** Holds if this is the receiver variable of method `m`. */ + predicate isReceiverOf(MethodDecl m) { m = f } +} + +/** A (named) function result variable. */ +class ResultVariable extends DeclaredVariable { + FuncDef f; + int index; + + ResultVariable() { + exists(FuncTypeExpr tp | tp = f.getTypeExpr() | + this = + rank[index + 1](DeclaredVariable parm, int j, int k | + parm.getDeclaration() = tp.getResultDecl(j).getNameExpr(k) + | + parm order by j, k + ) + ) + } + + /** Gets the function to which this result variable belongs. */ + FuncDef getFunction() { result = f } + + /** Gets the index of this result among all results of the function. */ + int getIndex() { result = index } + + /** Holds if this is the `i`th result of function `fd`. */ + predicate isResultOf(FuncDef fd, int i) { fd = f and i = index } +} + +/** + * A struct field. + * + * Note that field identity is determined by type identity: if two struct types are identical in + * the sense of the Go language specification (https://golang.org/ref/spec#Type_identity), then + * any of their fields that have the same name are also identical. This, in turn, means that a + * field can have two or more declarations. + * + * For example, consider the following two type declarations: + * + * ```go + * type T1 struct { x int } + * type T2 struct { x int } + * ``` + * + * Types `T1` and `T2` are different, but their underlying struct types are identical. Hence + * the two declarations of `x` refer to the same field. + */ +class Field extends Variable { + StructType declaringType; + + Field() { fieldstructs(this, declaringType) } + + /** Gets the struct type declaring this field. */ + StructType getDeclaringType() { result = declaringType } + + override Package getPackage() { + exists(Type tp | tp.getUnderlyingType() = declaringType | result = tp.getPackage()) + } + + /** + * Holds if this field has name `f` and it belongs to a type with qualified name `tp`. + * + * Note that due to field embedding the same field may have multiple qualified names. + */ + override predicate hasQualifiedName(string tp, string f) { + exists(Type base | + tp = base.getQualifiedName() and + this = base.getField(f) + ) + } + + /** + * Holds if this field has name `f` and it belongs to a type `tp` declared in package `pkg`. + * + * Note that due to field embedding the same field may belong to multiple types. + */ + predicate hasQualifiedName(string pkg, string tp, string f) { + exists(Type base | + base.hasQualifiedName(pkg, tp) and + this = base.getField(f) + ) + } +} + +/** + * A field that belongs to a struct that may be embedded within another struct. + * + * When a selector addresses such a field, it is possible it is implicitly addressing a nested struct. + */ +class PromotedField extends Field { + PromotedField() { this = any(StructType t).getFieldOfEmbedded(_, _, _, _) } +} + +/** A built-in or declared function. */ +class Function extends ValueEntity, @functionobject { + /** + * Gets a call to this function. + * + * This includes calls that target this function indirectly, by calling an + * interface method that this function implements. + */ + pragma[nomagic] + DataFlow::CallNode getACall() { this = result.getACalleeIncludingExternals().asFunction() } + + /** Gets the declaration of this function, if any. */ + FuncDecl getFuncDecl() { none() } + + /** Holds if this function is variadic. */ + predicate isVariadic() { none() } + + /** Holds if this function has no observable side effects. */ + predicate mayHaveSideEffects() { none() } + + /** + * Holds if this function may return without panicking, exiting the process, or looping forever. + * + * This predicate is an over-approximation: it may hold for functions that can never + * return normally, but it never fails to hold for functions that can. + * + * Note this is declared here and not in `DeclaredFunction` so that library models can override this + * by extending `Function` rather than having to remember to extend `DeclaredFunction`. + */ + predicate mayReturnNormally() { + not this.mustPanic() and + (ControlFlow::mayReturnNormally(this.getFuncDecl()) or not exists(this.getBody())) + } + + /** + * Holds if calling this function may cause a runtime panic. + * + * This predicate is an over-approximation: it may hold for functions that can never + * cause a runtime panic, but it never fails to hold for functions that can. + */ + predicate mayPanic() { any() } + + /** + * Holds if calling this function always causes a runtime panic. + * + * This predicate is an over-approximation: it may not hold for functions that do + * cause a runtime panic, but it never holds for functions that do not. + */ + predicate mustPanic() { none() } + + /** Gets the number of parameters of this function. */ + int getNumParameter() { result = this.getType().(SignatureType).getNumParameter() } + + /** Gets the type of the `i`th parameter of this function. */ + Type getParameterType(int i) { result = this.getType().(SignatureType).getParameterType(i) } + + /** Gets the number of results of this function. */ + int getNumResult() { result = this.getType().(SignatureType).getNumResult() } + + /** Gets the type of the `i`th result of this function. */ + Type getResultType(int i) { result = this.getType().(SignatureType).getResultType(i) } + + /** Gets the body of this function, if any. */ + BlockStmt getBody() { result = this.getFuncDecl().getBody() } + + /** Gets the `i`th parameter of this function. */ + Parameter getParameter(int i) { result.isParameterOf(this.getFuncDecl(), i) } + + /** Gets a parameter of this function. */ + Parameter getAParameter() { result = this.getParameter(_) } + + /** Gets the `i`th reslt variable of this function. */ + ResultVariable getResult(int i) { result.isResultOf(this.getFuncDecl(), i) } + + /** Gets a result variable of this function. */ + ResultVariable getAResult() { result = this.getResult(_) } +} + +/** + * A method, that is, a function with a receiver variable, or a function declared in an interface. + * + * Note that method identity is determined by receiver type identity: if two methods have the same + * name and their receiver types are identical in the sense of the Go language specification + * (https://golang.org/ref/spec#Type_identity), then the two methods are identical as well. + */ +class Method extends Function { + Variable receiver; + + Method() { methodreceivers(this, receiver) } + + override Package getPackage() { + // a method doesn't have a scope, so manually associate it with its receiver's + // package. + result = this.getReceiverType().getPackage() + } + + /** Holds if this method is declared in an interface. */ + predicate isInterfaceMethod() { + this.getReceiverType().getUnderlyingType() instanceof InterfaceType + } + + /** Gets the receiver variable of this method. */ + Variable getReceiver() { result = receiver } + + /** Gets the type of the receiver variable of this method. */ + Type getReceiverType() { result = receiver.getType() } + + /** + * Gets the receiver base type of this method, that is, either the base type of the receiver type + * if it is a pointer type, or the receiver type itself if it is not a pointer type. + */ + Type getReceiverBaseType() { + exists(Type recv | recv = this.getReceiverType() | + if recv instanceof PointerType + then result = recv.(PointerType).getBaseType() + else result = recv + ) + } + + /** Holds if this method has name `m` and belongs to the method set of type `tp` or `*tp`. */ + private predicate isIn(NamedType tp, string m) { + this = tp.getMethod(m) or + this = tp.getPointerType().getMethod(m) + } + + /** + * Holds if this method has name `m` and belongs to the method set of a type `T` or `*T` where + * `T` has qualified name `tp`. + * + * Note that `meth.hasQualifiedName(tp, m)` is almost, but not quite, equivalent to + * `exists(Type t | tp = t.getQualifiedName() and meth = t.getMethod(m))`: the latter + * distinguishes between the method sets of `T` and `*T`, while the former does not. + */ + override predicate hasQualifiedName(string tp, string m) { + exists(NamedType t | + this.isIn(t, m) and + tp = t.getQualifiedName() + ) + } + + /** + * Holds if this method has name `m` and belongs to the method set of a type `T` or `*T` where + * `T` is declared in package `pkg` and has name `tp`. + * + * Note that `meth.hasQualifiedName(pkg, tp, m)` is almost, but not quite, equivalent to + * `exists(Type t | t.hasQualifiedName(pkg, tp) and meth = t.getMethod(m))`: the latter + * distinguishes between the method sets of `T` and `*T`, while the former does not. + */ + predicate hasQualifiedName(string pkg, string tp, string m) { + exists(NamedType t | + this.isIn(t, m) and + t.hasQualifiedName(pkg, tp) + ) + } + + /** + * Holds if this method implements the method `m`, that is, if `m` is a method + * on an interface, and this is a method with the same name on a type that + * implements that interface. + * + * Note that all methods implement themselves, and interface methods _only_ + * implement themselves. + */ + predicate implements(Method m) { + this = m + or + not this.isInterfaceMethod() and + exists(Type t | + this = t.getMethod(m.getName()) and + t.implements(m.getReceiverType().getUnderlyingType()) + ) + } + + /** + * Holds if this method implements the method that has qualified name `pkg.tp.name`, that is, if + * `pkg.tp.name` is a method on an interface, and this is a method with the same name on a type + * that implements that interface. + */ + predicate implements(string pkg, string tp, string name) { + exists(Method m | m.hasQualifiedName(pkg, tp, name) | this.implements(m)) + } +} + +/** + * A method whose receiver may be embedded within a struct. + * + * When a selector addresses such a method, it is possible it is implicitly addressing a nested struct. + */ +class PromotedMethod extends Method { + PromotedMethod() { this = any(StructType t).getMethodOfEmbedded(_, _, _) } +} + +/** A declared function. */ +class DeclaredFunction extends Function, DeclaredEntity, @declfunctionobject { + override FuncDecl getFuncDecl() { result.getNameExpr() = this.getDeclaration() } + + override predicate mayHaveSideEffects() { + not exists(this.getBody()) + or + exists(BlockStmt body | body = this.getBody() | + body.mayHaveSideEffects() + or + // functions declared in files with build constraints may be defined differently + // for different platforms, so allow them to avoid false positives + body.getFile().hasBuildConstraints() + ) + } + + override predicate isVariadic() { this.getType().(SignatureType).isVariadic() } +} + +/** A built-in function. */ +class BuiltinFunction extends Function, BuiltinEntity, @builtinfunctionobject { + override predicate mayHaveSideEffects() { builtinFunction(this.getName(), false, _, _, _) } + + override predicate mayPanic() { builtinFunction(this.getName(), _, true, _, _) } + + override predicate mustPanic() { builtinFunction(this.getName(), _, _, true, _) } + + override predicate isVariadic() { builtinFunction(this.getName(), _, _, _, true) } + + /** + * Holds if this function is pure, that is, it has no observable side effects and + * no non-determinism. + */ + predicate isPure() { not this.mayHaveSideEffects() } +} + +private newtype TCallable = + TFunctionCallable(Function f) or + TFuncLitCallable(FuncLit l) + +/** + * This is either a `Function` or a `FuncLit`, because of limitations of both + * `Function` and `FuncDef`: + * - `Function` is an entity, and therefore does not include function literals, and + * - `FuncDef` is an AST node, and so is not extracted for functions from external libraries. + */ +class Callable extends TCallable { + /** Gets a textual representation of this callable. */ + string toString() { result = [this.asFunction().toString(), this.asFuncLit().toString()] } + + /** Gets this callable as a function, if it is one. */ + Function asFunction() { this = TFunctionCallable(result) } + + /** Gets this callable as a function literal, if it is one. */ + FuncLit asFuncLit() { this = TFuncLitCallable(result) } + + /** Gets this function's definition, if it exists. */ + FuncDef getFuncDef() { result = [this.asFuncLit().(FuncDef), this.asFunction().getFuncDecl()] } + + /** Gets the type of this callable. */ + SignatureType getType() { + result = this.asFunction().getType() or + result = this.asFuncLit().getType() + } + + /** Gets the name of this callable. */ + string getName() { + result = this.asFunction().getName() or + result = this.asFuncLit().getName() + } + + /** + * Holds if this element is at the specified location. + * The location spans column `sc` of line `sl` to + * column `ec` of line `el` in file `fp`. + * For more information, see + * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html). + */ + predicate hasLocationInfo(string fp, int sl, int sc, int el, int ec) { + this.asFunction().hasLocationInfo(fp, sl, sc, el, ec) or + this.asFuncLit().hasLocationInfo(fp, sl, sc, el, ec) + } +} + +/** A statement label. */ +class Label extends Entity, @labelobject { } + +/** + * Holds if `name` is a built-in function, where + * + * - `pure` is true if the function has no observable side effects, and false otherwise; + * - `mayPanic` is true if calling this function may cause a panic, and false otherwise; + * - `mustPanic` is true if calling this function always causes a panic, and false otherwise; + * - `variadic` is true if this function is variadic, and false otherwise. + * + * Allocating memory is not considered an observable side effect. + */ +private predicate builtinFunction( + string name, boolean pure, boolean mayPanic, boolean mustPanic, boolean variadic +) { + name = "append" and pure = false and mayPanic = false and mustPanic = false and variadic = true + or + name = "cap" and pure = true and mayPanic = false and mustPanic = false and variadic = false + or + name = "close" and pure = false and mayPanic = true and mustPanic = false and variadic = false + or + name = "complex" and pure = true and mayPanic = true and mustPanic = false and variadic = false + or + name = "copy" and pure = false and mayPanic = true and mustPanic = false and variadic = false + or + name = "delete" and pure = false and mayPanic = false and mustPanic = false and variadic = false + or + name = "imag" and pure = true and mayPanic = false and mustPanic = false and variadic = false + or + name = "len" and pure = true and mayPanic = false and mustPanic = false and variadic = false + or + name = "make" and pure = true and mayPanic = true and mustPanic = false and variadic = true + or + name = "new" and pure = true and mayPanic = false and mustPanic = false and variadic = false + or + name = "panic" and pure = false and mayPanic = true and mustPanic = true and variadic = false + or + name = "print" and pure = false and mayPanic = false and mustPanic = false and variadic = true + or + name = "println" and pure = false and mayPanic = false and mustPanic = false and variadic = true + or + name = "real" and pure = true and mayPanic = false and mustPanic = false and variadic = false + or + name = "recover" and pure = false and mayPanic = false and mustPanic = false and variadic = false +} + +/** Provides helper predicates for working with built-in objects from the universe scope. */ +module Builtin { + // built-in types + /** Gets the built-in type `bool`. */ + BuiltinType bool() { result.getName() = "bool" } + + /** Gets the built-in type `byte`. */ + BuiltinType byte() { result.getName() = "byte" } + + /** Gets the built-in type `complex64`. */ + BuiltinType complex64() { result.getName() = "complex64" } + + /** Gets the built-in type `complex128`. */ + BuiltinType complex128() { result.getName() = "complex128" } + + /** Gets the built-in type `error`. */ + BuiltinType error() { result.getName() = "error" } + + /** Gets the built-in type `float32`. */ + BuiltinType float32() { result.getName() = "float32" } + + /** Gets the built-in type `float64`. */ + BuiltinType float64() { result.getName() = "float64" } + + /** Gets the built-in type `int`. */ + BuiltinType int_() { result.getName() = "int" } + + /** Gets the built-in type `int8`. */ + BuiltinType int8() { result.getName() = "int8" } + + /** Gets the built-in type `int16`. */ + BuiltinType int16() { result.getName() = "int16" } + + /** Gets the built-in type `int32`. */ + BuiltinType int32() { result.getName() = "int32" } + + /** Gets the built-in type `int64`. */ + BuiltinType int64() { result.getName() = "int64" } + + /** Gets the built-in type `rune`. */ + BuiltinType rune() { result.getName() = "rune" } + + /** Gets the built-in type `string`. */ + BuiltinType string_() { result.getName() = "string" } + + /** Gets the built-in type `uint`. */ + BuiltinType uint() { result.getName() = "uint" } + + /** Gets the built-in type `uint8`. */ + BuiltinType uint8() { result.getName() = "uint8" } + + /** Gets the built-in type `uint16`. */ + BuiltinType uint16() { result.getName() = "uint16" } + + /** Gets the built-in type `uint32`. */ + BuiltinType uint32() { result.getName() = "uint32" } + + /** Gets the built-in type `uint64`. */ + BuiltinType uint64() { result.getName() = "uint64" } + + /** Gets the built-in type `uintptr`. */ + BuiltinType uintptr() { result.getName() = "uintptr" } + + // built-in constants + /** Gets the built-in constant `true`. */ + BuiltinConstant true_() { result.getName() = "true" } + + /** Gets the built-in constant `false`. */ + BuiltinConstant false_() { result.getName() = "false" } + + /** Gets the built-in constant corresponding to `b`. */ + BuiltinConstant bool(boolean b) { + b = true and result = true_() + or + b = false and result = false_() + } + + /** Gets the built-in constant `iota`. */ + BuiltinConstant iota() { result.getName() = "iota" } + + // built-in zero value + /** Gets the built-in zero-value `nil`. */ + BuiltinConstant nil() { result.getName() = "nil" } + + /** Gets the built-in function `append`. */ + BuiltinFunction append() { result.getName() = "append" } + + /** Gets the built-in function `cap`. */ + BuiltinFunction cap() { result.getName() = "cap" } + + /** Gets the built-in function `close`. */ + BuiltinFunction close() { result.getName() = "close" } + + /** Gets the built-in function `complex`. */ + BuiltinFunction complex() { result.getName() = "complex" } + + /** Gets the built-in function `copy`. */ + BuiltinFunction copy() { result.getName() = "copy" } + + /** Gets the built-in function `delete`. */ + BuiltinFunction delete() { result.getName() = "delete" } + + /** Gets the built-in function `imag`. */ + BuiltinFunction imag() { result.getName() = "imag" } + + /** Gets the built-in function `len`. */ + BuiltinFunction len() { result.getName() = "len" } + + /** Gets the built-in function `make`. */ + BuiltinFunction make() { result.getName() = "make" } + + /** Gets the built-in function `new`. */ + BuiltinFunction new() { result.getName() = "new" } + + /** Gets the built-in function `panic`. */ + BuiltinFunction panic() { result.getName() = "panic" } + + /** Gets the built-in function `print`. */ + BuiltinFunction print() { result.getName() = "print" } + + /** Gets the built-in function `println`. */ + BuiltinFunction println() { result.getName() = "println" } + + /** Gets the built-in function `real`. */ + BuiltinFunction real() { result.getName() = "real" } + + /** Gets the built-in function `recover`. */ + BuiltinFunction recover() { result.getName() = "recover" } +} diff --git a/go/ql/lib/semmle/go/Stmt.qll b/go/ql/lib/semmle/go/Stmt.qll new file mode 100644 index 00000000000..9873bf1db17 --- /dev/null +++ b/go/ql/lib/semmle/go/Stmt.qll @@ -0,0 +1,1135 @@ +/** + * Provides classes for working with statements. + */ + +import go + +/** + * A statement. + * + * Examples: + * + * ```go + * a = 0 + * + * if x := f(); x < y { + * return y - x + * } else { + * return x - y + * } + * ``` + */ +class Stmt extends @stmt, ExprParent, StmtParent { + /** + * Gets the kind of this statement, which is an integer value representing the statement's + * node type. + * + * Note that the mapping from node types to integer kinds is considered an implementation detail + * and subject to change without notice. + */ + int getKind() { stmts(this, result, _, _) } + + /** + * Holds if the execution of this statement may produce observable side effects. + * + * Memory allocation is not considered an observable side effect. + */ + predicate mayHaveSideEffects() { none() } + + /** Gets the first control-flow node in this statement. */ + ControlFlow::Node getFirstControlFlowNode() { result.isFirstNodeOf(this) } +} + +/** + * A bad statement, that is, a statement that could not be parsed. + * + * Examples: + * + * ```go + * go fmt.Println + * defer int + * ``` + */ +class BadStmt extends @badstmt, Stmt { + override string toString() { result = "bad statement" } + + override string getAPrimaryQlClass() { result = "BadStmt" } +} + +/** + * A declaration statement. + * + * Examples: + * + * ```go + * var i int + * const pi = 3.14159 + * type Printer interface{ Print() } + * ``` + */ +class DeclStmt extends @declstmt, Stmt, DeclParent { + /** Gets the declaration in this statement. */ + Decl getDecl() { result = getDecl(0) } + + override predicate mayHaveSideEffects() { getDecl().mayHaveSideEffects() } + + override string toString() { result = "declaration statement" } + + override string getAPrimaryQlClass() { result = "DeclStmt" } +} + +/** + * An empty statement. + * + * Examples: + * + * ```go + * ; + * ``` + */ +class EmptyStmt extends @emptystmt, Stmt { + override string toString() { result = "empty statement" } + + override string getAPrimaryQlClass() { result = "EmptyStmt" } +} + +/** + * A labeled statement. + * + * Examples: + * + * ```go + * Error: log.Panic("error encountered") + * ``` + */ +class LabeledStmt extends @labeledstmt, Stmt { + /** Gets the identifier representing the label. */ + Ident getLabelExpr() { result = getChildExpr(0) } + + /** Gets the label. */ + string getLabel() { result = getLabelExpr().getName() } + + /** Gets the statement that is being labeled. */ + Stmt getStmt() { result = getChildStmt(1) } + + override predicate mayHaveSideEffects() { getStmt().mayHaveSideEffects() } + + override string toString() { result = "labeled statement" } + + override string getAPrimaryQlClass() { result = "LabeledStmt" } +} + +/** + * An expression statement. + * + * Examples: + * + * ```go + * h(x+y) + * f.Close() + * <-ch + * (<-ch) + * ``` + */ +class ExprStmt extends @exprstmt, Stmt { + /** Gets the expression. */ + Expr getExpr() { result = getChildExpr(0) } + + override predicate mayHaveSideEffects() { getExpr().mayHaveSideEffects() } + + override string toString() { result = "expression statement" } + + override string getAPrimaryQlClass() { result = "ExprStmt" } +} + +/** + * A send statement. + * + * Examples: + * + * ```go + * ch <- 3 + * ``` + */ +class SendStmt extends @sendstmt, Stmt { + /** Gets the expression representing the channel. */ + Expr getChannel() { result = getChildExpr(0) } + + /** Gets the expression representing the value being sent. */ + Expr getValue() { result = getChildExpr(1) } + + override predicate mayHaveSideEffects() { any() } + + override string toString() { result = "send statement" } + + override string getAPrimaryQlClass() { result = "SendStmt" } +} + +/** + * An increment or decrement statement. + * + * Examples: + * + * ```go + * a++ + * b-- + * ``` + */ +class IncDecStmt extends @incdecstmt, Stmt { + /** Gets the expression being incremented or decremented. */ + Expr getOperand() { result = getChildExpr(0) } + + /** Gets the increment or decrement operator. */ + string getOperator() { none() } + + override predicate mayHaveSideEffects() { any() } +} + +/** + * An increment statement. + * + * Examples: + * + * ```go + * a++ + * ``` + */ +class IncStmt extends @incstmt, IncDecStmt { + override string getOperator() { result = "++" } + + override string toString() { result = "increment statement" } + + override string getAPrimaryQlClass() { result = "IncStmt" } +} + +/** + * A decrement statement. + * + * Examples: + * + * ```go + * b-- + * ``` + */ +class DecStmt extends @decstmt, IncDecStmt { + override string getOperator() { result = "--" } + + override string toString() { result = "decrement statement" } + + override string getAPrimaryQlClass() { result = "DecStmt" } +} + +/** + * A (simple or compound) assignment statement. + * + * Examples: + * + * ```go + * x := 1 + * *p = f() + * a[i] = 23 + * (k) = <-ch // same as: k = <-ch + * a += 2 + * ``` + */ +class Assignment extends @assignment, Stmt { + /** Gets the `i`th left-hand side of this assignment (0-based). */ + Expr getLhs(int i) { + i >= 0 and + result = getChildExpr(-(i + 1)) + } + + /** Gets a left-hand side of this assignment. */ + Expr getAnLhs() { result = getLhs(_) } + + /** Gets the number of left-hand sides of this assignment. */ + int getNumLhs() { result = count(getAnLhs()) } + + /** Gets the unique left-hand side of this assignment, if there is only one. */ + Expr getLhs() { getNumLhs() = 1 and result = getLhs(0) } + + /** Gets the `i`th right-hand side of this assignment (0-based). */ + Expr getRhs(int i) { + i >= 0 and + result = getChildExpr(i + 1) + } + + /** Gets a right-hand side of this assignment. */ + Expr getAnRhs() { result = getRhs(_) } + + /** Gets the number of right-hand sides of this assignment. */ + int getNumRhs() { result = count(getAnRhs()) } + + /** Gets the unique right-hand side of this assignment, if there is only one. */ + Expr getRhs() { getNumRhs() = 1 and result = getRhs(0) } + + /** Holds if this assignment assigns `rhs` to `lhs`. */ + predicate assigns(Expr lhs, Expr rhs) { exists(int i | lhs = getLhs(i) and rhs = getRhs(i)) } + + /** Gets the assignment operator in this statement. */ + string getOperator() { none() } + + override predicate mayHaveSideEffects() { any() } + + override string toString() { result = "... " + getOperator() + " ..." } +} + +/** + * A simple assignment statement, that is, an assignment without a compound operator. + * + * Examples: + * + * ```go + * x := 1 + * *p = f() + * a[i] = 23 + * (k) = <-ch // same as: k = <-ch + * ``` + */ +class SimpleAssignStmt extends @simpleassignstmt, Assignment { + override string getAPrimaryQlClass() { result = "SimpleAssignStmt" } +} + +/** + * A plain assignment statement. + * + * Examples: + * + * ```go + * *p = f() + * a[i] = 23 + * (k) = <-ch // same as: k = <-ch + * ``` + */ +class AssignStmt extends @assignstmt, SimpleAssignStmt { + override string getOperator() { result = "=" } + + override string getAPrimaryQlClass() { result = "AssignStmt" } +} + +/** + * A define statement. + * + * Examples: + * + * ```go + * x := 1 + * ``` + */ +class DefineStmt extends @definestmt, SimpleAssignStmt { + override string getOperator() { result = ":=" } + + override string getAPrimaryQlClass() { result = "DefineStmt" } +} + +/** + * A compound assignment statement. + * + * Examples: + * + * ```go + * a += 2 + * a /= 2 + * ``` + */ +class CompoundAssignStmt extends @compoundassignstmt, Assignment { } + +/** + * An add-assign statement using `+=`. + * + * Examples: + * + * ```go + * a += 2 + * ``` + */ +class AddAssignStmt extends @addassignstmt, CompoundAssignStmt { + override string getOperator() { result = "+=" } + + override string getAPrimaryQlClass() { result = "AddAssignStmt" } +} + +/** + * A subtract-assign statement using `-=`. + * + * Examples: + * + * ```go + * a -= 2 + * ``` + */ +class SubAssignStmt extends @subassignstmt, CompoundAssignStmt { + override string getOperator() { result = "-=" } + + override string getAPrimaryQlClass() { result = "SubAssignStmt" } +} + +/** + * A multiply-assign statement using `*=`. + * + * Examples: + * + * ```go + * a *= 2 + * ``` + */ +class MulAssignStmt extends @mulassignstmt, CompoundAssignStmt { + override string getOperator() { result = "*=" } + + override string getAPrimaryQlClass() { result = "MulAssignStmt" } +} + +/** + * A divide-assign statement using `/=`. + * + * Examples: + * + * ```go + * a /= 2 + * ``` + */ +class QuoAssignStmt extends @quoassignstmt, CompoundAssignStmt { + override string getOperator() { result = "/=" } + + override string getAPrimaryQlClass() { result = "QuoAssignStmt" } +} + +class DivAssignStmt = QuoAssignStmt; + +/** + * A modulo-assign statement using `%=`. + * + * Examples: + * + * ```go + * a %= 2 + * ``` + */ +class RemAssignStmt extends @remassignstmt, CompoundAssignStmt { + override string getOperator() { result = "%=" } + + override string getAPrimaryQlClass() { result = "RemAssignStmt" } +} + +class ModAssignStmt = RemAssignStmt; + +/** + * An and-assign statement using `&=`. + * + * Examples: + * + * ```go + * a &= 2 + * ``` + */ +class AndAssignStmt extends @andassignstmt, CompoundAssignStmt { + override string getOperator() { result = "&=" } + + override string getAPrimaryQlClass() { result = "AndAssignStmt" } +} + +/** + * An or-assign statement using `|=`. + * + * Examples: + * + * ```go + * a |= 2 + * ``` + */ +class OrAssignStmt extends @orassignstmt, CompoundAssignStmt { + override string getOperator() { result = "|=" } + + override string getAPrimaryQlClass() { result = "OrAssignStmt" } +} + +/** + * An xor-assign statement using `^=`. + * + * Examples: + * + * ```go + * a ^= 2 + * ``` + */ +class XorAssignStmt extends @xorassignstmt, CompoundAssignStmt { + override string getOperator() { result = "^=" } + + override string getAPrimaryQlClass() { result = "XorAssignStmt" } +} + +/** + * A left-shift-assign statement using `<<=`. + * + * Examples: + * + * ```go + * a <<= 2 + * ``` + */ +class ShlAssignStmt extends @shlassignstmt, CompoundAssignStmt { + override string getOperator() { result = "<<=" } + + override string getAPrimaryQlClass() { result = "ShlAssignStmt" } +} + +class LShiftAssignStmt = ShlAssignStmt; + +/** + * A right-shift-assign statement using `>>=`. + * + * Examples: + * + * ```go + * a >>= 2 + * ``` + */ +class ShrAssignStmt extends @shrassignstmt, CompoundAssignStmt { + override string getOperator() { result = ">>=" } + + override string getAPrimaryQlClass() { result = "ShrAssignStmt" } +} + +class RShiftAssignStmt = ShrAssignStmt; + +/** + * An and-not-assign statement using `&^=`. + * + * Examples: + * + * ```go + * a &^= 2 + * ``` + */ +class AndNotAssignStmt extends @andnotassignstmt, CompoundAssignStmt { + override string getOperator() { result = "&^=" } + + override string getAPrimaryQlClass() { result = "AndNotAssignStmt" } +} + +/** + * A `go` statement. + * + * Examples: + * + * ```go + * go fillPixels(row) + * ``` + */ +class GoStmt extends @gostmt, Stmt { + /** Gets the call. */ + CallExpr getCall() { result = getChildExpr(0) } + + override predicate mayHaveSideEffects() { getCall().mayHaveSideEffects() } + + override string toString() { result = "go statement" } + + override string getAPrimaryQlClass() { result = "GoStmt" } +} + +/** + * A `defer` statement. + * + * Examples: + * + * ```go + * defer mutex.Unlock() + * ``` + */ +class DeferStmt extends @deferstmt, Stmt { + /** Gets the call being deferred. */ + CallExpr getCall() { result = getChildExpr(0) } + + override predicate mayHaveSideEffects() { getCall().mayHaveSideEffects() } + + override string toString() { result = "defer statement" } + + override string getAPrimaryQlClass() { result = "DeferStmt" } +} + +/** + * A `return` statement. + * + * Examples: + * + * ```go + * return x + * ``` + */ +class ReturnStmt extends @returnstmt, Stmt { + /** Gets the `i`th returned expression (0-based) */ + Expr getExpr(int i) { result = getChildExpr(i) } + + /** Gets a returned expression. */ + Expr getAnExpr() { result = getExpr(_) } + + /** Gets the number of returned expressions. */ + int getNumExpr() { result = count(getAnExpr()) } + + /** Gets the unique returned expression, if there is only one. */ + Expr getExpr() { getNumChild() = 1 and result = getExpr(0) } + + override predicate mayHaveSideEffects() { getExpr().mayHaveSideEffects() } + + override string toString() { result = "return statement" } + + override string getAPrimaryQlClass() { result = "ReturnStmt" } +} + +/** + * A branch statement, for example a `break` or `goto`. + * + * Examples: + * + * ```go + * break + * break OuterLoop + * continue + * continue RowLoop + * goto Error + * fallthrough + * ``` + */ +class BranchStmt extends @branchstmt, Stmt { + /** Gets the expression denoting the target label of the branch, if any. */ + Ident getLabelExpr() { result = getChildExpr(0) } + + /** Gets the target label of the branch, if any. */ + string getLabel() { result = getLabelExpr().getName() } +} + +/** + * A `break` statement. + * + * Examples: + * + * ```go + * break + * break OuterLoop + * ``` + */ +class BreakStmt extends @breakstmt, BranchStmt { + override string toString() { result = "break statement" } + + override string getAPrimaryQlClass() { result = "BreakStmt" } +} + +/** + * A `continue` statement. + * + * Examples: + * + * ```go + * continue + * continue RowLoop + * ``` + */ +class ContinueStmt extends @continuestmt, BranchStmt { + override string toString() { result = "continue statement" } + + override string getAPrimaryQlClass() { result = "ContinueStmt" } +} + +/** + * A `goto` statement. + * + * Examples: + * + * ```go + * goto Error + * ``` + */ +class GotoStmt extends @gotostmt, BranchStmt { + override string toString() { result = "goto statement" } + + override string getAPrimaryQlClass() { result = "GotoStmt" } +} + +/** + * A `fallthrough` statement. + * + * Examples: + * + * ```go + * fallthrough + * ``` + */ +class FallthroughStmt extends @fallthroughstmt, BranchStmt { + override string toString() { result = "fallthrough statement" } + + override string getAPrimaryQlClass() { result = "FallthroughStmt" } +} + +/** + * A block statement. + * + * Examples: + * + * ```go + * { + * fmt.Printf("iteration %d\n", i) + * f(i) + * } + * ``` + */ +class BlockStmt extends @blockstmt, Stmt, ScopeNode { + /** Gets the `i`th statement in this block (0-based). */ + Stmt getStmt(int i) { result = getChildStmt(i) } + + /** Gets a statement in this block. */ + Stmt getAStmt() { result = getAChildStmt() } + + /** Gets the number of statements in this block. */ + int getNumStmt() { result = getNumChildStmt() } + + override predicate mayHaveSideEffects() { getAStmt().mayHaveSideEffects() } + + override string toString() { result = "block statement" } + + override string getAPrimaryQlClass() { result = "BlockStmt" } +} + +/** + * An `if` statement. + * + * Examples: + * + * ```go + * if x := f(); x < y { + * return y - x + * } else { + * return x - y + * } + * ``` + */ +class IfStmt extends @ifstmt, Stmt, ScopeNode { + /** Gets the init statement of this `if` statement, if any. */ + Stmt getInit() { result = getChildStmt(0) } + + /** Gets the condition of this `if` statement. */ + Expr getCond() { result = getChildExpr(1) } + + /** Gets the "then" branch of this `if` statement. */ + BlockStmt getThen() { result = getChildStmt(2) } + + /** Gets the "else" branch of this `if` statement, if any. */ + Stmt getElse() { result = getChildStmt(3) } + + override predicate mayHaveSideEffects() { + getInit().mayHaveSideEffects() or + getCond().mayHaveSideEffects() or + getThen().mayHaveSideEffects() or + getElse().mayHaveSideEffects() + } + + override string toString() { result = "if statement" } + + override string getAPrimaryQlClass() { result = "IfStmt" } +} + +/** + * A `case` or `default` clause in a `switch` statement. + * + * Examples: + * + * ```go + * case 0, 1: + * a = 1 + * fallthrough + * + * default: + * b = 2 + * + * case func(int) float64: + * printFunction(i) + * ``` + */ +class CaseClause extends @caseclause, Stmt, ScopeNode { + /** Gets the `i`th expression of this `case` clause (0-based). */ + Expr getExpr(int i) { result = getChildExpr(-(i + 1)) } + + /** Gets an expression of this `case` clause. */ + Expr getAnExpr() { result = getAChildExpr() } + + /** Gets the number of expressions of this `case` clause. */ + int getNumExpr() { result = getNumChildExpr() } + + /** Gets the `i`th statement of this `case` clause (0-based). */ + Stmt getStmt(int i) { result = getChildStmt(i) } + + /** Gets a statement of this `case` clause. */ + Stmt getAStmt() { result = getAChildStmt() } + + /** Gets the number of statements of this `case` clause. */ + int getNumStmt() { result = getNumChildStmt() } + + override predicate mayHaveSideEffects() { + getAnExpr().mayHaveSideEffects() or + getAStmt().mayHaveSideEffects() + } + + override string toString() { result = "case clause" } + + override string getAPrimaryQlClass() { result = "CaseClause" } +} + +/** + * A `switch` statement, that is, either an expression switch or a type switch. + * + * Examples: + * + * ```go + * switch x := f(); x { + * case 0, 1: + * a = 1 + * fallthrough + * default: + * b = 2 + * } + * + * switch i := x.(type) { + * default: + * printString("don't know the type") + * case nil: + * printString("x is nil") + * case int: + * printInt(i) + * case func(int) float64: + * printFunction(i) + * } + * ``` + */ +class SwitchStmt extends @switchstmt, Stmt, ScopeNode { + /** Gets the init statement of this `switch` statement, if any. */ + Stmt getInit() { result = getChildStmt(0) } + + /** Gets the body of this `switch` statement. */ + BlockStmt getBody() { result = getChildStmt(2) } + + /** Gets the `i`th case clause of this `switch` statement (0-based). */ + CaseClause getCase(int i) { result = getBody().getStmt(i) } + + /** Gets a case clause of this `switch` statement. */ + CaseClause getACase() { result = getCase(_) } + + /** Gets the number of case clauses in this `switch` statement. */ + int getNumCase() { result = count(getACase()) } + + /** Gets the `i`th non-default case clause of this `switch` statement (0-based). */ + CaseClause getNonDefaultCase(int i) { + result = + rank[i + 1](CaseClause cc, int j | cc = getCase(j) and exists(cc.getExpr(_)) | cc order by j) + } + + /** Gets a non-default case clause of this `switch` statement. */ + CaseClause getANonDefaultCase() { result = getNonDefaultCase(_) } + + /** Gets the number of non-default case clauses in this `switch` statement. */ + int getNumNonDefaultCase() { result = count(getANonDefaultCase()) } + + /** Gets the default case clause of this `switch` statement, if any. */ + CaseClause getDefault() { result = getACase() and not exists(result.getExpr(_)) } +} + +/** + * An expression-switch statement. + * + * Examples: + * + * ```go + * switch x := f(); x { + * case 0, 1: + * a = 1 + * fallthrough + * default: + * b = 2 + * } + * ``` + */ +class ExpressionSwitchStmt extends @exprswitchstmt, SwitchStmt { + /** Gets the switch expression of this `switch` statement. */ + Expr getExpr() { result = getChildExpr(1) } + + override predicate mayHaveSideEffects() { + getInit().mayHaveSideEffects() or + getBody().mayHaveSideEffects() + } + + override string toString() { result = "expression-switch statement" } + + override string getAPrimaryQlClass() { result = "ExpressionSwitchStmt" } +} + +/** + * A type-switch statement. + * + * Examples: + * + * ```go + * switch i := x.(type) { + * default: + * printString("don't know the type") // type of i is type of x (interface{}) + * case nil: + * printString("x is nil") // type of i is type of x (interface{}) + * case int: + * printInt(i) // type of i is int + * case func(int) float64: + * printFunction(i) // type of i is func(int) float64 + * } + * ``` + */ +class TypeSwitchStmt extends @typeswitchstmt, SwitchStmt { + /** Gets the assign statement of this type-switch statement. */ + SimpleAssignStmt getAssign() { result = getChildStmt(1) } + + /** Gets the test statement of this type-switch statement. This is a `SimpleAssignStmt` or `ExprStmt`. */ + Stmt getTest() { result = getChildStmt(1) } + + /** Gets the expression whose type is examined by this `switch` statement. */ + Expr getExpr() { result = getAssign().getRhs() or result = getChildStmt(1).(ExprStmt).getExpr() } + + override predicate mayHaveSideEffects() { any() } + + override string toString() { result = "type-switch statement" } + + override string getAPrimaryQlClass() { result = "TypeSwitchStmt" } +} + +/** + * A comm clause, that is, a `case` or `default` clause in a `select` statement. + * + * Examples: + * + * ```go + * case i1 = <-c1: + * print("received ", i1, " from c1\n") + * + * case c2 <- i2: + * print("sent ", i2, " to c2\n") + * + * case i3, ok := (<-c3): // same as: i3, ok := <-c3 + * if ok { + * print("received ", i3, " from c3\n") + * } else { + * print("c3 is closed\n") + * } + * + * default: + * print("no communication\n") + * ``` + */ +class CommClause extends @commclause, Stmt, ScopeNode { + /** Gets the comm statement of this clause, if any. */ + Stmt getComm() { result = getChildStmt(0) } + + /** Gets the `i`th statement of this clause (0-based). */ + Stmt getStmt(int i) { i >= 0 and result = getChildStmt(i + 1) } + + /** Gets a statement of this clause. */ + Stmt getAStmt() { result = getStmt(_) } + + /** Gets the number of statements of this clause. */ + int getNumStmt() { result = count(getAStmt()) } + + override predicate mayHaveSideEffects() { getAStmt().mayHaveSideEffects() } + + override string toString() { result = "comm clause" } + + override string getAPrimaryQlClass() { result = "CommClause" } +} + +/** + * A receive statement in a comm clause. + * + * Examples: + * + * ```go + * i1 = <-c1 + * i3, ok := <-c3 + * i3, ok := (<-c3) + * ``` + */ +class RecvStmt extends Stmt { + RecvStmt() { this = any(CommClause cc).getComm() and not this instanceof SendStmt } + + /** Gets the `i`th left-hand-side expression of this receive statement, if any. */ + Expr getLhs(int i) { result = this.(Assignment).getLhs(i) } + + /** Gets the number of left-hand-side expressions of this receive statement. */ + int getNumLhs() { result = count(getLhs(_)) } + + /** Gets the receive expression of this receive statement. */ + RecvExpr getExpr() { + result = this.(ExprStmt).getExpr() or + result = this.(Assignment).getRhs() + } + + override string getAPrimaryQlClass() { result = "RecvStmt" } +} + +/** + * A `select` statement. + * + * Examples: + * + * ```go + * select { + * case i1 = <-c1: + * print("received ", i1, " from c1\n") + * case c2 <- i2: + * print("sent ", i2, " to c2\n") + * case i3, ok := (<-c3): // same as: i3, ok := <-c3 + * if ok { + * print("received ", i3, " from c3\n") + * } else { + * print("c3 is closed\n") + * } + * default: + * print("no communication\n") + * } + * ``` + */ +class SelectStmt extends @selectstmt, Stmt { + /** Gets the body of this `select` statement. */ + BlockStmt getBody() { result = getChildStmt(0) } + + /** + * Gets the `i`th comm clause (that is, `case` or `default` clause) in this `select` statement. + */ + CommClause getCommClause(int i) { result = getBody().getStmt(i) } + + /** + * Gets a comm clause in this `select` statement. + */ + CommClause getACommClause() { result = getCommClause(_) } + + /** Gets the `i`th `case` clause in this `select` statement. */ + CommClause getNonDefaultCommClause(int i) { + result = + rank[i + 1](CommClause cc, int j | + cc = getCommClause(j) and exists(cc.getComm()) + | + cc order by j + ) + } + + /** Gets the number of `case` clauses in this `select` statement. */ + int getNumNonDefaultCommClause() { result = count(getNonDefaultCommClause(_)) } + + /** Gets the `default` clause in this `select` statement, if any. */ + CommClause getDefaultCommClause() { + result = getCommClause(_) and + not exists(result.getComm()) + } + + override predicate mayHaveSideEffects() { any() } + + override string toString() { result = "select statement" } + + override string getAPrimaryQlClass() { result = "SelectStmt" } +} + +/** + * A loop, that is, either a `for` statement or a `range` statement. + * + * Examples: + * + * ```go + * for a < b { + * a *= 2 + * } + * + * for i := 0; i < 10; i++ { + * f(i) + * } + * + * for key, value := range mymap { + * fmt.Printf("mymap[%s] = %d\n", key, value) + * } + * ``` + */ +class LoopStmt extends @loopstmt, Stmt, ScopeNode { + /** Gets the body of this loop. */ + BlockStmt getBody() { none() } +} + +/** + * A `for` statement. + * + * Examples: + * + * ```go + * for a < b { + * a *= 2 + * } + * + * for i := 0; i < 10; i++ { + * f(i) + * } + * ``` + */ +class ForStmt extends @forstmt, LoopStmt { + /** Gets the init statement of this `for` statement, if any. */ + Stmt getInit() { result = getChildStmt(0) } + + /** Gets the condition of this `for` statement. */ + Expr getCond() { result = getChildExpr(1) } + + /** Gets the post statement of this `for` statement. */ + Stmt getPost() { result = getChildStmt(2) } + + override BlockStmt getBody() { result = getChildStmt(3) } + + override predicate mayHaveSideEffects() { + getInit().mayHaveSideEffects() or + getCond().mayHaveSideEffects() or + getPost().mayHaveSideEffects() or + getBody().mayHaveSideEffects() + } + + override string toString() { result = "for statement" } + + override string getAPrimaryQlClass() { result = "ForStmt" } +} + +/** + * A `range` statement. + * + * Examples: + * + * ```go + * for key, value := range mymap { + * fmt.Printf("mymap[%s] = %d\n", key, value) + * } + * + * for _, value = range array { + * fmt.Printf("array contains: %d\n", value) + * } + * + * for index, _ := range str { + * fmt.Printf("str[%d] = ?\n", index) + * } + * + * for value = range ch { + * fmt.Printf("value from channel: %d\n", value) + * } + * ``` + */ +class RangeStmt extends @rangestmt, LoopStmt { + /** Gets the expression denoting the key of this `range` statement. */ + Expr getKey() { result = getChildExpr(0) } + + /** Get the expression denoting the value of this `range` statement. */ + Expr getValue() { result = getChildExpr(1) } + + /** Gets the domain of this `range` statement. */ + Expr getDomain() { result = getChildExpr(2) } + + override BlockStmt getBody() { result = getChildStmt(3) } + + override predicate mayHaveSideEffects() { any() } + + override string toString() { result = "range statement" } + + override string getAPrimaryQlClass() { result = "RangeStmt" } +} diff --git a/go/ql/lib/semmle/go/StringOps.qll b/go/ql/lib/semmle/go/StringOps.qll new file mode 100644 index 00000000000..70f83328c05 --- /dev/null +++ b/go/ql/lib/semmle/go/StringOps.qll @@ -0,0 +1,523 @@ +/** + * Provides predicates and classes for working with string operations. + */ + +import go + +/** Provides predicates and classes for working with string operations. */ +module StringOps { + /** + * An expression that is equivalent to `strings.HasPrefix(A, B)` or `!strings.HasPrefix(A, B)`. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `StringOps::HasPrefix::Range` instead. + */ + class HasPrefix extends DataFlow::Node { + HasPrefix::Range range; + + HasPrefix() { range = this } + + /** + * Gets the `A` in `strings.HasPrefix(A, B)`. + */ + DataFlow::Node getBaseString() { result = range.getBaseString() } + + /** + * Gets the `B` in `strings.HasPrefix(A, B)`. + */ + DataFlow::Node getSubstring() { result = range.getSubstring() } + + /** + * Gets the polarity of the check. + * + * If the polarity is `false` the check returns `true` if the string does not start + * with the given substring. + */ + boolean getPolarity() { result = range.getPolarity() } + } + + class StartsWith = HasPrefix; + + /** Provides predicates and classes for working with prefix checks. */ + module HasPrefix { + /** + * An expression that is equivalent to `strings.HasPrefix(A, B)` or `!strings.HasPrefix(A, B)`. + * + * Extend this class to model new APIs. If you want to refine existing API models, extend + * `StringOps::HasPrefix` instead. + */ + abstract class Range extends DataFlow::Node { + /** + * Gets the `A` in `strings.HasPrefix(A, B)`. + */ + abstract DataFlow::Node getBaseString(); + + /** + * Gets the `B` in `strings.HasPrefix(A, B)`. + */ + abstract DataFlow::Node getSubstring(); + + /** + * Gets the polarity of the check. + * + * If the polarity is `false` the check returns `true` if the string does not start + * with the given substring. + */ + boolean getPolarity() { result = true } + } + + /** + * An expression of the form `strings.HasPrefix(A, B)`. + */ + private class StringsHasPrefix extends Range, DataFlow::CallNode { + StringsHasPrefix() { this.getTarget().hasQualifiedName("strings", "HasPrefix") } + + override DataFlow::Node getBaseString() { result = this.getArgument(0) } + + override DataFlow::Node getSubstring() { result = this.getArgument(1) } + } + + /** + * Holds if `eq` is of the form `nd == 0` or `nd != 0`. + */ + pragma[noinline] + private predicate comparesToZero(DataFlow::EqualityTestNode eq, DataFlow::Node nd) { + exists(DataFlow::Node zero | + eq.hasOperands(globalValueNumber(nd).getANode(), zero) and + zero.getIntValue() = 0 + ) + } + + /** + * An expression of the form `strings.Index(A, B) == 0`. + */ + private class HasPrefix_IndexOfEquals extends Range, DataFlow::EqualityTestNode { + DataFlow::CallNode indexOf; + + HasPrefix_IndexOfEquals() { + comparesToZero(this, indexOf) and + indexOf.getTarget().hasQualifiedName("strings", "Index") + } + + override DataFlow::Node getBaseString() { result = indexOf.getArgument(0) } + + override DataFlow::Node getSubstring() { result = indexOf.getArgument(1) } + + override boolean getPolarity() { result = expr.getPolarity() } + } + + /** + * Holds if `eq` is of the form `str[0] == rhs` or `str[0] != rhs`. + */ + pragma[noinline] + private predicate comparesFirstCharacter( + DataFlow::EqualityTestNode eq, DataFlow::Node str, DataFlow::Node rhs + ) { + exists(DataFlow::ElementReadNode read | + eq.hasOperands(globalValueNumber(read).getANode(), rhs) and + str = read.getBase() and + str.getType().getUnderlyingType() instanceof StringType and + read.getIndex().getIntValue() = 0 + ) + } + + /** + * A comparison of the form `x[0] == 'k'` for some rune literal `k`. + */ + private class HasPrefix_FirstCharacter extends Range, DataFlow::EqualityTestNode { + DataFlow::Node base; + DataFlow::Node runeLiteral; + + HasPrefix_FirstCharacter() { comparesFirstCharacter(this, base, runeLiteral) } + + override DataFlow::Node getBaseString() { result = base } + + override DataFlow::Node getSubstring() { result = runeLiteral } + + override boolean getPolarity() { result = expr.getPolarity() } + } + + /** + * A comparison of the form `x[:len(y)] == y`. + */ + private class HasPrefix_Substring extends Range, DataFlow::EqualityTestNode { + DataFlow::SliceNode slice; + DataFlow::Node substring; + + HasPrefix_Substring() { + this.eq(_, slice, substring) and + slice.getLow().getIntValue() = 0 and + ( + exists(DataFlow::CallNode len | + len = Builtin::len().getACall() and + len.getArgument(0) = globalValueNumber(substring).getANode() and + slice.getHigh() = globalValueNumber(len).getANode() + ) + or + substring.getStringValue().length() = slice.getHigh().getIntValue() + ) + } + + override DataFlow::Node getBaseString() { result = slice.getBase() } + + override DataFlow::Node getSubstring() { result = substring } + + override boolean getPolarity() { result = expr.getPolarity() } + } + } + + /** Provides predicates and classes for working with Printf-style formatters. */ + module Formatting { + /** + * Gets a regular expression for matching simple format-string components, including flags, + * width and precision specifiers, not including explicit argument indices. + */ + pragma[noinline] + private string getFormatComponentRegex() { + exists( + string literal, string opt_flag, string width, string prec, string opt_width_and_prec, + string operator, string verb + | + literal = "([^%]|%%)+" and + opt_flag = "[-+ #0]?" and + width = "\\d+|\\*" and + prec = "\\.(\\d+|\\*)" and + opt_width_and_prec = "(" + width + ")?(" + prec + ")?" and + operator = "[bcdeEfFgGoOpqstTxXUv]" and + verb = "(%" + opt_flag + opt_width_and_prec + operator + ")" + | + result = "(" + literal + "|" + verb + ")" + ) + } + + /** + * A function that performs string formatting in the same manner as `fmt.Printf` etc. + */ + abstract class Range extends Function { + /** + * Gets the parameter index of the format string. + */ + abstract int getFormatStringIndex(); + + /** + * Gets the parameter index of the first parameter to be formatted. + */ + abstract int getFirstFormattedParameterIndex(); + } + + /** + * A call to a `fmt.Printf`-style string formatting function. + */ + class StringFormatCall extends DataFlow::CallNode { + string fmt; + Range f; + + StringFormatCall() { + this = f.getACall() and + fmt = this.getArgument(f.getFormatStringIndex()).getStringValue() and + fmt.regexpMatch(getFormatComponentRegex() + "*") + } + + /** + * Gets the `n`th component of this format string. + */ + string getComponent(int n) { result = fmt.regexpFind(getFormatComponentRegex(), n, _) } + + /** + * Gets the `n`th argument formatted by this format call, where `formatDirective` specifies how it will be formatted. + */ + DataFlow::Node getOperand(int n, string formatDirective) { + formatDirective = this.getComponent(n) and + formatDirective.charAt(0) = "%" and + formatDirective.charAt(1) != "%" and + result = this.getArgument((n / 2) + f.getFirstFormattedParameterIndex()) + } + } + } + + /** + * A data-flow node that performs string concatenation. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `StringOps::Concatenation::Range` instead. + */ + class Concatenation extends DataFlow::Node { + Concatenation::Range self; + + Concatenation() { this = self } + + /** + * Gets the `n`th operand of this string concatenation, if there is a data-flow node for it. + */ + DataFlow::Node getOperand(int n) { result = self.getOperand(n) } + + /** + * Gets the string value of the `n`th operand of this string concatenation, if it is a constant. + */ + string getOperandStringValue(int n) { result = self.getOperandStringValue(n) } + + /** + * Gets the number of operands of this string concatenation. + */ + int getNumOperand() { result = self.getNumOperand() } + } + + /** Provides predicates and classes for working with string concatenations. */ + module Concatenation { + /** + * A data-flow node that performs string concatenation. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `StringOps::Concatenation` instead. + */ + abstract class Range extends DataFlow::Node { + /** + * Gets the `n`th operand of this string concatenation, if there is a data-flow node for it. + */ + abstract DataFlow::Node getOperand(int n); + + /** + * Gets the string value of the `n`th operand of this string concatenation, if it is + * a constant. + */ + string getOperandStringValue(int n) { result = this.getOperand(n).getStringValue() } + + /** + * Gets the number of operands of this string concatenation. + */ + int getNumOperand() { result = count(this.getOperand(_)) } + } + + /** A string concatenation using the `+` or `+=` operator. */ + private class PlusConcat extends Range, DataFlow::BinaryOperationNode { + PlusConcat() { + this.getType() instanceof StringType and + this.getOperator() = "+" + } + + override DataFlow::Node getOperand(int n) { + n = 0 and result = this.getLeftOperand() + or + n = 1 and result = this.getRightOperand() + } + } + + /** + * A call to `fmt.Sprintf`, considered as a string concatenation. + * + * Only calls with simple format strings (no `*` specifiers, no explicit argument indices) + * are supported. Such format strings can be viewed as sequences of alternating literal and + * non-literal components. A literal component contains no `%` characters except `%%` pairs, + * while a non-literal component consists of `%`, a verb, and possibly flags and specifiers. + * Each non-literal component consumes exactly one argument. + * + * Literal components give rise to concatenation operands that have a string value but no + * data-flow node; non-literal `%s` or `%v` components give rise to concatenation operands + * that do have an associated data-flow node but possibly no string value; any other non-literal + * components give rise to concatenation operands that have neither an associated data-flow + * node nor a string value. This is because verbs like `%q` perform additional string + * transformations that we cannot easily represent. + */ + private class SprintfConcat extends Range instanceof Formatting::StringFormatCall { + SprintfConcat() { this = any(Function f | f.hasQualifiedName("fmt", "Sprintf")).getACall() } + + override DataFlow::Node getOperand(int n) { + result = Formatting::StringFormatCall.super.getOperand(n, ["%s", "%v"]) + } + + override string getOperandStringValue(int n) { + result = Range.super.getOperandStringValue(n) + or + exists(string cmp | cmp = Formatting::StringFormatCall.super.getComponent(n) | + (cmp.charAt(0) != "%" or cmp.charAt(1) = "%") and + result = cmp.replaceAll("%%", "%") + ) + } + + override int getNumOperand() { + result = max(int i | exists(Formatting::StringFormatCall.super.getComponent(i))) + 1 + } + } + + /** + * Holds if `src` flows to `dst` through the `n`th operand of the given concatenation operator. + */ + predicate taintStep(DataFlow::Node src, DataFlow::Node dst, Concatenation cat, int n) { + src = cat.getOperand(n) and + dst = cat + } + + /** + * Holds if there is a taint step from `src` to `dst` through string concatenation. + */ + predicate taintStep(DataFlow::Node src, DataFlow::Node dst) { taintStep(src, dst, _, _) } + } + + private newtype TConcatenationElement = + /** A root concatenation element that is not itself an operand of a string concatenation. */ + MkConcatenationRoot(Concatenation cat) { not cat = any(Concatenation parent).getOperand(_) } or + /** A concatenation element that is an operand of a string concatenation. */ + MkConcatenationOperand(Concatenation parent, int i) { i in [0 .. parent.getNumOperand() - 1] } + + /** + * An element of a string concatenation, which either itself performs a string concatenation or + * occurs as an operand in a string concatenation. + * + * For example, the expression `x + y + z` contains the following concatenation + * elements: + * + * - The leaf elements `x`, `y`, and `z` + * - The intermediate element `x + y`, which is both a concatenation and an operand + * - The root element `x + y + z` + */ + class ConcatenationElement extends TConcatenationElement { + /** + * Gets the data-flow node corresponding to this concatenation element, if any. + */ + DataFlow::Node asNode() { + this = MkConcatenationRoot(result) + or + exists(Concatenation parent, int i | this = MkConcatenationOperand(parent, i) | + result = parent.getOperand(i) + ) + } + + /** + * Gets the string value of this concatenation element if it is a constant. + */ + string getStringValue() { + result = this.asNode().getStringValue() + or + exists(Concatenation parent, int i | this = MkConcatenationOperand(parent, i) | + result = parent.getOperandStringValue(i) + ) + } + + /** + * Gets the `n`th operand of this string concatenation. + */ + ConcatenationOperand getOperand(int n) { result = MkConcatenationOperand(this.asNode(), n) } + + /** + * Gets an operand of this string concatenation. + */ + ConcatenationOperand getAnOperand() { result = this.getOperand(_) } + + /** + * Gets the number of operands of this string concatenation. + */ + int getNumOperand() { result = count(this.getAnOperand()) } + + /** + * Gets the first operand of this string concatenation. + * + * For example, the first operand of `(x + y) + z` is `(x + y)`. + */ + ConcatenationOperand getFirstOperand() { result = this.getOperand(0) } + + /** + * Gets the last operand of this string concatenation. + * + * For example, the last operand of `x + (y + z)` is `(y + z)`. + */ + ConcatenationOperand getLastOperand() { result = this.getOperand(this.getNumOperand() - 1) } + + /** + * Gets the root of the concatenation tree to which this element belongs. + */ + ConcatenationRoot getConcatenationRoot() { this = result.getAnOperand*() } + + /** + * Gets a leaf in the concatenation tree that this element is the root of. + */ + ConcatenationLeaf getALeaf() { result = this.getAnOperand*() } + + /** + * Gets the first leaf in this concatenation tree. + * + * For example, the first leaf of `(x + y) + z` is `x`. + */ + ConcatenationLeaf getFirstLeaf() { result = this.getFirstOperand*() } + + /** + * Gets the last leaf in this concatenation tree. + * + * For example, the last leaf of `x + (y + z)` is `z`. + */ + ConcatenationLeaf getLastLeaf() { result = this.getLastOperand*() } + + /** Gets a textual representation of this concatenation element. */ + string toString() { + if exists(this.asNode()) + then result = this.asNode().toString() + else + if exists(this.getStringValue()) + then result = this.getStringValue() + else result = "concatenation element" + } + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.asNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + or + // use dummy location for elements that don't have a corresponding node + not exists(this.asNode()) and + filepath = "" and + startline = 0 and + startcolumn = 0 and + endline = 0 and + endcolumn = 0 + } + } + + /** + * One of the operands in a string concatenation. + * + * See `ConcatenationElement` for more information. + */ + class ConcatenationOperand extends ConcatenationElement, MkConcatenationOperand { } + + /** + * A data-flow node that performs a string concatenation, and is not an + * immediate operand in a larger string concatenation. + * + * See `ConcatenationElement` for more information. + */ + class ConcatenationRoot extends ConcatenationElement, MkConcatenationRoot { } + + /** + * An operand to a concatenation that is not itself a concatenation. + * + * See `ConcatenationElement` for more information. + */ + class ConcatenationLeaf extends ConcatenationOperand { + ConcatenationLeaf() { not exists(this.getAnOperand()) } + + /** + * Gets the operand immediately preceding this one in its parent concatenation. + * + * For example, in `(x + y) + z`, the previous leaf for `z` is `y`. + */ + ConcatenationLeaf getPreviousLeaf() { + exists(ConcatenationElement parent, int i | + result = parent.getOperand(i - 1).getLastLeaf() and + this = parent.getOperand(i).getFirstLeaf() + ) + } + + /** + * Gets the operand immediately succeeding this one in its parent concatenation. + * + * For example, in `(x + y) + z`, the previous leaf for `y` is `z`. + */ + ConcatenationLeaf getNextLeaf() { this = result.getPreviousLeaf() } + } +} diff --git a/go/ql/lib/semmle/go/Types.qll b/go/ql/lib/semmle/go/Types.qll new file mode 100644 index 00000000000..8ec3978e6f1 --- /dev/null +++ b/go/ql/lib/semmle/go/Types.qll @@ -0,0 +1,1015 @@ +/** + * Provides classes for working with Go types. + */ + +import go + +/** A Go type. */ +class Type extends @type { + /** Gets the name of this type, if it has one. */ + string getName() { typename(this, result) } + + /** + * Gets the underlying type of this type after any type aliases have been replaced + * with their definition. + */ + Type getUnderlyingType() { result = this } + + /** + * Gets the entity associated with this type. + */ + TypeEntity getEntity() { type_objects(this, result) } + + /** Gets the package in which this type is declared, if any. */ + Package getPackage() { result = this.getEntity().getPackage() } + + /** + * Gets the qualified name of this type, if any. + * + * Only (defined) named types like `io.Writer` have a qualified name. Basic types like `int`, + * pointer types like `*io.Writer`, and other composite types do not have a qualified name. + */ + string getQualifiedName() { result = this.getEntity().getQualifiedName() } + + /** + * Holds if this type is declared in a package with path `pkg` and has name `name`. + * + * Only (defined) named types like `io.Writer` have a qualified name. Basic types like `int`, + * pointer types like `*io.Writer`, and other composite types do not have a qualified name. + */ + predicate hasQualifiedName(string pkg, string name) { + this.getEntity().hasQualifiedName(pkg, name) + } + + /** + * Holds if the method set of this type contains a method named `m` of type `t`. + */ + predicate hasMethod(string m, SignatureType t) { t = this.getMethod(m).getType() } + + /** + * Gets the method `m` belonging to the method set of this type, if any. + * + * Note that this predicate never has a result for struct types. Methods are associated + * with the corresponding named type instead. + */ + Method getMethod(string m) { + result.getReceiverType() = this and + result.getName() = m + } + + /** + * Gets the field `f` of this type. + * + * This includes fields promoted from an embedded field. + */ + Field getField(string f) { result = this.getUnderlyingType().getField(f) } + + /** + * Holds if this type implements interface `i`, that is, the method set of `i` + * is contained in the method set of this type and any type restrictions are + * satisfied. + */ + predicate implements(InterfaceType i) { + if i = any(ComparableType comparable).getUnderlyingType() + then this.implementsComparable() + else this.implementsNotComparable(i) + } + + /** + * Holds if this type implements interface `i`, which is not the underlying + * type of `comparable`. This predicate is needed to avoid non-monotonic + * recursion. + */ + private predicate implementsNotComparable(InterfaceType i) { + ( + forall(TypeSetLiteralType tslit | tslit = i.getAnEmbeddedTypeSetLiteral() | + tslit.includesType(this) + ) and + ( + hasNoMethods(i) + or + this.hasMethod(getExampleMethodName(i), _) and + forall(string m, SignatureType t | i.hasMethod(m, t) | this.hasMethod(m, t)) + ) + ) + } + + /** + * Holds if this type implements `comparable`. This includes being + * `comparable` itself, or the underlying type of `comparable`. + */ + predicate implementsComparable() { + exists(Type u | u = this.getUnderlyingType() | + // Note that BasicType includes Invalidtype + u instanceof BasicType + or + u instanceof PointerType + or + u instanceof ChanType + or + u instanceof StructType and + forall(Type fieldtp | u.(StructType).hasField(_, fieldtp) | fieldtp.implementsComparable()) + or + u instanceof ArrayType and u.(ArrayType).getElementType().implementsComparable() + or + exists(InterfaceType uif | uif = u | + not uif instanceof BasicInterfaceType and + if exists(uif.getAnEmbeddedTypeSetLiteral()) + then + // All types in the intersection of all the embedded type set + // literals must implement comparable. + forall(Type intersectionType | + intersectionType = uif.getAnEmbeddedTypeSetLiteral().getATerm().getType() and + forall(TypeSetLiteralType tslit | tslit = uif.getAnEmbeddedTypeSetLiteral() | + intersectionType = tslit.getATerm().getType() + ) + | + intersectionType.implementsComparable() + ) + else uif.isOrEmbedsComparable() + ) + ) + } + + /** + * Holds if this type implements an interface that has the qualified name `pkg.name`, + * that is, the method set of `pkg.name` is contained in the method set of this type + * and any type restrictions are satisfied. + */ + predicate implements(string pkg, string name) { + exists(Type t | t.hasQualifiedName(pkg, name) | this.implements(t.getUnderlyingType())) + } + + /** + * Gets the pointer type that has this type as its base type. + */ + PointerType getPointerType() { result.getBaseType() = this } + + /** + * Gets a pretty-printed representation of this type, including its structure where applicable. + */ + string pp() { result = this.toString() } + + /** + * Gets a basic textual representation of this type. + */ + string toString() { result = this.getName() } +} + +/** An invalid type. */ +class InvalidType extends @invalidtype, Type { + override string toString() { result = "invalid type" } +} + +/** A basic type. */ +class BasicType extends @basictype, Type { } + +/** Either the normal or literal boolean type */ +class BoolType extends @booltype, BasicType { } + +/** The `bool` type of a non-literal expression */ +class BoolExprType extends @boolexprtype, BoolType { + override string getName() { result = "bool" } +} + +/** A numeric type such as `int` or `float64`. */ +class NumericType extends @numerictype, BasicType { + /** + * Gets the implementation-independent size (in bits) of this numeric type. + * + * This predicate is not defined for types with an implementation-specific size, that is, + * `uint`, `int` or `uintptr`. + */ + int getSize() { none() } + + /** + * Gets a possible implementation-specific size (in bits) of this numeric type. + * + * This predicate is not defined for `uintptr` since the language specification says nothing + * about its size. + */ + int getASize() { result = this.getSize() } +} + +/** An integer type such as `int` or `uint64`. */ +class IntegerType extends @integertype, NumericType { } + +/** A signed integer type such as `int`. */ +class SignedIntegerType extends @signedintegertype, IntegerType { } + +/** The type `int`. */ +class IntType extends @inttype, SignedIntegerType { + override int getASize() { result = 32 or result = 64 } + + override string getName() { result = "int" } +} + +/** The type `int8`. */ +class Int8Type extends @int8type, SignedIntegerType { + override int getSize() { result = 8 } + + override string getName() { result = "int8" } +} + +/** The type `int16`. */ +class Int16Type extends @int16type, SignedIntegerType { + override int getSize() { result = 16 } + + override string getName() { result = "int16" } +} + +/** The type `int32`. */ +class Int32Type extends @int32type, SignedIntegerType { + override int getSize() { result = 32 } + + override string getName() { result = "int32" } +} + +/** The type `int64`. */ +class Int64Type extends @int64type, SignedIntegerType { + override int getSize() { result = 64 } + + override string getName() { result = "int64" } +} + +/** An unsigned integer type such as `uint`. */ +class UnsignedIntegerType extends @unsignedintegertype, IntegerType { } + +/** The type `uint`. */ +class UintType extends @uinttype, UnsignedIntegerType { + override int getASize() { result = 32 or result = 64 } + + override string getName() { result = "uint" } +} + +/** The type `uint8`. */ +class Uint8Type extends @uint8type, UnsignedIntegerType { + override int getSize() { result = 8 } + + override string getName() { result = "uint8" } +} + +/** The type `uint16`. */ +class Uint16Type extends @uint16type, UnsignedIntegerType { + override int getSize() { result = 16 } + + override string getName() { result = "uint16" } +} + +/** The type `uint32`. */ +class Uint32Type extends @uint32type, UnsignedIntegerType { + override int getSize() { result = 32 } + + override string getName() { result = "uint32" } +} + +/** The type `uint64`. */ +class Uint64Type extends @uint64type, UnsignedIntegerType { + override int getSize() { result = 64 } + + override string getName() { result = "uint64" } +} + +/** The type `uintptr`. */ +class UintptrType extends @uintptrtype, BasicType { + override string getName() { result = "uintptr" } +} + +/** A floating-point type such as `float64`. */ +class FloatType extends @floattype, NumericType { } + +/** The type `float32`. */ +class Float32Type extends @float32type, FloatType { + override int getSize() { result = 32 } + + override string getName() { result = "float32" } +} + +/** The type `float64`. */ +class Float64Type extends @float64type, FloatType { + override int getSize() { result = 64 } + + override string getName() { result = "float64" } +} + +/** A complex-number type such as `complex64`. */ +class ComplexType extends @complextype, NumericType { } + +/** The type `complex64`. */ +class Complex64Type extends @complex64type, ComplexType { + override int getSize() { result = 64 } + + override string getName() { result = "complex64" } +} + +/** The type `complex128`. */ +class Complex128Type extends @complex128type, ComplexType { + override int getSize() { result = 128 } + + override string getName() { result = "complex128" } +} + +/** Either the normal or literal string type */ +class StringType extends @stringtype, BasicType { } + +/** The `string` type of a non-literal expression */ +class StringExprType extends @stringexprtype, StringType { + override string getName() { result = "string" } +} + +/** The type `unsafe.Pointer`. */ +class UnsafePointerType extends @unsafepointertype, BasicType { + override string getName() { result = "unsafe.Pointer" } +} + +/** The type of a literal. */ +class LiteralType extends @literaltype, BasicType { } + +/** The type of a bool literal. */ +class BoolLiteralType extends @boolliteraltype, LiteralType, BoolType { + override string toString() { result = "bool literal" } +} + +/** The type of an integer literal. */ +class IntLiteralType extends @intliteraltype, LiteralType, SignedIntegerType { + override string toString() { result = "int literal" } +} + +/** The type of a rune literal. */ +class RuneLiteralType extends @runeliteraltype, LiteralType, SignedIntegerType { + override string toString() { result = "rune literal" } +} + +/** The type of a float literal. */ +class FloatLiteralType extends @floatliteraltype, LiteralType, FloatType { + override string toString() { result = "float literal" } +} + +/** The type of a complex literal. */ +class ComplexLiteralType extends @complexliteraltype, LiteralType, ComplexType { + override string toString() { result = "complex literal" } +} + +/** The type of a string literal. */ +class StringLiteralType extends @stringliteraltype, LiteralType, StringType { + override string toString() { result = "string literal" } +} + +/** The type of `nil`. */ +class NilLiteralType extends @nilliteraltype, LiteralType { + override string toString() { result = "nil literal" } +} + +/** A composite type, that is, not a basic type. */ +class CompositeType extends @compositetype, Type { } + +/** A type that comes from a type parameter. */ +class TypeParamType extends @typeparamtype, CompositeType { + /** Gets the name of this type parameter type. */ + string getParamName() { typeparam(this, result, _, _, _) } + + /** Gets the constraint of this type parameter type. */ + Type getConstraint() { typeparam(this, _, result, _, _) } + + override InterfaceType getUnderlyingType() { result = this.getConstraint().getUnderlyingType() } + + override string pp() { result = this.getParamName() } + + /** + * Gets a pretty-printed representation of this type including its constraint. + */ + string ppWithConstraint() { result = this.getParamName() + " " + this.getConstraint().pp() } + + override string toString() { result = "type parameter type" } +} + +/** An array type. */ +class ArrayType extends @arraytype, CompositeType { + /** Gets the element type of this array type. */ + Type getElementType() { element_type(this, result) } + + /** Gets the length of this array type as a string. */ + string getLengthString() { array_length(this, result) } + + /** Gets the length of this array type if it can be represented as a QL integer. */ + int getLength() { result = this.getLengthString().toInt() } + + override Package getPackage() { result = this.getElementType().getPackage() } + + override string pp() { result = "[" + this.getLength() + "]" + this.getElementType().pp() } + + override string toString() { result = "array type" } +} + +/** A slice type. */ +class SliceType extends @slicetype, CompositeType { + /** Gets the element type of this slice type. */ + Type getElementType() { element_type(this, result) } + + override Package getPackage() { result = this.getElementType().getPackage() } + + override string pp() { result = "[]" + this.getElementType().pp() } + + override string toString() { result = "slice type" } +} + +/** A byte slice type */ +class ByteSliceType extends SliceType { + ByteSliceType() { this.getElementType() instanceof Uint8Type } +} + +/** A struct type. */ +class StructType extends @structtype, CompositeType { + /** + * Holds if this struct contains a field `name` with type `tp`; + * `isEmbedded` is true if the field is embedded. + * + * Note that this predicate does not take promoted fields into account. + */ + predicate hasOwnField(int i, string name, Type tp, boolean isEmbedded) { + exists(string n | component_types(this, i, n, tp) | + if n = "" + then ( + isEmbedded = true and + ( + name = tp.(NamedType).getName() + or + name = tp.(PointerType).getBaseType().(NamedType).getName() + ) + ) else ( + isEmbedded = false and + name = n + ) + ) + } + + /** + * Get a field with the name `name`; `isEmbedded` is true if the field is embedded. + * + * Note that this does not take promoted fields into account. + */ + Field getOwnField(string name, boolean isEmbedded) { + result.getDeclaringType() = this and + result.getName() = name and + this.hasOwnField(_, name, _, isEmbedded) + } + + /** + * Holds if there is an embedded field at `depth`, with either type `tp` or a pointer to `tp`. + */ + private predicate hasEmbeddedField(Type tp, int depth) { + exists(Field f | this.hasFieldCand(_, f, depth, true) | + tp = f.getType() or + tp = f.getType().(PointerType).getBaseType() + ) + } + + /** + * Gets a field of `embeddedParent`, which is then embedded into this struct type. + */ + Field getFieldOfEmbedded(Field embeddedParent, string name, int depth, boolean isEmbedded) { + // embeddedParent is a field of 'this' at depth 'depth - 1' + this.hasFieldCand(_, embeddedParent, depth - 1, true) and + // embeddedParent's type has the result field + exists(StructType embeddedType, Type fieldType | + fieldType = embeddedParent.getType().getUnderlyingType() and + pragma[only_bind_into](embeddedType) = + [fieldType, fieldType.(PointerType).getBaseType().getUnderlyingType()] + | + result = embeddedType.getOwnField(name, isEmbedded) + ) + } + + /** + * Gets a method of `embeddedParent`, which is then embedded into this struct type. + */ + Method getMethodOfEmbedded(Field embeddedParent, string name, int depth) { + // embeddedParent is a field of 'this' at depth 'depth - 1' + this.hasFieldCand(_, embeddedParent, depth - 1, true) and + result.getName() = name and + ( + result.getReceiverBaseType() = embeddedParent.getType() + or + result.getReceiverBaseType() = embeddedParent.getType().(PointerType).getBaseType() + or + methodhosts(result, embeddedParent.getType()) + ) + } + + private predicate hasFieldCand(string name, Field f, int depth, boolean isEmbedded) { + f = this.getOwnField(name, isEmbedded) and depth = 0 + or + not this.hasOwnField(_, name, _, _) and + f = this.getFieldOfEmbedded(_, name, depth, isEmbedded) + } + + private predicate hasMethodCand(string name, Method m, int depth) { + name = m.getName() and + exists(Type embedded | this.hasEmbeddedField(embedded, depth - 1) | + m.getReceiverType() = embedded + ) + } + + /** + * Holds if this struct contains a field `name` with type `tp`, possibly inside a (nested) + * embedded field. + */ + predicate hasField(string name, Type tp) { + exists(int mindepth | + mindepth = min(int depth | this.hasFieldCand(name, _, depth, _)) and + tp = unique(Field f | f = this.getFieldCand(name, mindepth, _)).getType() + ) + } + + private Field getFieldCand(string name, int depth, boolean isEmbedded) { + result = this.getOwnField(name, isEmbedded) and depth = 0 + or + exists(Type embedded | this.hasEmbeddedField(embedded, depth - 1) | + result = embedded.getUnderlyingType().(StructType).getOwnField(name, isEmbedded) + ) + } + + override Field getField(string name) { result = this.getFieldAtDepth(name, _) } + + /** + * Gets the field `f` with depth `depth` of this type. + * + * This includes fields promoted from an embedded field. It is not possible + * to access a field that is shadowed by a promoted field with this function. + * The number of embedded fields traversed to reach `f` is called its depth. + * The depth of a field `f` declared in this type is zero. + */ + Field getFieldAtDepth(string name, int depth) { + depth = min(int depthCand | exists(this.getFieldCand(name, depthCand, _))) and + result = this.getFieldCand(name, depth, _) and + strictcount(this.getFieldCand(name, depth, _)) = 1 + } + + Method getMethodAtDepth(string name, int depth) { + depth = min(int depthCand | this.hasMethodCand(name, _, depthCand)) and + result = unique(Method m | this.hasMethodCand(name, m, depth)) + } + + override predicate hasMethod(string name, SignatureType tp) { + exists(int mindepth | + mindepth = min(int depth | this.hasMethodCand(name, _, depth)) and + tp = unique(Method m | this.hasMethodCand(name, m, mindepth)).getType() + ) + } + + language[monotonicAggregates] + override string pp() { + result = + "struct { " + + concat(int i, string name, Type tp | + component_types(this, i, name, tp) + | + name + " " + tp.pp(), "; " order by i + ) + " }" + } + + override string toString() { result = "struct type" } +} + +/** A pointer type. */ +class PointerType extends @pointertype, CompositeType { + /** Gets the base type of this pointer type. */ + Type getBaseType() { base_type(this, result) } + + override Package getPackage() { result = this.getBaseType().getPackage() } + + override Method getMethod(string m) { + result = CompositeType.super.getMethod(m) + or + // https://golang.org/ref/spec#Method_sets: "the method set of a pointer type *T is + // the set of all methods declared with receiver *T or T" + result = this.getBaseType().getMethod(m) + or + // promoted methods from embedded types + exists(StructType s, Type embedded | + s = this.getBaseType().(NamedType).getUnderlyingType() and + s.hasOwnField(_, _, embedded, true) and + // ensure that `m` can be promoted + not s.hasOwnField(_, m, _, _) and + not exists(Method m2 | m2.getReceiverBaseType() = this.getBaseType() and m2.getName() = m) + | + result = embedded.getMethod(m) + or + // If S contains an embedded field T, the method set of *S includes promoted methods with receiver T or T* + not embedded instanceof PointerType and + result = embedded.getPointerType().getMethod(m) + or + // If S contains an embedded field *T, the method set of *S includes promoted methods with receiver T or *T + result = embedded.(PointerType).getBaseType().getMethod(m) + ) + } + + override string pp() { result = "* " + this.getBaseType().pp() } + + override string toString() { result = "pointer type" } +} + +private newtype TTypeSetTerm = + MkTypeSetTerm(TypeSetLiteralType tslit, int index) { component_types(tslit, index, _, _) } + +/** + * A term in a type set literal. + * + * Examples: + * ```go + * int + * ~string + * ``` + */ +class TypeSetTerm extends TTypeSetTerm { + boolean tilde; + Type tp; + + TypeSetTerm() { + exists(TypeSetLiteralType tslit, int index | + this = MkTypeSetTerm(tslit, index) and + ( + component_types(tslit, index, "", tp) and + tilde = false + or + component_types(tslit, index, "~", tp) and + tilde = true + ) + ) + } + + /** + * Holds if this term has a tilde in front of it. + * + * A tilde is used to indicate that the term refers to all types with a given + * underlying type. + */ + predicate hasTilde() { tilde = true } + + /** Gets the type of this term. */ + Type getType() { result = tp } + + /** Holds if `t` is in the type set of this term. */ + predicate includesType(Type t) { if tilde = false then t = tp else t.getUnderlyingType() = tp } + + /** Gets a pretty-printed representation of this term. */ + string pp() { + exists(string tildeStr | if tilde = true then tildeStr = "~" else tildeStr = "" | + result = tildeStr + tp.pp() + ) + } + + /** Gets a textual representation of this element. */ + string toString() { result = "type set term" } +} + +private TypeSetTerm getIntersection(TypeSetTerm term1, TypeSetTerm term2) { + term1.getType() = term2.getType() and + if term1.hasTilde() then result = term2 else result = term1 +} + +/** + * Gets a term in the intersection of type-set literals `a` and `b`. + */ +TypeSetTerm getTermInIntersection(TypeSetLiteralType a, TypeSetLiteralType b) { + result = getIntersection(a.getATerm(), b.getATerm()) +} + +/** + * A type set literal type, used when declaring a non-basic interface. May be a + * single term, consisting of either a type or a tilde followed by a type, or a + * union of terms. + * + * + * Examples: + * + * ```go + * int + * ~string + * int | ~string + * ``` + */ +class TypeSetLiteralType extends @typesetliteraltype, CompositeType { + /** Gets the `i`th term in this type set literal. */ + TypeSetTerm getTerm(int i) { result = MkTypeSetTerm(this, i) } + + /** Gets a term in this type set literal. */ + TypeSetTerm getATerm() { result = this.getTerm(_) } + + /** Holds if `t` is in the type set of this type set literal. */ + predicate includesType(Type t) { this.getATerm().includesType(t) } + + /** + * Gets the interface type of which this type-set literal is the only + * element, if it exists. + * + * It exists if it has been explicitly defined, as in + * `interface { int64 | uint64 }`, or if it has been implicitly created by + * using the type set literal directly as the bound in a type parameter + * declaration, as in `[T int64 | uint64]`. + */ + InterfaceType getInterfaceType() { + this = result.getDirectlyEmbeddedTypeSetLiteral(0) and + not exists(result.getDirectlyEmbeddedTypeSetLiteral(1)) and + hasNoMethods(result) and + not exists(result.getADirectlyEmbeddedInterface()) + } + + language[monotonicAggregates] + override string pp() { + result = concat(TypeSetTerm t, int i | t = this.getTerm(i) | t.pp(), " | " order by i) + } + + override string toString() { result = "type set literal type" } +} + +/** An interface type. */ +class InterfaceType extends @interfacetype, CompositeType { + /** Gets the type of method `name` of this interface type. */ + Type getMethodType(string name) { + // Note that negative indices correspond to embedded interfaces and type + // set literals. + exists(int i | i >= 0 | component_types(this, i, name, result)) + } + + override predicate hasMethod(string m, SignatureType t) { t = this.getMethodType(m) } + + /** + * Holds if `tp` is a directly embedded type with index `index`. + * + * `tp` (or its underlying type) is either a type set literal type or an + * interface type. + */ + private predicate hasDirectlyEmbeddedType(int index, Type tp) { + index >= 0 and component_types(this, -(index + 1), _, tp) + } + + /** + * Gets a type whose underlying type is an interface that is directly + * embedded into this interface. + * + * Note that the methods of the embedded interface are already considered + * as part of the method set of this interface. + */ + Type getADirectlyEmbeddedInterface() { + this.hasDirectlyEmbeddedType(_, result) and result.getUnderlyingType() instanceof InterfaceType + } + + /** + * Gets a type whose underlying type is an interface that is embedded into + * this interface. + * + * Note that the methods of the embedded interface are already considered + * as part of the method set of this interface. + */ + Type getAnEmbeddedInterface() { + result = this.getADirectlyEmbeddedInterface() or + result = + this.getADirectlyEmbeddedInterface() + .getUnderlyingType() + .(InterfaceType) + .getAnEmbeddedInterface() + } + + /** + * Holds if this interface type is (the underlying type of) `comparable`, or + * it embeds `comparable`. + */ + predicate isOrEmbedsComparable() { + this.getAnEmbeddedInterface() instanceof ComparableType or + this = any(ComparableType comparable).getUnderlyingType() + } + + /** + * Gets the type set literal with index `index` from the definition of this + * interface type. + * + * Note that the indexes are not contiguous. + */ + TypeSetLiteralType getDirectlyEmbeddedTypeSetLiteral(int index) { + hasDirectlyEmbeddedType(index, result) + } + + /** + * Gets a type set literal of this interface type. + * + * This includes type set literals of embedded interfaces. + */ + TypeSetLiteralType getAnEmbeddedTypeSetLiteral() { + result = this.getDirectlyEmbeddedTypeSetLiteral(_) or + result = + getADirectlyEmbeddedInterface() + .getUnderlyingType() + .(InterfaceType) + .getAnEmbeddedTypeSetLiteral() + } + + language[monotonicAggregates] + override string pp() { + exists(string comp, string sep1, string ts, string sep2, string meth | + // Note that the interface type underlying `comparable` will be printed + // as `interface { comparable }`, which is not entirely accurate, but + // also better than anything else I can think of. + (if this.isOrEmbedsComparable() then comp = " comparable" else comp = "") and + ts = + concat(TypeSetLiteralType tslit | + tslit = this.getAnEmbeddedTypeSetLiteral() + | + " " + tslit.pp(), ";" + ) and + meth = + concat(string name, Type tp | + tp = this.getMethodType(name) + | + " " + name + " " + tp.pp(), ";" order by name + ) and + (if comp != "" and ts != "" then sep1 = ";" else sep1 = "") and + if + (comp != "" or ts != "") and + meth != "" + then sep2 = ";" + else sep2 = "" + | + result = "interface {" + comp + sep1 + ts + sep2 + meth + " }" + ) + } + + override string toString() { result = "interface type" } +} + +// This predicate is needed for performance reasons. +pragma[noinline] +private predicate hasNoMethods(InterfaceType i) { not i.hasMethod(_, _) } + +/** + * A basic interface type. + * + * A basic interface is an interface that does not specify any type set + * literals, and which does not embed any non-basic interfaces. The special + * interface `comparable` is not a basic interface. + */ +class BasicInterfaceType extends InterfaceType { + BasicInterfaceType() { + not exists(this.getAnEmbeddedTypeSetLiteral()) and + not this.isOrEmbedsComparable() + } + + override string toString() { result = "basic interface type" } +} + +/** + * An empty interface type. + * + * Note that by we have to be careful to exclude the underlying type of + * `comparable`. This is done by extending `BasicInterfaceType`. + */ +class EmptyInterfaceType extends BasicInterfaceType { + EmptyInterfaceType() { hasNoMethods(this) } +} + +/** + * The predeclared `comparable` type. + */ +class ComparableType extends NamedType { + ComparableType() { this.getName() = "comparable" } +} + +/** A tuple type. */ +class TupleType extends @tupletype, CompositeType { + /** Gets the `i`th component type of this tuple type. */ + Type getComponentType(int i) { component_types(this, i, _, result) } + + language[monotonicAggregates] + override string pp() { + result = + "(" + concat(int i, Type tp | tp = this.getComponentType(i) | tp.pp(), ", " order by i) + ")" + } + + override string toString() { result = "tuple type" } +} + +/** A signature type. */ +class SignatureType extends @signaturetype, CompositeType { + /** Gets the `i`th parameter type of this signature type. */ + Type getParameterType(int i) { i >= 0 and component_types(this, i + 1, _, result) } + + /** Gets the `i`th result type of this signature type. */ + Type getResultType(int i) { i >= 0 and component_types(this, -(i + 1), _, result) } + + /** Gets the number of parameters specified by this signature. */ + int getNumParameter() { result = count(int i | exists(this.getParameterType(i))) } + + /** Gets the number of results specified by this signature. */ + int getNumResult() { result = count(int i | exists(this.getResultType(i))) } + + /** Holds if this signature type is variadic. */ + predicate isVariadic() { variadic(this) } + + language[monotonicAggregates] + override string pp() { + result = + "func(" + concat(int i, Type tp | tp = this.getParameterType(i) | tp.pp(), ", " order by i) + + ") " + concat(int i, Type tp | tp = this.getResultType(i) | tp.pp(), ", " order by i) + } + + override string toString() { result = "signature type" } +} + +/** A map type. */ +class MapType extends @maptype, CompositeType { + /** Gets the key type of this map type. */ + Type getKeyType() { key_type(this, result) } + + /** Gets the value type of this map type. */ + Type getValueType() { element_type(this, result) } + + override string pp() { result = "[" + this.getKeyType().pp() + "]" + this.getValueType().pp() } + + override string toString() { result = "map type" } +} + +/** A channel type. */ +class ChanType extends @chantype, CompositeType { + /** Gets the element type of this channel type. */ + Type getElementType() { element_type(this, result) } + + /** Holds if this channel can send data. */ + predicate canSend() { none() } + + /** Holds if this channel can receive data. */ + predicate canReceive() { none() } +} + +/** A channel type that can only send. */ +class SendChanType extends @sendchantype, ChanType { + override predicate canSend() { any() } + + override string pp() { result = "chan<- " + this.getElementType().pp() } + + override string toString() { result = "send-channel type" } +} + +/** A channel type that can only receive. */ +class RecvChanType extends @recvchantype, ChanType { + override predicate canReceive() { any() } + + override string pp() { result = "<-chan " + this.getElementType().pp() } + + override string toString() { result = "receive-channel type" } +} + +/** A channel type that can both send and receive. */ +class SendRecvChanType extends @sendrcvchantype, ChanType { + override predicate canSend() { any() } + + override predicate canReceive() { any() } + + override string pp() { result = "chan " + this.getElementType().pp() } + + override string toString() { result = "send-receive-channel type" } +} + +/** A named type. */ +class NamedType extends @namedtype, CompositeType { + /** Gets the type which this type is defined to be. */ + Type getBaseType() { underlying_type(this, result) } + + override Method getMethod(string m) { + result = CompositeType.super.getMethod(m) + or + methodhosts(result, this) and + result.getName() = m + or + // handle promoted methods + exists(StructType s, Type embedded | + s = this.getBaseType() and + s.hasOwnField(_, _, embedded, true) and + // ensure `m` can be promoted + not s.hasOwnField(_, m, _, _) and + not exists(Method m2 | m2.getReceiverType() = this and m2.getName() = m) + | + // If S contains an embedded field T, the method set of S includes promoted methods with receiver T + result = embedded.getMethod(m) + or + // If S contains an embedded field *T, the method set of S includes promoted methods with receiver T or *T + result = embedded.(PointerType).getBaseType().getMethod(m) + ) + } + + override Type getUnderlyingType() { result = this.getBaseType().getUnderlyingType() } +} + +/** + * A type that implements the builtin interface `error`. + */ +class ErrorType extends Type { + ErrorType() { this.implements(Builtin::error().getType().getUnderlyingType()) } +} + +/** + * Gets the name of a method in the method set of `i`. + * + * This is used to restrict the set of interfaces to consider in the definition of `implements`, + * so it does not matter which method name is chosen (we use the lexicographically least). + */ +private string getExampleMethodName(InterfaceType i) { result = min(string m | i.hasMethod(m, _)) } diff --git a/go/ql/lib/semmle/go/Util.qll b/go/ql/lib/semmle/go/Util.qll new file mode 100644 index 00000000000..ff597cdcc28 --- /dev/null +++ b/go/ql/lib/semmle/go/Util.qll @@ -0,0 +1,18 @@ +/** This module provides general utility classes and predicates. */ + +/** + * A Boolean value. + * + * This is a self-binding convenience wrapper for `boolean`. + */ +class Boolean extends boolean { + Boolean() { this = true or this = false } +} + +/** + * Gets a regexp pattern that matches common top-level domain names. + */ +string commonTLD() { + // according to ranking by http://google.com/search?q=site:.<> + result = "(?:com|org|edu|gov|uk|net|io)(?![a-z0-9])" +} diff --git a/go/ql/lib/semmle/go/VariableWithFields.qll b/go/ql/lib/semmle/go/VariableWithFields.qll new file mode 100644 index 00000000000..adb5e2b308a --- /dev/null +++ b/go/ql/lib/semmle/go/VariableWithFields.qll @@ -0,0 +1,198 @@ +/** Provides the `VariableWithFields` class, for working with variables with a chain of field or element accesses chained to it. */ + +import go + +private newtype TVariableWithFields = + TVariableRoot(Variable v) or + TVariableFieldStep(VariableWithFields base, Field f) { + exists(fieldAccessPathAux(base, f)) or exists(fieldWriteAccessPathAux(base, f)) + } or + TVariableElementStep(VariableWithFields base, string e) { + exists(elementAccessPathAux(base, e)) or exists(elementWriteAccessPathAux(base, e)) + } + +/** + * Gets a representation of the write target `wt` as a variable with fields value if there is one. + */ +private TVariableWithFields writeAccessPath(IR::WriteTarget wt) { + exists(Variable v | wt = v.getAWrite().getLhs() | result = TVariableRoot(v)) + or + exists(VariableWithFields base, Field f | wt = fieldWriteAccessPathAux(base, f) | + result = TVariableFieldStep(base, f) + ) + or + exists(VariableWithFields base, string e | wt = elementWriteAccessPathAux(base, e) | + result = TVariableElementStep(base, e) + ) +} + +/** + * Gets a representation of `insn` as a variable with fields value if there is one. + */ +private TVariableWithFields accessPath(IR::Instruction insn) { + exists(Variable v | insn = v.getARead().asInstruction() | result = TVariableRoot(v)) + or + exists(VariableWithFields base, Field f | insn = fieldAccessPathAux(base, f) | + result = TVariableFieldStep(base, f) + ) + or + exists(VariableWithFields base, string e | insn = elementAccessPathAux(base, e) | + result = TVariableElementStep(base, e) + ) +} + +/** + * Gets an IR instruction that reads a field `f` from a node that is represented + * by variable with fields value `base`. + */ +private IR::Instruction fieldAccessPathAux(TVariableWithFields base, Field f) { + exists(IR::FieldReadInstruction fr, IR::Instruction frb | + fr.getBase() = frb or + fr.getBase() = IR::implicitDerefInstruction(frb.(IR::EvalInstruction).getExpr()) + | + base = accessPath(frb) and + f = fr.getField() and + result = fr + ) +} + +/** + * Gets an IR write target that represents a field `f` from a node that is represented + * by variable with fields value `base`. + */ +private IR::WriteTarget fieldWriteAccessPathAux(TVariableWithFields base, Field f) { + exists(IR::FieldTarget ft, IR::Instruction ftb | + ft.getBase() = ftb or + ft.getBase() = IR::implicitDerefInstruction(ftb.(IR::EvalInstruction).getExpr()) + | + base = accessPath(ftb) and + ft.getField() = f and + result = ft + ) +} + +/** + * Gets an IR instruction that reads an element `e` from a node that is represented + * by variable with fields value `base`. + */ +private IR::Instruction elementAccessPathAux(TVariableWithFields base, string e) { + exists(IR::ElementReadInstruction er, IR::EvalInstruction erb | + er.getBase() = erb or + er.getBase() = IR::implicitDerefInstruction(erb.getExpr()) + | + base = accessPath(erb) and + e = er.getIndex().getExactValue() and + result = er + ) +} + +/** + * Gets an IR write target that represents an element `e` from a node that is represented + * by variable with fields value `base`. + */ +private IR::WriteTarget elementWriteAccessPathAux(TVariableWithFields base, string e) { + exists(IR::ElementTarget et, IR::EvalInstruction etb | + et.getBase() = etb or + et.getBase() = IR::implicitDerefInstruction(etb.getExpr()) + | + base = accessPath(etb) and + e = et.getIndex().getExactValue() and + result = et + ) +} + +/** A variable with zero or more fields or elements read from it. */ +class VariableWithFields extends TVariableWithFields { + /** + * Gets the variable corresponding to the base of this variable with fields. + * + * For example, the variable corresponding to `a` for the variable with fields + * corresponding to `a.b[c]`. + */ + Variable getBaseVariable() { this.getParent*() = TVariableRoot(result) } + + /** + * Gets the variable with fields corresponding to the parent of this variable with fields. + * + * For example, the variable with fields corresponding to `a.b` for the variable with fields + * corresponding to `a.b[c]`. + */ + VariableWithFields getParent() { + exists(VariableWithFields base | + this = TVariableFieldStep(base, _) or this = TVariableElementStep(base, _) + | + result = base + ) + } + + /** Gets a use that refers to this variable with fields. */ + DataFlow::Node getAUse() { this = accessPath(result.asInstruction()) } + + /** Gets the type of this variable with fields. */ + Type getType() { + exists(IR::Instruction acc | this = accessPath(acc) | result = acc.getResultType()) + } + + /** Gets a textual representation of this element. */ + string toString() { + exists(Variable var | this = TVariableRoot(var) | result = "(" + var + ")") + or + exists(VariableWithFields base, Field f | this = TVariableFieldStep(base, f) | + result = base + "." + f.getName() + ) + or + exists(VariableWithFields base, string e | this = TVariableElementStep(base, e) | + result = base + "[" + e + "]" + ) + } + + /** + * Gets the qualified name of the source variable or variable and fields that this represents. + * + * For example, for the variable with fields that represents the field `a.b[c]`, this would get the string + * `"a.b.c"`. + */ + string getQualifiedName() { + exists(Variable v | this = TVariableRoot(v) | result = v.getName()) + or + exists(VariableWithFields base, Field f | this = TVariableFieldStep(base, f) | + result = base.getQualifiedName() + "." + f.getName() + ) + or + exists(VariableWithFields base, string e | this = TVariableElementStep(base, e) | + result = base.getQualifiedName() + "." + e.replaceAll(".", "\\.") + ) + } + + /** + * Gets a write of this variable with fields. + */ + Write getAWrite() { this = writeAccessPath(result.getLhs()) } + + /** + * Gets the field that is the last step of this variable with fields, if any. + * + * For example, the field `c` for the variable with fields `a.b.c`. + */ + Field getField() { this = TVariableFieldStep(_, result) } + + /** + * Gets the element that this variable with fields reads, if any. + * + * For example, the string value of `c` for the variable with fields `a.b[c]`. + */ + string getElement() { this = TVariableElementStep(_, result) } + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getBaseVariable().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} diff --git a/go/ql/lib/semmle/go/concepts/GeneratedFile.qll b/go/ql/lib/semmle/go/concepts/GeneratedFile.qll new file mode 100644 index 00000000000..dec6872120c --- /dev/null +++ b/go/ql/lib/semmle/go/concepts/GeneratedFile.qll @@ -0,0 +1,50 @@ +/** Provides a class for generated files. */ + +import go + +/** Provides a class for generated files. */ +module GeneratedFile { + /** + * A file that has been generated. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `GeneratedFile` instead. + */ + abstract class Range extends File { } + + private string generatorCommentRegex() { + result = + [ + "Generated By\\b.*\\bDo not edit", + "This (file|class|interface|art[ei]fact) (was|is|(has been)) (?:auto[ -]?)?gener(e?)ated", + "Any modifications to this file will be lost", + "This (file|class|interface|art[ei]fact) (was|is) (?:mechanically|automatically) generated", + "The following code was (?:auto[ -]?)?generated (?:by|from)", "Autogenerated by Thrift", + "(Code g|G)enerated from .* by ANTLR" + ] + } + + private class CommentHeuristicGeneratedFile extends Range { + CommentHeuristicGeneratedFile() { + exists(Comment c | c.getFile() = this | + c.getText().regexpMatch("(?i).*\\b(" + concat(generatorCommentRegex(), "|") + ")\\b.*") + or + // regular expression recommended for Go code generators + // (https://golang.org/pkg/cmd/go/internal/generate/) + c.getText().regexpMatch("^\\s*Code generated .* DO NOT EDIT\\.\\s*$") + ) + } + } +} + +/** + * A file that has been generated. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `GeneratedFile::Range` instead. + */ +class GeneratedFile extends File { + GeneratedFile::Range self; + + GeneratedFile() { this = self } +} diff --git a/go/ql/lib/semmle/go/concepts/HTTP.qll b/go/ql/lib/semmle/go/concepts/HTTP.qll new file mode 100644 index 00000000000..89a716d4f1a --- /dev/null +++ b/go/ql/lib/semmle/go/concepts/HTTP.qll @@ -0,0 +1,380 @@ +/** + * Provides classes for working with HTTP-related concepts such as requests and responses. + */ + +import go + +/** Provides classes for modeling HTTP-related APIs. */ +module HTTP { + /** Provides a class for modeling new HTTP response-writer APIs. */ + module ResponseWriter { + /** + * A variable that is an HTTP response writer. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `HTTP::ResponseWriter` instead. + */ + abstract class Range extends Variable { + /** + * Gets a data-flow node that is a use of this response writer. + * + * Note that `PostUpdateNode`s for nodes that this predicate gets do not need to be + * included, as they are handled by the concrete `ResponseWriter`'s `getANode`. + */ + abstract DataFlow::Node getANode(); + } + } + + /** + * A variable that is an HTTP response writer. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `HTTP::ResponseWriter::Range` instead. + */ + class ResponseWriter extends Variable { + ResponseWriter::Range self; + + ResponseWriter() { this = self } + + /** Gets the body that is written in this HTTP response. */ + ResponseBody getBody() { result.getResponseWriter() = this } + + /** Gets a header write that is written in this HTTP response. */ + HeaderWrite getAHeaderWrite() { result.getResponseWriter() = this } + + /** Gets a redirect that is sent in this HTTP response. */ + Redirect getARedirect() { result.getResponseWriter() = this } + + /** Gets a data-flow node that is a use of this response writer. */ + DataFlow::Node getANode() { + result = self.getANode() or + result.(DataFlow::PostUpdateNode).getPreUpdateNode() = self.getANode() + } + } + + /** Provides a class for modeling new HTTP header-write APIs. */ + module HeaderWrite { + /** + * A data-flow node that represents a write to an HTTP header. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `HTTP::HeaderWrite` instead. + */ + abstract class Range extends DataFlow::ExprNode { + /** Gets the (lower-case) name of a header set by this definition. */ + string getHeaderName() { result = this.getName().getStringValue().toLowerCase() } + + /** Gets the value of the header set by this definition. */ + string getHeaderValue() { + result = this.getValue().getStringValue() + or + result = this.getValue().getIntValue().toString() + } + + /** Holds if this header write defines the header `header`. */ + predicate definesHeader(string header, string value) { + header = this.getHeaderName() and + value = this.getHeaderValue() + } + + /** + * Gets the node representing the name of the header defined by this write. + * + * Note that a `HeaderWrite` targeting a constant header (e.g. a routine that always + * sets the `Content-Type` header) may not have such a node, so callers should use + * `getHeaderName` in preference to this method). + */ + abstract DataFlow::Node getName(); + + /** Gets the node representing the value of the header defined by this write. */ + abstract DataFlow::Node getValue(); + + /** Gets the response writer associated with this header write, if any. */ + abstract ResponseWriter getResponseWriter(); + } + } + + /** + * A data-flow node that represents a write to an HTTP header. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `HTTP::HeaderWrite::Range` instead. + */ + class HeaderWrite extends DataFlow::ExprNode { + HeaderWrite::Range self; + + HeaderWrite() { this = self } + + /** Gets the (lower-case) name of a header set by this definition. */ + string getHeaderName() { result = self.getHeaderName() } + + /** Gets the value of the header set by this definition. */ + string getHeaderValue() { result = self.getHeaderValue() } + + /** Holds if this header write defines the header `header`. */ + predicate definesHeader(string header, string value) { self.definesHeader(header, value) } + + /** + * Gets the node representing the name of the header defined by this write. + * + * Note that a `HeaderWrite` targeting a constant header (e.g. a routine that always + * sets the `Content-Type` header) may not have such a node, so callers should use + * `getHeaderName` in preference to this method). + */ + DataFlow::Node getName() { result = self.getName() } + + /** Gets the node representing the value of the header defined by this write. */ + DataFlow::Node getValue() { result = self.getValue() } + + /** Gets the response writer associated with this header write, if any. */ + ResponseWriter getResponseWriter() { result = self.getResponseWriter() } + } + + /** A data-flow node whose value is written to an HTTP header. */ + class Header extends DataFlow::Node { + HeaderWrite hw; + + Header() { + this = hw.getName() + or + this = hw.getValue() + } + + /** Gets the response writer associated with this header write, if any. */ + ResponseWriter getResponseWriter() { result = hw.getResponseWriter() } + } + + /** A data-flow node whose value is written to the value of an HTTP header. */ + class HeaderValue extends Header { + HeaderValue() { this = hw.getValue() } + } + + /** A data-flow node whose value is written to the name of an HTTP header. */ + class HeaderName extends Header { + HeaderName() { this = hw.getName() } + } + + /** Provides a class for modeling new HTTP request-body APIs. */ + module RequestBody { + /** + * An expression representing a reader whose content is written to an HTTP request body. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `HTTP::RequestBody` instead. + */ + abstract class Range extends DataFlow::Node { } + } + + /** + * An expression representing a reader whose content is written to an HTTP request body. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `HTTP::RequestBody::Range` instead. + */ + class RequestBody extends DataFlow::Node { + RequestBody::Range self; + + RequestBody() { this = self } + } + + /** Provides a class for modeling new HTTP response-body APIs. */ + module ResponseBody { + /** + * An expression which is written to an HTTP response body. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `HTTP::ResponseBody` instead. + */ + abstract class Range extends DataFlow::Node { + /** Gets the response writer associated with this header write, if any. */ + abstract ResponseWriter getResponseWriter(); + + /** Gets a content-type associated with this body. */ + string getAContentType() { + exists(HTTP::HeaderWrite hw | hw = this.getResponseWriter().getAHeaderWrite() | + hw.getHeaderName() = "content-type" and + result = hw.getHeaderValue() + ) + or + result = this.getAContentTypeNode().getStringValue() + } + + /** Gets a dataflow node for a content-type associated with this body. */ + DataFlow::Node getAContentTypeNode() { + exists(HTTP::HeaderWrite hw | hw = this.getResponseWriter().getAHeaderWrite() | + hw.getHeaderName() = "content-type" and + result = hw.getValue() + ) + } + } + } + + /** + * An expression which is written to an HTTP response body. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `HTTP::ResponseBody::Range` instead. + */ + class ResponseBody extends DataFlow::Node { + ResponseBody::Range self; + + ResponseBody() { this = self } + + /** Gets the response writer associated with this header write, if any. */ + ResponseWriter getResponseWriter() { result = self.getResponseWriter() } + + /** Gets a content-type associated with this body. */ + string getAContentType() { result = self.getAContentType() } + + /** Gets a dataflow node for a content-type associated with this body. */ + DataFlow::Node getAContentTypeNode() { result = self.getAContentTypeNode() } + } + + /** Provides a class for modeling new HTTP template response-body APIs. */ + module TemplateResponseBody { + /** + * An expression which is written to an HTTP response body via a template execution. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `HTTP::ResponseBody` instead. + */ + abstract class Range extends ResponseBody::Range { + /** Gets the read of the variable inside the template where this value is read. */ + abstract HtmlTemplate::TemplateRead getRead(); + } + } + + /** + * An expression which is written to an HTTP response body via a template execution. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `HTTP::TemplateResponseBody::Range` instead. + */ + class TemplateResponseBody extends ResponseBody { + override TemplateResponseBody::Range self; + + TemplateResponseBody() { this = self } + + /** Gets the read of the variable inside the template where this value is read. */ + HtmlTemplate::TemplateRead getRead() { result = self.getRead() } + } + + /** Provides a class for modeling new HTTP client request APIs. */ + module ClientRequest { + /** + * A call that performs a request to a URL. + * + * Example: An HTTP POST request is a client request that sends some + * `data` to a `url`, where both the headers and the body of the request + * contribute to the `data`. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `HTTP::ClientRequest` instead. + */ + abstract class Range extends DataFlow::Node { + /** + * Gets the URL of the request. + */ + abstract DataFlow::Node getUrl(); + } + } + + /** + * A call that performs a request to a URL. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `HTTP::ClientRequest::Range` instead. + */ + class ClientRequest extends DataFlow::Node { + ClientRequest::Range self; + + ClientRequest() { this = self } + + /** + * Gets the URL of the request. + */ + DataFlow::Node getUrl() { result = self.getUrl() } + } + + /** Provides a class for modeling new HTTP redirect APIs. */ + module Redirect { + /** + * An HTTP redirect. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `HTTP::Redirect` instead. + */ + abstract class Range extends DataFlow::Node { + /** Gets the data-flow node representing the URL being redirected to. */ + abstract DataFlow::Node getUrl(); + + /** Gets the response writer that this redirect is sent on, if any. */ + abstract ResponseWriter getResponseWriter(); + } + + /** + * An assignment of the HTTP Location header, which indicates the location for a + * redirect. + */ + private class LocationHeaderSet extends Range, HeaderWrite { + LocationHeaderSet() { this.getHeaderName() = "location" } + + override DataFlow::Node getUrl() { result = this.getValue() } + + override ResponseWriter getResponseWriter() { result = HeaderWrite.super.getResponseWriter() } + } + + /** + * An HTTP request attribute that is generally not attacker-controllable for + * open redirect exploits; for example, a form field submitted in a POST request. + */ + abstract class UnexploitableSource extends DataFlow::Node { } + } + + /** + * An HTTP redirect. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `HTTP::Redirect::Range` instead. + */ + class Redirect extends DataFlow::Node { + Redirect::Range self; + + Redirect() { this = self } + + /** Gets the data-flow node representing the URL being redirected to. */ + DataFlow::Node getUrl() { result = self.getUrl() } + + /** Gets the response writer that this redirect is sent on, if any. */ + ResponseWriter getResponseWriter() { result = self.getResponseWriter() } + } + + /** Provides a class for modeling new HTTP handler APIs. */ + module RequestHandler { + /** + * An HTTP request handler. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `HTTP::RequestHandler` instead. + */ + abstract class Range extends DataFlow::Node { + /** Gets a node that is used in a check that is tested before this handler is run. */ + abstract predicate guardedBy(DataFlow::Node check); + } + } + + /** + * An HTTP request handler. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `HTTP::RequestHandler::Range` instead. + */ + class RequestHandler extends DataFlow::Node { + RequestHandler::Range self; + + RequestHandler() { this = self } + + /** Gets a node that is used in a check that is tested before this handler is run. */ + predicate guardedBy(DataFlow::Node check) { self.guardedBy(check) } + } +} diff --git a/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll b/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll new file mode 100644 index 00000000000..39b7590d8a3 --- /dev/null +++ b/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll @@ -0,0 +1,200 @@ +/** + * Provides classes for working with basic blocks. + */ + +import go +private import ControlFlowGraphImpl + +/** + * Holds if `nd` starts a new basic block. + */ +private predicate startsBB(ControlFlow::Node nd) { + count(nd.getAPredecessor()) != 1 + or + nd.getAPredecessor().isBranch() +} + +/** + * Holds if the first node of basic block `succ` is a control flow + * successor of the last node of basic block `bb`. + */ +private predicate succBB(BasicBlock bb, BasicBlock succ) { succ = bb.getLastNode().getASuccessor() } + +/** + * Holds if the first node of basic block `bb` is a control flow + * successor of the last node of basic block `pre`. + */ +private predicate predBB(BasicBlock bb, BasicBlock pre) { succBB(pre, bb) } + +/** Holds if `bb` is an entry basic block. */ +private predicate entryBB(BasicBlock bb) { bb.getFirstNode().isEntryNode() } + +/** Holds if `bb` is an exit basic block. */ +private predicate exitBB(BasicBlock bb) { bb.getLastNode().isExitNode() } + +cached +private module Internal { + /** + * Holds if `succ` is a control flow successor of `nd` within the same basic block. + */ + private predicate intraBBSucc(ControlFlow::Node nd, ControlFlow::Node succ) { + succ = nd.getASuccessor() and + not startsBB(succ) + } + + /** + * Holds if `nd` is the `i`th node in basic block `bb`. + * + * In other words, `i` is the shortest distance from a node `bb` + * that starts a basic block to `nd` along the `intraBBSucc` relation. + */ + cached + predicate bbIndex(BasicBlock bb, ControlFlow::Node nd, int i) = + shortestDistances(startsBB/1, intraBBSucc/2)(bb, nd, i) + + cached + int bbLength(BasicBlock bb) { result = strictcount(ControlFlow::Node nd | bbIndex(bb, nd, _)) } + + cached + predicate reachableBB(BasicBlock bb) { + entryBB(bb) + or + exists(BasicBlock predBB | succBB(predBB, bb) | reachableBB(predBB)) + } +} + +private import Internal + +/** Holds if `dom` is an immediate dominator of `bb`. */ +cached +private predicate bbIDominates(BasicBlock dom, BasicBlock bb) = + idominance(entryBB/1, succBB/2)(_, dom, bb) + +/** Holds if `dom` is an immediate post-dominator of `bb`. */ +cached +private predicate bbIPostDominates(BasicBlock dom, BasicBlock bb) = + idominance(exitBB/1, predBB/2)(_, dom, bb) + +/** + * A basic block, that is, a maximal straight-line sequence of control flow nodes + * without branches or joins. + * + * At the database level, a basic block is represented by its first control flow node. + */ +class BasicBlock extends TControlFlowNode { + BasicBlock() { startsBB(this) } + + /** Gets a basic block succeeding this one. */ + BasicBlock getASuccessor() { succBB(this, result) } + + /** Gets a basic block preceding this one. */ + BasicBlock getAPredecessor() { result.getASuccessor() = this } + + /** Gets a node in this block. */ + ControlFlow::Node getANode() { result = getNode(_) } + + /** Gets the node at the given position in this block. */ + ControlFlow::Node getNode(int pos) { bbIndex(this, result, pos) } + + /** Gets the first node in this block. */ + ControlFlow::Node getFirstNode() { result = this } + + /** Gets the last node in this block. */ + ControlFlow::Node getLastNode() { result = getNode(length() - 1) } + + /** Gets the length of this block. */ + int length() { result = bbLength(this) } + + /** Gets the basic block that immediately dominates this basic block. */ + ReachableBasicBlock getImmediateDominator() { bbIDominates(result, this) } + + /** Gets the innermost function or file to which this basic block belongs. */ + ControlFlow::Root getRoot() { result = getFirstNode().getRoot() } + + /** Gets a textual representation of this basic block. */ + string toString() { result = "basic block" } + + /** + * Holds if this basic block 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + getFirstNode().hasLocationInfo(filepath, startline, startcolumn, _, _) and + getLastNode().hasLocationInfo(_, _, _, endline, endcolumn) + } +} + +/** + * An entry basic block, that is, a basic block whose first node is an entry node. + */ +class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { entryBB(this) } +} + +/** + * A basic block that is reachable from an entry basic block. + */ +class ReachableBasicBlock extends BasicBlock { + ReachableBasicBlock() { reachableBB(this) } + + /** + * Holds if this basic block strictly dominates `bb`. + */ + cached + predicate strictlyDominates(ReachableBasicBlock bb) { bbIDominates+(this, bb) } + + /** + * Holds if this basic block dominates `bb`. + * + * This predicate is reflexive: each reachable basic block dominates itself. + */ + predicate dominates(ReachableBasicBlock bb) { + bb = this or + strictlyDominates(bb) + } + + /** + * Holds if this basic block strictly post-dominates `bb`. + */ + cached + predicate strictlyPostDominates(ReachableBasicBlock bb) { bbIPostDominates+(this, bb) } + + /** + * Holds if this basic block post-dominates `bb`. + * + * This predicate is reflexive: each reachable basic block post-dominates itself. + */ + predicate postDominates(ReachableBasicBlock bb) { + bb = this or + strictlyPostDominates(bb) + } +} + +/** + * A reachable basic block with more than one predecessor. + */ +class ReachableJoinBlock extends ReachableBasicBlock { + ReachableJoinBlock() { getFirstNode().isJoin() } + + /** + * Holds if this basic block belongs to the dominance frontier of `b`, that is + * `b` dominates a predecessor of this block, but not this block itself. + * + * Algorithm from Cooper et al., "A Simple, Fast Dominance Algorithm" (Figure 5), + * who in turn attribute it to Ferrante et al., "The program dependence graph and + * its use in optimization". + */ + predicate inDominanceFrontierOf(ReachableBasicBlock b) { + b = getAPredecessor() and not b = getImmediateDominator() + or + exists(ReachableBasicBlock prev | inDominanceFrontierOf(prev) | + b = prev.getImmediateDominator() and + not b = getImmediateDominator() + ) + } +} diff --git a/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll b/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll new file mode 100644 index 00000000000..51e03de3ab7 --- /dev/null +++ b/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll @@ -0,0 +1,290 @@ +/** + * Provides classes for working with a CFG-based program representation. + */ + +import go +private import ControlFlowGraphImpl + +/** Provides helper predicates for mapping btween CFG nodes and the AST. */ +module ControlFlow { + /** A file or function with which a CFG is associated. */ + class Root extends AstNode { + Root() { exists(this.(File).getADecl()) or exists(this.(FuncDef).getBody()) } + + /** Holds if `nd` belongs to this file or function. */ + predicate isRootOf(AstNode nd) { + this = nd.getEnclosingFunction() + or + not exists(nd.getEnclosingFunction()) and + this = nd.getFile() + } + + /** Gets the synthetic entry node of the CFG for this file or function. */ + EntryNode getEntryNode() { result = ControlFlow::entryNode(this) } + + /** Gets the synthetic exit node of the CFG for this file or function. */ + ExitNode getExitNode() { result = ControlFlow::exitNode(this) } + } + + /** + * A node in the intra-procedural control-flow graph of a Go function or file. + * + * Nodes correspond to expressions and statements that compute a value or perform + * an operation (as opposed to providing syntactic structure or type information). + * + * There are also synthetic entry and exit nodes for each Go function and file + * that mark the beginning and the end, respectively, of the execution of the + * function and the loading of the file. + */ + class Node extends TControlFlowNode { + /** Gets a node that directly follows this one in the control-flow graph. */ + Node getASuccessor() { result = CFG::succ(this) } + + /** Gets a node that directly precedes this one in the control-flow graph. */ + Node getAPredecessor() { this = result.getASuccessor() } + + /** Holds if this is a node with more than one successor. */ + predicate isBranch() { strictcount(getASuccessor()) > 1 } + + /** Holds if this is a node with more than one predecessor. */ + predicate isJoin() { strictcount(getAPredecessor()) > 1 } + + /** Holds if this is the first control-flow node in `subtree`. */ + predicate isFirstNodeOf(AstNode subtree) { CFG::firstNode(subtree, this) } + + /** Holds if this node is the (unique) entry node of a function or file. */ + predicate isEntryNode() { this instanceof MkEntryNode } + + /** Holds if this node is the (unique) exit node of a function or file. */ + predicate isExitNode() { this instanceof MkExitNode } + + /** Gets the basic block to which this node belongs. */ + BasicBlock getBasicBlock() { result.getANode() = this } + + /** Holds if this node dominates `dominee` in the control-flow graph. */ + pragma[inline] + predicate dominatesNode(ControlFlow::Node dominee) { + exists(ReachableBasicBlock thisbb, ReachableBasicBlock dbb, int i, int j | + this = thisbb.getNode(i) and dominee = dbb.getNode(j) + | + thisbb.strictlyDominates(dbb) + or + thisbb = dbb and i <= j + ) + } + + /** Gets the innermost function or file to which this node belongs. */ + Root getRoot() { none() } + + /** Gets the file to which this node belongs. */ + File getFile() { hasLocationInfo(result.getAbsolutePath(), _, _, _, _) } + + /** + * Gets a textual representation of this control flow node. + */ + string toString() { result = "control-flow node" } + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + filepath = "" and + startline = 0 and + startcolumn = 0 and + endline = 0 and + endcolumn = 0 + } + } + + /** + * A control-flow node that initializes or updates the value of a constant, a variable, + * a field, or an (array, slice, or map) element. + */ + class WriteNode extends Node { + IR::WriteInstruction self; + + WriteNode() { this = self } + + /** Gets the left-hand side of this write. */ + IR::WriteTarget getLhs() { result = self.getLhs() } + + /** Gets the right-hand side of this write. */ + DataFlow::Node getRhs() { self.getRhs() = result.asInstruction() } + + /** Holds if this node sets variable or constant `v` to `rhs`. */ + predicate writes(ValueEntity v, DataFlow::Node rhs) { self.writes(v, rhs.asInstruction()) } + + /** Holds if this node defines SSA variable `v` to be `rhs`. */ + predicate definesSsaVariable(SsaVariable v, DataFlow::Node rhs) { + self.getLhs().asSsaVariable() = v and + self.getRhs() = rhs.asInstruction() + } + + /** + * Holds if this node sets the value of field `f` on `base` (or its implicit dereference) to + * `rhs`. + * + * 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`. + */ + predicate writesField(DataFlow::Node base, Field f, DataFlow::Node rhs) { + exists(IR::FieldTarget trg | trg = self.getLhs() | + ( + trg.getBase() = base.asInstruction() or + trg.getBase() = MkImplicitDeref(base.asExpr()) + ) and + trg.getField() = f and + self.getRhs() = rhs.asInstruction() + ) + } + + /** + * 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`. + */ + predicate writesElement(DataFlow::Node base, DataFlow::Node index, DataFlow::Node rhs) { + exists(IR::ElementTarget trg | trg = self.getLhs() | + ( + trg.getBase() = base.asInstruction() or + trg.getBase() = MkImplicitDeref(base.asExpr()) + ) and + trg.getIndex() = index.asInstruction() and + self.getRhs() = rhs.asInstruction() + ) + } + + /** + * Holds if this node sets any field or element of `base` to `rhs`. + */ + predicate writesComponent(DataFlow::Node base, DataFlow::Node rhs) { + writesElement(base, _, rhs) or writesField(base, _, rhs) + } + } + + /** + * A control-flow node recording the fact that a certain expression has a known + * Boolean value at this point in the program. + */ + class ConditionGuardNode extends IR::Instruction, MkConditionGuardNode { + Expr cond; + boolean outcome; + + ConditionGuardNode() { this = MkConditionGuardNode(cond, outcome) } + + private predicate ensuresAux(Expr expr, boolean b) { + expr = cond and b = outcome + or + expr = any(ParenExpr par | ensuresAux(par, b)).getExpr() + or + expr = any(NotExpr ne | ensuresAux(ne, b.booleanNot())).getOperand() + or + expr = any(LandExpr land | ensuresAux(land, true)).getAnOperand() and + b = true + or + expr = any(LorExpr lor | ensuresAux(lor, false)).getAnOperand() and + b = false + } + + /** Holds if this guard ensures that the result of `nd` is `b`. */ + predicate ensures(DataFlow::Node nd, boolean b) { + ensuresAux(any(Expr e | nd = DataFlow::exprNode(e)), b) + } + + /** Holds if this guard ensures that `lesser <= greater + bias` holds. */ + predicate ensuresLeq(DataFlow::Node lesser, DataFlow::Node greater, int bias) { + exists(DataFlow::RelationalComparisonNode rel, boolean b | + ensures(rel, b) and + rel.leq(b, lesser, greater, bias) + ) + or + ensuresEq(lesser, greater) and + bias = 0 + } + + /** Holds if this guard ensures that `i = j` holds. */ + predicate ensuresEq(DataFlow::Node i, DataFlow::Node j) { + exists(DataFlow::EqualityTestNode eq, boolean b | + ensures(eq, b) and + eq.eq(b, i, j) + ) + } + + /** Holds if this guard ensures that `i != j` holds. */ + predicate ensuresNeq(DataFlow::Node i, DataFlow::Node j) { + exists(DataFlow::EqualityTestNode eq, boolean b | + ensures(eq, b.booleanNot()) and + eq.eq(b, i, j) + ) + } + + /** + * Holds if this guard dominates basic block `bb`, that is, the guard + * is known to hold at `bb`. + */ + predicate dominates(ReachableBasicBlock bb) { + this = bb.getANode() or + dominates(bb.getImmediateDominator()) + } + + /** + * Gets the condition whose outcome the guard concerns. + */ + Expr getCondition() { result = cond } + + override Root getRoot() { result.isRootOf(cond) } + + override string toString() { result = cond + " is " + outcome } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + cond.hasLocationInfo(filepath, _, _, startline, startcolumn) and + endline = startline and + endcolumn = startcolumn + } + } + + /** + * Gets the entry node of function or file `root`. + */ + Node entryNode(Root root) { result = MkEntryNode(root) } + + /** + * Gets the exit node of function or file `root`. + */ + Node exitNode(Root root) { result = MkExitNode(root) } + + /** + * Holds if the function `f` may return without panicking, exiting the process, or looping forever. + * + * This is defined conservatively, and so may also hold of a function that in fact + * cannot return normally, but never fails to hold of a function that can return normally. + */ + predicate mayReturnNormally(FuncDecl f) { CFG::mayReturnNormally(f.getBody()) } + + /** + * Holds if `pred` is the node for the case `testExpr` in an expression + * switch statement which is switching on `switchExpr`, and `succ` is the + * node to be executed next if the case test succeeds. + */ + predicate isSwitchCaseTestPassingEdge( + ControlFlow::Node pred, ControlFlow::Node succ, Expr switchExpr, Expr testExpr + ) { + CFG::isSwitchCaseTestPassingEdge(pred, succ, switchExpr, testExpr) + } +} + +class Write = ControlFlow::WriteNode; diff --git a/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll b/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll new file mode 100644 index 00000000000..25137f75a96 --- /dev/null +++ b/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll @@ -0,0 +1,2080 @@ +/** + * INTERNAL: Analyses should use module `ControlFlowGraph` instead. + * + * Provides predicates for building intra-procedural CFGs. + */ + +import go + +/** A block statement that is not the body of a `switch` or `select` statement. */ +class PlainBlock extends BlockStmt { + PlainBlock() { + not this = any(SwitchStmt sw).getBody() and not this = any(SelectStmt sel).getBody() + } +} + +private predicate notBlankIdent(Expr e) { not e instanceof BlankIdent } + +private predicate pureLvalue(ReferenceExpr e) { not e.isRvalue() } + +/** + * Holds if `e` is a branch condition, including the LHS of a short-circuiting binary operator. + */ +private predicate isCondRoot(Expr e) { + e = any(LogicalBinaryExpr lbe).getLeftOperand() + or + e = any(ForStmt fs).getCond() + or + e = any(IfStmt is).getCond() + or + e = any(ExpressionSwitchStmt ess | not exists(ess.getExpr())).getACase().getAnExpr() +} + +/** + * Holds if `e` is a branch condition or part of a logical binary expression contributing to a + * branch condition. + * + * For example, in `v := (x && y) || (z && w)`, `x` and `(x && y)` and `z` are branch conditions + * (`isCondRoot` holds of them), whereas this predicate also holds of `y` (contributes to condition + * `x && y`) but not of `w` (contributes to the value `v`, but not to any branch condition). + * + * In the context `if (x && y) || (z && w)` then the whole `(x && y) || (z && w)` is a branch condition + * as well as `x` and `(x && y)` and `z` as previously, and this predicate holds of all their + * subexpressions. + */ +private predicate isCond(Expr e) { + isCondRoot(e) or + e = any(LogicalBinaryExpr lbe | isCond(lbe)).getRightOperand() or + e = any(ParenExpr par | isCond(par)).getExpr() +} + +/** + * Holds if `e` implicitly reads the embedded field `implicitField`. + * + * The `index` is the distance from the promoted field. For example, if `A` contains an embedded + * field `B`, `B` contains an embedded field `C` and `C` contains the non-embedded field `x`. + * Then `a.x` implicitly reads `C` with index 1 and `B` with index 2. + */ +private predicate implicitFieldSelectionForField(PromotedSelector e, int index, Field implicitField) { + exists(StructType baseType, PromotedField child, int implicitFieldDepth | + baseType = e.getSelectedStructType() and + ( + e.refersTo(child) + or + implicitFieldSelectionForField(e, implicitFieldDepth + 1, child) + ) + | + child = baseType.getFieldOfEmbedded(implicitField, _, implicitFieldDepth + 1, _) and + exists(PromotedField explicitField, int explicitFieldDepth | + e.refersTo(explicitField) and baseType.getFieldAtDepth(_, explicitFieldDepth) = explicitField + | + index = explicitFieldDepth - implicitFieldDepth + ) + ) +} + +private predicate implicitFieldSelectionForMethod(PromotedSelector e, int index, Field implicitField) { + exists(StructType baseType, PromotedMethod method, int mDepth, int implicitFieldDepth | + baseType = e.getSelectedStructType() and + e.refersTo(method) and + baseType.getMethodAtDepth(_, mDepth) = method and + index = mDepth - implicitFieldDepth + | + method = baseType.getMethodOfEmbedded(implicitField, _, implicitFieldDepth + 1) + or + exists(PromotedField child | + child = baseType.getFieldOfEmbedded(implicitField, _, implicitFieldDepth + 1, _) and + implicitFieldSelectionForMethod(e, implicitFieldDepth + 1, child) + ) + ) +} + +/** + * A node in the intra-procedural control-flow graph of a Go function or file. + * + * There are two kinds of control-flow nodes: + * + * 1. Instructions: these are nodes that correspond to expressions and statements + * that compute a value or perform an operation (as opposed to providing syntactic + * structure or type information). + * 2. Synthetic nodes: + * - Entry and exit nodes for each Go function and file that mark the beginning and the end, + * respectively, of the execution of the function and the loading of the file; + * - Skip nodes that are semantic no-ops, but make CFG construction easier. + */ +cached +newtype TControlFlowNode = + /** + * A control-flow node that represents the evaluation of an expression. + */ + MkExprNode(Expr e) { CFG::hasEvaluationNode(e) } or + /** + * A control-flow node that represents the initialization of an element of a composite literal. + */ + MkLiteralElementInitNode(Expr e) { e = any(CompositeLit lit).getAnElement() } or + /** + * A control-flow node that represents the implicit index of an element in a slice or array literal. + */ + MkImplicitLiteralElementIndex(Expr e) { + exists(CompositeLit lit | not lit instanceof StructLit | + e = lit.getAnElement() and + not e instanceof KeyValueExpr + ) + } or + /** + * A control-flow node that represents a (single) assignment. + * + * Assignments with multiple left-hand sides are split up into multiple assignment nodes, + * one for each left-hand side. Assignments to `_` are not represented in the control-flow graph. + */ + MkAssignNode(AstNode assgn, int i) { + // the `i`th assignment in a (possibly multi-)assignment + notBlankIdent(assgn.(Assignment).getLhs(i)) + or + // the `i`th name declared in a (possibly multi-)declaration specifier + notBlankIdent(assgn.(ValueSpec).getNameExpr(i)) + or + // the assignment to the "key" variable in a `range` statement + notBlankIdent(assgn.(RangeStmt).getKey()) and i = 0 + or + // the assignment to the "value" variable in a `range` statement + notBlankIdent(assgn.(RangeStmt).getValue()) and i = 1 + } or + /** + * A control-flow node that represents the implicit right-hand side of a compound assignment. + * + * For example, the compound assignment `x += 1` has an implicit right-hand side `x + 1`. + */ + MkCompoundAssignRhsNode(CompoundAssignStmt assgn) or + /** + * A control-flow node that represents the `i`th component of a tuple expression `s`. + */ + MkExtractNode(AstNode s, int i) { + // in an assignment `x, y, z = tuple` + exists(Assignment assgn | + s = assgn and + exists(assgn.getRhs()) and + assgn.getNumLhs() > 1 and + exists(assgn.getLhs(i)) + ) + or + // in a declaration `var x, y, z = tuple` + exists(ValueSpec spec | + s = spec and + exists(spec.getInit()) and + spec.getNumName() > 1 and + exists(spec.getNameExpr(i)) + ) + or + // in a `range` statement + exists(RangeStmt rs | s = rs | + exists(rs.getKey()) and i = 0 + or + exists(rs.getValue()) and i = 1 + ) + or + // in a return statement `return f()` where `f` has multiple return values + exists(ReturnStmt ret, SignatureType rettp | + s = ret and + // the return statement has a single expression + exists(ret.getExpr()) and + // but the enclosing function has multiple results + rettp = ret.getEnclosingFunction().getType() and + rettp.getNumResult() > 1 and + exists(rettp.getResultType(i)) + ) + or + // in a call `f(g())` where `g` has multiple return values + exists(CallExpr outer, CallExpr inner | s = outer | + inner = outer.getArgument(0).stripParens() and + outer.getNumArgument() = 1 and + exists(inner.getType().(TupleType).getComponentType(i)) + ) + } or + /** + * A control-flow node that represents the zero value to which a variable without an initializer + * expression is initialized. + */ + MkZeroInitNode(ValueEntity v) { + exists(ValueSpec spec, int i | + not exists(spec.getAnInit()) and + spec.getNameExpr(i) = v.getDeclaration() + ) + or + exists(v.(ResultVariable).getFunction().getBody()) + } or + /** + * A control-flow node that represents a function declaration. + */ + MkFuncDeclNode(FuncDecl fd) or + /** + * A control-flow node that represents a `defer` statement. + */ + MkDeferNode(DeferStmt def) or + /** + * A control-flow node that represents a `go` statement. + */ + MkGoNode(GoStmt go) or + /** + * A control-flow node that represents the fact that `e` is known to evaluate to + * `outcome`. + */ + MkConditionGuardNode(Expr e, Boolean outcome) { isCondRoot(e) } or + /** + * A control-flow node that represents an increment or decrement statement. + */ + MkIncDecNode(IncDecStmt ids) or + /** + * A control-flow node that represents the implicit right-hand side of an increment or decrement statement. + */ + MkIncDecRhs(IncDecStmt ids) or + /** + * A control-flow node that represents the implicit operand 1 of an increment or decrement statement. + */ + MkImplicitOne(IncDecStmt ids) or + /** + * A control-flow node that represents a return from a function. + */ + MkReturnNode(ReturnStmt ret) or + /** + * A control-flow node that represents the implicit write to a named result variable in a return statement. + */ + MkResultWriteNode(ResultVariable var, int i, ReturnStmt ret) { + ret.getEnclosingFunction().getResultVar(i) = var and + exists(ret.getAnExpr()) + } or + /** + * A control-flow node that represents the implicit read of a named result variable upon returning from + * a function (after any deferred calls have been executed). + */ + MkResultReadNode(ResultVariable var) or + /** + * A control-flow node that represents a no-op. + * + * These control-flow nodes correspond to Go statements that have no runtime semantics other than potentially + * influencing control flow: the branching statements `continue`, `break`, `fallthrough` and `goto`; empty + * blocks; empty statements; and import and type declarations. + */ + MkSkipNode(AstNode skip) { + skip instanceof BranchStmt + or + skip instanceof EmptyStmt + or + skip.(PlainBlock).getNumStmt() = 0 + or + skip instanceof ImportDecl + or + skip instanceof TypeDecl + or + pureLvalue(skip) + or + skip.(CaseClause).getNumStmt() = 0 + or + skip.(CommClause).getNumStmt() = 0 + } or + /** + * A control-flow node that represents a `select` operation. + */ + MkSelectNode(SelectStmt sel) or + /** + * A control-flow node that represents a `send` operation. + */ + MkSendNode(SendStmt send) or + /** + * A control-flow node that represents the initialization of a parameter to its corresponding argument. + */ + MkParameterInit(Parameter parm) { exists(parm.getFunction().getBody()) } or + /** + * A control-flow node that represents the argument corresponding to a parameter. + */ + MkArgumentNode(Parameter parm) { exists(parm.getFunction().getBody()) } or + /** + * A control-flow node that represents the initialization of a result variable to its zero value. + */ + MkResultInit(ResultVariable rv) { exists(rv.getFunction().getBody()) } or + /** + * A control-flow node that represents the operation of retrieving the next (key, value) pair in a + * `range` statement, if any. + */ + MkNextNode(RangeStmt rs) or + /** + * A control-flow node that represents the implicit `true` expression in `switch { ... }`. + */ + MkImplicitTrue(ExpressionSwitchStmt stmt) { not exists(stmt.getExpr()) } or + /** + * A control-flow node that represents the implicit comparison or type check performed by + * the `i`th expression of a case clause `cc`. + */ + MkCaseCheckNode(CaseClause cc, int i) { exists(cc.getExpr(i)) } or + /** + * A control-flow node that represents the implicit lower bound of a slice expression. + */ + MkImplicitLowerSliceBound(SliceExpr sl) { not exists(sl.getLow()) } or + /** + * A control-flow node that represents the implicit upper bound of a simple slice expression. + */ + MkImplicitUpperSliceBound(SliceExpr sl) { not exists(sl.getHigh()) } or + /** + * A control-flow node that represents the implicit max bound of a simple slice expression. + */ + MkImplicitMaxSliceBound(SliceExpr sl) { not exists(sl.getMax()) } or + /** + * A control-flow node that represents the implicit dereference of the base in a field/method + * access, element access, or slice expression. + */ + MkImplicitDeref(Expr e) { + e.getType().getUnderlyingType() instanceof PointerType and + ( + exists(SelectorExpr sel | e = sel.getBase() | + // field accesses through a pointer always implicitly dereference + sel = any(Field f).getAReference() + or + // method accesses only dereference if the receiver is _not_ a pointer + exists(Method m, Type tp | + sel = m.getAReference() and + tp = m.getReceiver().getType().getUnderlyingType() and + not tp instanceof PointerType + ) + ) + or + e = any(IndexExpr ie).getBase() + or + e = any(SliceExpr se).getBase() + ) + } or + /** + * A control-flow node that represents the implicit selection of a field when + * accessing a promoted field. + * + * If that field has a pointer type then this control-flow node also + * represents an implicit dereference of it. + */ + MkImplicitFieldSelection(PromotedSelector e, int i, Field implicitField) { + implicitFieldSelectionForField(e, i, implicitField) or + implicitFieldSelectionForMethod(e, i, implicitField) + } or + /** + * A control-flow node that represents the start of the execution of a function or file. + */ + MkEntryNode(ControlFlow::Root root) or + /** + * A control-flow node that represents the end of the execution of a function or file. + */ + MkExitNode(ControlFlow::Root root) + +/** A representation of the target of a write. */ +newtype TWriteTarget = + /** A write target that is represented explicitly in the AST. */ + MkLhs(TControlFlowNode write, Expr lhs) { + exists(AstNode assgn, int i | write = MkAssignNode(assgn, i) | + lhs = assgn.(Assignment).getLhs(i).stripParens() + or + lhs = assgn.(ValueSpec).getNameExpr(i) + or + exists(RangeStmt rs | rs = assgn | + i = 0 and lhs = rs.getKey().stripParens() + or + i = 1 and lhs = rs.getValue().stripParens() + ) + ) + or + exists(IncDecStmt ids | write = MkIncDecNode(ids) | lhs = ids.getOperand().stripParens()) + or + exists(Parameter parm | write = MkParameterInit(parm) | lhs = parm.getDeclaration()) + or + exists(ResultVariable res | write = MkResultInit(res) | lhs = res.getDeclaration()) + } or + /** A write target for an element in a compound literal, viewed as a field write. */ + MkLiteralElementTarget(MkLiteralElementInitNode elt) or + /** A write target for a returned expression, viewed as a write to the corresponding result variable. */ + MkResultWriteTarget(MkResultWriteNode w) + +/** + * A control-flow node that represents a no-op. + * + * These control-flow nodes correspond to Go statements that have no runtime semantics other than + * potentially influencing control flow: the branching statements `continue`, `break`, + * `fallthrough` and `goto`; empty blocks; empty statements; and import and type declarations. + */ +class SkipNode extends ControlFlow::Node, MkSkipNode { + AstNode skip; + + SkipNode() { this = MkSkipNode(skip) } + + override ControlFlow::Root getRoot() { result.isRootOf(skip) } + + override string toString() { result = "skip" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + skip.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +/** + * A control-flow node that represents the start of the execution of a function or file. + */ +class EntryNode extends ControlFlow::Node, MkEntryNode { + ControlFlow::Root root; + + EntryNode() { this = MkEntryNode(root) } + + override ControlFlow::Root getRoot() { result = root } + + override string toString() { result = "entry" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + root.hasLocationInfo(filepath, startline, startcolumn, _, _) and + endline = startline and + endcolumn = startcolumn + } +} + +/** + * A control-flow node that represents the end of the execution of a function or file. + */ +class ExitNode extends ControlFlow::Node, MkExitNode { + ControlFlow::Root root; + + ExitNode() { this = MkExitNode(root) } + + override ControlFlow::Root getRoot() { result = root } + + override string toString() { result = "exit" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + root.hasLocationInfo(filepath, _, _, endline, endcolumn) and + endline = startline and + endcolumn = startcolumn + } +} + +/** + * Provides classes and predicates for computing the control-flow graph. + */ +cached +module CFG { + /** + * The target of a branch statement, which is either the label of a labeled statement or + * the special target `""` referring to the innermost enclosing loop or `switch`. + */ + private class BranchTarget extends string { + BranchTarget() { this = any(LabeledStmt ls).getLabel() or this = "" } + } + + private module BranchTarget { + /** Holds if this is the target of branch statement `stmt` or the label of compound statement `stmt`. */ + BranchTarget of(Stmt stmt) { + exists(BranchStmt bs | bs = stmt | + result = bs.getLabel() + or + not exists(bs.getLabel()) and result = "" + ) + or + exists(LabeledStmt ls | stmt = ls.getStmt() | result = ls.getLabel()) + or + (stmt instanceof LoopStmt or stmt instanceof SwitchStmt or stmt instanceof SelectStmt) and + result = "" + } + } + + private newtype TCompletion = + /** A completion indicating that an expression or statement was evaluated successfully. */ + Done() or + /** + * A completion indicating that an expression was successfully evaluated to Boolean value `b`. + * + * Note that many Boolean expressions are modeled as having completion `Done()` instead. + * Completion `Bool` is only used in contexts where the Boolean value can be determined. + */ + Bool(boolean b) { b = true or b = false } or + /** + * A completion indicating that execution of a (compound) statement ended with a `break` + * statement targeting the given label. + */ + Break(BranchTarget lbl) or + /** + * A completion indicating that execution of a (compound) statement ended with a `continue` + * statement targeting the given label. + */ + Continue(BranchTarget lbl) or + /** + * A completion indicating that execution of a (compound) statement ended with a `fallthrough` + * statement. + */ + Fallthrough() or + /** + * A completion indicating that execution of a (compound) statement ended with a `return` + * statement. + */ + Return() or + /** + * A completion indicating that execution of a statement or expression may have ended with + * a panic being raised. + */ + Panic() + + private Completion normalCompletion() { result.isNormal() } + + private class Completion extends TCompletion { + predicate isNormal() { this = Done() or this = Bool(_) } + + Boolean getOutcome() { this = Done() or this = Bool(result) } + + string toString() { + this = Done() and result = "normal" + or + exists(boolean b | this = Bool(b) | result = b.toString()) + or + exists(BranchTarget lbl | + this = Break(lbl) and result = "break " + lbl + or + this = Continue(lbl) and result = "continue " + lbl + ) + or + this = Fallthrough() and result = "fallthrough" + or + this = Return() and result = "return" + or + this = Panic() and result = "panic" + } + } + + /** + * Holds if `e` should have an evaluation node in the control-flow graph. + * + * Excluded expressions include those not evaluated at runtime (e.g. identifiers, type expressions) + * and some logical expressions that are expressed as control-flow edges rather than having a specific + * evaluation node. + */ + cached + predicate hasEvaluationNode(Expr e) { + // exclude expressions that do not denote a value + not e instanceof TypeExpr and + not e = any(FieldDecl f).getTag() and + not e instanceof KeyValueExpr and + not e = any(SelectorExpr sel).getSelector() and + not e = any(StructLit sl).getKey(_) and + not (e instanceof Ident and not e instanceof ReferenceExpr) and + not (e instanceof SelectorExpr and not e instanceof ReferenceExpr) and + not pureLvalue(e) and + // exclude parentheses, which are purely concrete syntax, and some logical binary expressions + // whose evaluation is implied by control-flow edges without requiring an evaluation node. + not isControlFlowStructural(e) and + // exclude expressions that are not evaluated at runtime + not e = any(ImportSpec is).getPathExpr() and + not e.getParent*() = any(ArrayTypeExpr ate).getLength() and + // sub-expressions of constant expressions are not evaluated (even if they don't look constant + // themselves) + not constRoot(e.getParent+()) + } + + /** + * Holds if `e` is an expression that purely serves grouping or control-flow purposes. + * + * Examples include parenthesized expressions and short-circuiting Boolean expressions used within + * a branch condition (`if` or `for` condition, or as part of a larger boolean expression, e.g. + * in `(x && y) || z`, the `&&` subexpression matches this predicate). + */ + private predicate isControlFlowStructural(Expr e) { + // Some logical binary operators do not need an evaluation node + // (for example, in `if x && y`, we evaluate `x` and then branch straight to either `y` or the + // `else` block, so there is no control-flow step where `x && y` is specifically calculated) + e instanceof LogicalBinaryExpr and + isCond(e) + or + // Purely concrete-syntactic structural expression: + e instanceof ParenExpr + } + + /** + * Gets a constant root, that is, an expression that is constant but whose parent expression is not. + * + * As an exception to the latter, for a control-flow structural expression such as `(c1)` or `c1 && c2` + * where `cn` are constants we still consider the `cn`s to be a constant roots, even though their parent + * expression is also constant. + */ + private predicate constRoot(Expr root) { + exists(Expr c | + c.isConst() and + not c.getParent().(Expr).isConst() and + root = stripStructural(c) + ) + } + + /** + * Strips off any control-flow structural components from `e`. + */ + private Expr stripStructural(Expr e) { + if isControlFlowStructural(e) then result = stripStructural(e.getAChildExpr()) else result = e + } + + private class ControlFlowTree extends AstNode { + predicate firstNode(ControlFlow::Node first) { none() } + + predicate lastNode(ControlFlow::Node last, Completion cmpl) { + // propagate abnormal completion from children + lastNode(this.getAChild(), last, cmpl) and + not cmpl.isNormal() + } + + predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + exists(int i | + lastNode(this.getChildTreeRanked(i), pred, normalCompletion()) and + firstNode(this.getChildTreeRanked(i + 1), succ) + ) + } + + final ControlFlowTree getChildTreeRanked(int i) { + exists(int j | + result = this.getChildTree(j) and + j = rank[i + 1](int k | exists(this.getChildTree(k))) + ) + } + + ControlFlowTree getFirstChildTree() { result = this.getChildTreeRanked(0) } + + ControlFlowTree getLastChildTree() { + result = max(ControlFlowTree ch, int j | ch = this.getChildTree(j) | ch order by j) + } + + ControlFlowTree getChildTree(int i) { none() } + } + + private class AtomicTree extends ControlFlowTree { + ControlFlow::Node nd; + Completion cmpl; + + AtomicTree() { + exists(Expr e | + e = this and + e.isConst() and + nd = mkExprOrSkipNode(this) + | + if e.isPlatformIndependentConstant() and exists(e.getBoolValue()) + then cmpl = Bool(e.getBoolValue()) + else cmpl = Done() + ) + or + this instanceof Ident and + not this.(Expr).isConst() and + nd = mkExprOrSkipNode(this) and + cmpl = Done() + or + this instanceof BreakStmt and + nd = MkSkipNode(this) and + cmpl = Break(BranchTarget::of(this)) + or + this instanceof ContinueStmt and + nd = MkSkipNode(this) and + cmpl = Continue(BranchTarget::of(this)) + or + this instanceof Decl and + nd = MkSkipNode(this) and + cmpl = Done() + or + this instanceof EmptyStmt and + nd = MkSkipNode(this) and + cmpl = Done() + or + this instanceof FallthroughStmt and + nd = MkSkipNode(this) and + cmpl = Fallthrough() + or + this instanceof FuncLit and + nd = MkExprNode(this) and + cmpl = Done() + or + this instanceof PlainBlock and + nd = MkSkipNode(this) and + cmpl = Done() + or + this instanceof SelectorExpr and + not this.(SelectorExpr).getBase() instanceof ValueExpr and + nd = mkExprOrSkipNode(this) and + cmpl = Done() + or + this instanceof GenericFunctionInstantiationExpr and + nd = MkExprNode(this) and + cmpl = Done() + } + + override predicate firstNode(ControlFlow::Node first) { first = nd } + + override predicate lastNode(ControlFlow::Node last, Completion c) { last = nd and c = cmpl } + } + + abstract private class PostOrderTree extends ControlFlowTree { + abstract ControlFlow::Node getNode(); + + Completion getCompletion() { result = Done() } + + override predicate firstNode(ControlFlow::Node first) { + firstNode(this.getFirstChildTree(), first) + or + not exists(this.getChildTree(_)) and + first = this.getNode() + } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + super.lastNode(last, cmpl) + or + last = this.getNode() and cmpl = this.getCompletion() + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + super.succ(pred, succ) + or + lastNode(this.getLastChildTree(), pred, normalCompletion()) and + succ = this.getNode() + } + } + + abstract private class PreOrderTree extends ControlFlowTree { + abstract ControlFlow::Node getNode(); + + override predicate firstNode(ControlFlow::Node first) { first = this.getNode() } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + super.lastNode(last, cmpl) + or + lastNode(this.getLastChildTree(), last, cmpl) + or + not exists(this.getChildTree(_)) and + last = this.getNode() and + cmpl = Done() + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + super.succ(pred, succ) + or + pred = this.getNode() and + firstNode(this.getFirstChildTree(), succ) + } + } + + private class WrapperTree extends ControlFlowTree { + WrapperTree() { + this instanceof ConstDecl or + this instanceof DeclStmt or + this instanceof ExprStmt or + this instanceof KeyValueExpr or + this instanceof LabeledStmt or + this instanceof ParenExpr or + this instanceof PlainBlock or + this instanceof VarDecl + } + + override predicate firstNode(ControlFlow::Node first) { + firstNode(this.getFirstChildTree(), first) + } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + super.lastNode(last, cmpl) + or + lastNode(this.getLastChildTree(), last, cmpl) + or + exists(LoopStmt ls | this = ls.getBody() | + lastNode(this, last, Continue(BranchTarget::of(ls))) and + cmpl = Done() + ) + } + + override ControlFlowTree getChildTree(int i) { + i = 0 and result = this.(DeclStmt).getDecl() + or + i = 0 and result = this.(ExprStmt).getExpr() + or + result = this.(GenDecl).getSpec(i) + or + exists(KeyValueExpr kv | kv = this | + not kv.getLiteral() instanceof StructLit and + i = 0 and + result = kv.getKey() + or + i = 1 and result = kv.getValue() + ) + or + i = 0 and result = this.(LabeledStmt).getStmt() + or + i = 0 and result = this.(ParenExpr).getExpr() + or + result = this.(PlainBlock).getStmt(i) + } + } + + private class AssignmentTree extends ControlFlowTree { + AssignmentTree() { + this instanceof Assignment or + this instanceof ValueSpec + } + + Expr getLhs(int i) { + result = this.(Assignment).getLhs(i) or + result = this.(ValueSpec).getNameExpr(i) + } + + int getNumLhs() { + result = this.(Assignment).getNumLhs() or + result = this.(ValueSpec).getNumName() + } + + Expr getRhs(int i) { + result = this.(Assignment).getRhs(i) or + result = this.(ValueSpec).getInit(i) + } + + int getNumRhs() { + result = this.(Assignment).getNumRhs() or + result = this.(ValueSpec).getNumInit() + } + + predicate isExtractingAssign() { this.getNumRhs() = 1 and this.getNumLhs() > 1 } + + override predicate firstNode(ControlFlow::Node first) { + not this instanceof RecvStmt and + firstNode(this.getLhs(0), first) + } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + ControlFlowTree.super.lastNode(last, cmpl) + or + ( + last = max(int i | | this.epilogueNode(i) order by i) + or + not exists(this.epilogueNode(_)) and + lastNode(this.getLastSubExprInEvalOrder(), last, normalCompletion()) + ) and + cmpl = Done() + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + ControlFlowTree.super.succ(pred, succ) + or + exists(int i | lastNode(this.getLhs(i), pred, normalCompletion()) | + firstNode(this.getLhs(i + 1), succ) + or + not this instanceof RecvStmt and + i = this.getNumLhs() - 1 and + ( + firstNode(this.getRhs(0), succ) + or + not exists(this.getRhs(_)) and + succ = this.epilogueNodeRanked(0) + ) + ) + or + exists(int i | + lastNode(this.getRhs(i), pred, normalCompletion()) and + firstNode(this.getRhs(i + 1), succ) + ) + or + not this instanceof RecvStmt and + lastNode(this.getRhs(this.getNumRhs() - 1), pred, normalCompletion()) and + succ = this.epilogueNodeRanked(0) + or + exists(int i | + pred = this.epilogueNodeRanked(i) and + succ = this.epilogueNodeRanked(i + 1) + ) + } + + ControlFlow::Node epilogueNodeRanked(int i) { + exists(int j | + result = this.epilogueNode(j) and + j = rank[i + 1](int k | exists(this.epilogueNode(k))) + ) + } + + private Expr getSubExprInEvalOrder(int evalOrder) { + if evalOrder < this.getNumLhs() + then result = this.getLhs(evalOrder) + else result = this.getRhs(evalOrder - this.getNumLhs()) + } + + private Expr getLastSubExprInEvalOrder() { + result = max(int i | | this.getSubExprInEvalOrder(i) order by i) + } + + private ControlFlow::Node epilogueNode(int i) { + i = -1 and + result = MkCompoundAssignRhsNode(this) + or + exists(int j | + result = MkExtractNode(this, j) and + i = 2 * j + or + result = MkZeroInitNode(any(ValueEntity v | this.getLhs(j) = v.getDeclaration())) and + i = 2 * j + or + result = MkAssignNode(this, j) and + i = 2 * j + 1 + ) + } + } + + private class BinaryExprTree extends PostOrderTree, BinaryExpr { + override ControlFlow::Node getNode() { result = MkExprNode(this) } + + private predicate equalityTestMayPanic() { + this instanceof EqualityTestExpr and + exists(Type t | + t = this.getAnOperand().getType().getUnderlyingType() and + ( + t instanceof InterfaceType or // panic due to comparison of incomparable interface values + t instanceof StructType or // may contain an interface-typed field + t instanceof ArrayType // may be an array of interface values + ) + ) + } + + override Completion getCompletion() { + result = PostOrderTree.super.getCompletion() + or + // runtime panic due to division by zero or comparison of incomparable interface values + (this instanceof DivExpr or this.equalityTestMayPanic()) and + not this.(Expr).isConst() and + result = Panic() + } + + override ControlFlowTree getChildTree(int i) { + i = 0 and result = this.getLeftOperand() + or + i = 1 and result = this.getRightOperand() + } + } + + private class LogicalBinaryExprTree extends BinaryExprTree, LogicalBinaryExpr { + boolean shortCircuit; + + LogicalBinaryExprTree() { + this instanceof LandExpr and shortCircuit = false + or + this instanceof LorExpr and shortCircuit = true + } + + private ControlFlow::Node getGuard(boolean outcome) { + result = MkConditionGuardNode(this.getLeftOperand(), outcome) + } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + lastNode(this.getAnOperand(), last, cmpl) and + not cmpl.isNormal() + or + if isCond(this) + then ( + last = this.getGuard(shortCircuit) and + cmpl = Bool(shortCircuit) + or + lastNode(this.getRightOperand(), last, cmpl) + ) else ( + last = MkExprNode(this) and + cmpl = Done() + ) + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + exists(Completion lcmpl | + lastNode(this.getLeftOperand(), pred, lcmpl) and + succ = this.getGuard(lcmpl.getOutcome()) + ) + or + pred = this.getGuard(shortCircuit.booleanNot()) and + firstNode(this.getRightOperand(), succ) + or + not isCond(this) and + ( + pred = this.getGuard(shortCircuit) and + succ = MkExprNode(this) + or + exists(Completion rcmpl | + lastNode(this.getRightOperand(), pred, rcmpl) and + rcmpl.isNormal() and + succ = MkExprNode(this) + ) + ) + } + } + + private class CallExprTree extends PostOrderTree, CallExpr { + private predicate isSpecial() { + this = any(DeferStmt defer).getCall() or + this = any(GoStmt go).getCall() + } + + override ControlFlow::Node getNode() { + not this.isSpecial() and + result = MkExprNode(this) + } + + override Completion getCompletion() { + (not exists(this.getTarget()) or this.getTarget().mayReturnNormally()) and + result = Done() + or + (not exists(this.getTarget()) or this.getTarget().mayPanic()) and + result = Panic() + } + + override ControlFlowTree getChildTree(int i) { + i = 0 and result = this.getCalleeExpr() + or + result = this.getArgument(i - 1) and + // calls to `make` and `new` can have type expressions as arguments + not result instanceof TypeExpr + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + // interpose implicit argument destructuring nodes between last argument + // and call itself; this is for cases like `f(g())` where `g` has multiple + // results + exists(ControlFlow::Node mid | PostOrderTree.super.succ(pred, mid) | + if mid = this.getNode() then succ = this.getEpilogueNode(0) else succ = mid + ) + or + exists(int i | + pred = this.getEpilogueNode(i) and + succ = this.getEpilogueNode(i + 1) + ) + } + + private ControlFlow::Node getEpilogueNode(int i) { + result = MkExtractNode(this, i) + or + i = max(int j | exists(MkExtractNode(this, j))) + 1 and + result = this.getNode() + or + not exists(MkExtractNode(this, _)) and + i = 0 and + result = this.getNode() + } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + PostOrderTree.super.lastNode(last, cmpl) + or + this.isSpecial() and + lastNode(this.getLastChildTree(), last, cmpl) + } + } + + private class CaseClauseTree extends ControlFlowTree, CaseClause { + private ControlFlow::Node getExprStart(int i) { + firstNode(this.getExpr(i), result) + or + this.getExpr(i) instanceof TypeExpr and + result = MkCaseCheckNode(this, i) + } + + ControlFlow::Node getExprEnd(int i, Boolean outcome) { + exists(Expr e | e = this.getExpr(i) | + result = MkConditionGuardNode(e, outcome) + or + not exists(MkConditionGuardNode(e, _)) and + result = MkCaseCheckNode(this, i) + ) + } + + private ControlFlow::Node getBodyStart() { + firstNode(this.getStmt(0), result) or result = MkSkipNode(this) + } + + override predicate firstNode(ControlFlow::Node first) { + first = this.getExprStart(0) + or + not exists(this.getAnExpr()) and + first = this.getBodyStart() + } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + ControlFlowTree.super.lastNode(last, cmpl) + or + // TODO: shouldn't be here + last = this.getExprEnd(this.getNumExpr() - 1, false) and + cmpl = Bool(false) + or + last = MkSkipNode(this) and + cmpl = Done() + or + lastNode(this.getStmt(this.getNumStmt() - 1), last, cmpl) + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + ControlFlowTree.super.succ(pred, succ) + or + exists(int i | + lastNode(this.getExpr(i), pred, normalCompletion()) and + succ = MkCaseCheckNode(this, i) + or + // visit guard node if there is one + pred = MkCaseCheckNode(this, i) and + succ = this.getExprEnd(i, _) and + succ != pred // this avoids self-loops if there isn't a guard node + or + pred = this.getExprEnd(i, false) and + succ = this.getExprStart(i + 1) + or + this.isPassingEdge(i, pred, succ, _) + ) + } + + predicate isPassingEdge(int i, ControlFlow::Node pred, ControlFlow::Node succ, Expr testExpr) { + pred = this.getExprEnd(i, true) and + succ = this.getBodyStart() and + testExpr = this.getExpr(i) + } + + override ControlFlowTree getChildTree(int i) { result = this.getStmt(i) } + } + + private class CommClauseTree extends ControlFlowTree, CommClause { + override predicate firstNode(ControlFlow::Node first) { firstNode(this.getComm(), first) } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + ControlFlowTree.super.lastNode(last, cmpl) + or + last = MkSkipNode(this) and + cmpl = Done() + or + lastNode(this.getStmt(this.getNumStmt() - 1), last, cmpl) + } + + override ControlFlowTree getChildTree(int i) { result = this.getStmt(i) } + } + + private class CompositeLiteralTree extends ControlFlowTree, CompositeLit { + private ControlFlow::Node getElementInit(int i) { + result = MkLiteralElementInitNode(this.getElement(i)) + } + + private ControlFlow::Node getElementStart(int i) { + exists(Expr elt | elt = this.getElement(i) | + result = MkImplicitLiteralElementIndex(elt) + or + (elt instanceof KeyValueExpr or this instanceof StructLit) and + firstNode(this.getElement(i), result) + ) + } + + override predicate firstNode(ControlFlow::Node first) { first = MkExprNode(this) } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + ControlFlowTree.super.lastNode(last, cmpl) + or + last = this.getElementInit(this.getNumElement() - 1) and + cmpl = Done() + or + not exists(this.getElement(_)) and + last = MkExprNode(this) and + cmpl = Done() + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + this.firstNode(pred) and + succ = this.getElementStart(0) + or + exists(int i | + pred = MkImplicitLiteralElementIndex(this.getElement(i)) and + firstNode(this.getElement(i), succ) + or + lastNode(this.getElement(i), pred, normalCompletion()) and + succ = this.getElementInit(i) + or + pred = this.getElementInit(i) and + succ = this.getElementStart(i + 1) + ) + } + } + + private class ConversionExprTree extends PostOrderTree, ConversionExpr { + override Completion getCompletion() { + // conversions of a slice to an array pointer are the only kind that may panic + this.getType().(PointerType).getBaseType() instanceof ArrayType and + result = Panic() + or + result = Done() + } + + override ControlFlow::Node getNode() { result = MkExprNode(this) } + + override ControlFlowTree getChildTree(int i) { i = 0 and result = this.getOperand() } + } + + private class DeferStmtTree extends PostOrderTree, DeferStmt { + override ControlFlow::Node getNode() { result = MkDeferNode(this) } + + override ControlFlowTree getChildTree(int i) { i = 0 and result = this.getCall() } + } + + private class FuncDeclTree extends PostOrderTree, FuncDecl { + override ControlFlow::Node getNode() { result = MkFuncDeclNode(this) } + + override ControlFlowTree getChildTree(int i) { i = 0 and result = this.getNameExpr() } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + // override to prevent panic propagation out of function declarations + last = this.getNode() and cmpl = Done() + } + } + + private class GoStmtTree extends PostOrderTree, GoStmt { + override ControlFlow::Node getNode() { result = MkGoNode(this) } + + override ControlFlowTree getChildTree(int i) { i = 0 and result = this.getCall() } + } + + private class IfStmtTree extends ControlFlowTree, IfStmt { + private ControlFlow::Node getGuard(boolean outcome) { + result = MkConditionGuardNode(this.getCond(), outcome) + } + + override predicate firstNode(ControlFlow::Node first) { + firstNode(this.getInit(), first) + or + not exists(this.getInit()) and + firstNode(this.getCond(), first) + } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + ControlFlowTree.super.lastNode(last, cmpl) + or + lastNode(this.getThen(), last, cmpl) + or + lastNode(this.getElse(), last, cmpl) + or + not exists(this.getElse()) and + last = this.getGuard(false) and + cmpl = Done() + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + lastNode(this.getInit(), pred, normalCompletion()) and + firstNode(this.getCond(), succ) + or + exists(Completion condCmpl | + lastNode(this.getCond(), pred, condCmpl) and + succ = MkConditionGuardNode(this.getCond(), condCmpl.getOutcome()) + ) + or + pred = this.getGuard(true) and + firstNode(this.getThen(), succ) + or + pred = this.getGuard(false) and + firstNode(this.getElse(), succ) + } + } + + private class IndexExprTree extends ControlFlowTree, IndexExpr { + override predicate firstNode(ControlFlow::Node first) { firstNode(this.getBase(), first) } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + ControlFlowTree.super.lastNode(last, cmpl) + or + // panic due to `nil` dereference + last = MkImplicitDeref(this.getBase()) and + cmpl = Panic() + or + last = mkExprOrSkipNode(this) and + (cmpl = Done() or cmpl = Panic()) + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + lastNode(this.getBase(), pred, normalCompletion()) and + ( + succ = MkImplicitDeref(this.getBase()) + or + not exists(MkImplicitDeref(this.getBase())) and + firstNode(this.getIndex(), succ) + ) + or + pred = MkImplicitDeref(this.getBase()) and + firstNode(this.getIndex(), succ) + or + lastNode(this.getIndex(), pred, normalCompletion()) and + succ = mkExprOrSkipNode(this) + } + } + + private class LoopTree extends ControlFlowTree, LoopStmt { + BranchTarget getLabel() { result = BranchTarget::of(this) } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + exists(Completion inner | lastNode(this.getBody(), last, inner) and not inner.isNormal() | + if inner = Break(this.getLabel()) + then cmpl = Done() + else + if inner = Continue(this.getLabel()) + then none() + else cmpl = inner + ) + } + } + + private class FileTree extends ControlFlowTree, File { + FileTree() { exists(this.getADecl()) } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { none() } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + ControlFlowTree.super.succ(pred, succ) + or + pred = MkEntryNode(this) and + firstNode(this.getDecl(0), succ) + or + exists(int i, Completion inner | lastNode(this.getDecl(i), pred, inner) | + not inner.isNormal() + or + i = this.getNumDecl() - 1 + ) and + succ = MkExitNode(this) + } + + override ControlFlowTree getChildTree(int i) { result = this.getDecl(i) } + } + + private class ForTree extends LoopTree, ForStmt { + private ControlFlow::Node getGuard(boolean outcome) { + result = MkConditionGuardNode(this.getCond(), outcome) + } + + override predicate firstNode(ControlFlow::Node first) { + firstNode(this.getFirstChildTree(), first) + } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + LoopTree.super.lastNode(last, cmpl) + or + lastNode(this.getInit(), last, cmpl) and + not cmpl.isNormal() + or + lastNode(this.getCond(), last, cmpl) and + not cmpl.isNormal() + or + lastNode(this.getPost(), last, cmpl) and + not cmpl.isNormal() + or + last = this.getGuard(false) and + cmpl = Done() + } + + override ControlFlowTree getChildTree(int i) { + i = 0 and result = this.getInit() + or + i = 1 and result = this.getCond() + or + i = 2 and result = this.getBody() + or + i = 3 and result = this.getPost() + or + i = 4 and result = this.getCond() + or + i = 5 and result = this.getBody() + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + exists(int i, ControlFlowTree predTree, Completion cmpl | + predTree = this.getChildTreeRanked(i) and + lastNode(predTree, pred, cmpl) and + cmpl.isNormal() + | + if predTree = this.getCond() + then succ = this.getGuard(cmpl.getOutcome()) + else firstNode(this.getChildTreeRanked(i + 1), succ) + ) + or + pred = this.getGuard(true) and + firstNode(this.getBody(), succ) + } + } + + private class FuncDefTree extends ControlFlowTree, FuncDef { + FuncDefTree() { exists(this.getBody()) } + + pragma[noinline] + private MkEntryNode getEntry() { result = MkEntryNode(this) } + + private Parameter getParameterRanked(int i) { + result = rank[i + 1](Parameter p, int j | p = this.getParameter(j) | p order by j) + } + + private ControlFlow::Node getPrologueNode(int i) { + i = -1 and result = this.getEntry() + or + exists(int numParm, int numRes | + numParm = count(this.getParameter(_)) and + numRes = count(this.getResultVar(_)) + | + exists(int j, Parameter p | p = this.getParameterRanked(j) | + i = 2 * j and result = MkArgumentNode(p) + or + i = 2 * j + 1 and result = MkParameterInit(p) + ) + or + exists(int j, ResultVariable v | v = this.getResultVar(j) | + i = 2 * numParm + 2 * j and + result = MkZeroInitNode(v) + or + i = 2 * numParm + 2 * j + 1 and + result = MkResultInit(v) + ) + or + i = 2 * numParm + 2 * numRes and + firstNode(this.getBody(), result) + ) + } + + private ControlFlow::Node getEpilogueNode(int i) { + result = MkResultReadNode(this.getResultVar(i)) + or + i = count(this.getAResultVar()) and + result = MkExitNode(this) + } + + pragma[noinline] + private predicate firstDefer(ControlFlow::Node nd) { + exists(DeferStmt defer | + nd = MkExprNode(defer.getCall()) and + // `defer` can be the first `defer` statement executed + // there is always a predecessor node because the `defer`'s call is always + // evaluated before the defer statement itself + MkDeferNode(defer) = succ(notDeferSucc*(this.getEntry())) + ) + } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { none() } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + exists(int i | + pred = this.getPrologueNode(i) and + succ = this.getPrologueNode(i + 1) + ) + or + exists(GotoStmt goto, LabeledStmt ls | + pred = MkSkipNode(goto) and + this = goto.getEnclosingFunction() and + this = ls.getEnclosingFunction() and + goto.getLabel() = ls.getLabel() and + firstNode(ls, succ) + ) + or + exists(Completion cmpl | + lastNode(this.getBody(), pred, cmpl) and + // last node of function body can be reached without going through a `defer` statement + pred = notDeferSucc*(this.getEntry()) + | + // panic goes directly to exit, non-panic reads result variables first + if cmpl = Panic() then succ = MkExitNode(this) else succ = this.getEpilogueNode(0) + ) + or + lastNode(this.getBody(), pred, _) and + exists(DeferStmt defer | defer = this.getADeferStmt() | + succ = MkExprNode(defer.getCall()) and + // the last `DeferStmt` executed before pred is this `defer` + pred = notDeferSucc*(MkDeferNode(defer)) + ) + or + exists(DeferStmt predDefer, DeferStmt succDefer | + predDefer = this.getADeferStmt() and + succDefer = this.getADeferStmt() + | + // reversed because `defer`s are executed in LIFO order + MkDeferNode(predDefer) = nextDefer(MkDeferNode(succDefer)) and + pred = MkExprNode(predDefer.getCall()) and + succ = MkExprNode(succDefer.getCall()) + ) + or + this.firstDefer(pred) and + ( + // conservatively assume that we might either panic (and hence skip the result reads) + // or not + succ = MkExitNode(this) + or + succ = this.getEpilogueNode(0) + ) + or + exists(int i | + pred = this.getEpilogueNode(i) and + succ = this.getEpilogueNode(i + 1) + ) + } + } + + private class GotoTree extends ControlFlowTree, GotoStmt { + override predicate firstNode(ControlFlow::Node first) { first = MkSkipNode(this) } + } + + private class IncDecTree extends ControlFlowTree, IncDecStmt { + override predicate firstNode(ControlFlow::Node first) { firstNode(this.getOperand(), first) } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + ControlFlowTree.super.lastNode(last, cmpl) + or + last = MkIncDecNode(this) and + cmpl = Done() + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + lastNode(this.getOperand(), pred, normalCompletion()) and + succ = MkImplicitOne(this) + or + pred = MkImplicitOne(this) and + succ = MkIncDecRhs(this) + or + pred = MkIncDecRhs(this) and + succ = MkIncDecNode(this) + } + } + + private class RangeTree extends LoopTree, RangeStmt { + override predicate firstNode(ControlFlow::Node first) { firstNode(this.getDomain(), first) } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + LoopTree.super.lastNode(last, cmpl) + or + last = MkNextNode(this) and + cmpl = Done() + or + lastNode(this.getKey(), last, cmpl) and + not cmpl.isNormal() + or + lastNode(this.getValue(), last, cmpl) and + not cmpl.isNormal() + or + lastNode(this.getDomain(), last, cmpl) and + not cmpl.isNormal() + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + lastNode(this.getDomain(), pred, normalCompletion()) and + succ = MkNextNode(this) + or + pred = MkNextNode(this) and + ( + firstNode(this.getKey(), succ) + or + not exists(this.getKey()) and + firstNode(this.getBody(), succ) + ) + or + lastNode(this.getKey(), pred, normalCompletion()) and + ( + firstNode(this.getValue(), succ) + or + not exists(this.getValue()) and + succ = MkExtractNode(this, 0) + ) + or + lastNode(this.getValue(), pred, normalCompletion()) and + succ = MkExtractNode(this, 0) + or + pred = MkExtractNode(this, 0) and + ( + if exists(this.getValue()) + then succ = MkExtractNode(this, 1) + else + if exists(MkAssignNode(this, 0)) + then succ = MkAssignNode(this, 0) + else + if exists(MkAssignNode(this, 1)) + then succ = MkAssignNode(this, 1) + else firstNode(this.getBody(), succ) + ) + or + pred = MkExtractNode(this, 1) and + ( + if exists(MkAssignNode(this, 0)) + then succ = MkAssignNode(this, 0) + else + if exists(MkAssignNode(this, 1)) + then succ = MkAssignNode(this, 1) + else firstNode(this.getBody(), succ) + ) + or + pred = MkAssignNode(this, 0) and + ( + if exists(MkAssignNode(this, 1)) + then succ = MkAssignNode(this, 1) + else firstNode(this.getBody(), succ) + ) + or + pred = MkAssignNode(this, 1) and + firstNode(this.getBody(), succ) + or + exists(Completion inner | + lastNode(this.getBody(), pred, inner) and + (inner.isNormal() or inner = Continue(BranchTarget::of(this))) and + succ = MkNextNode(this) + ) + } + } + + private class RecvStmtTree extends ControlFlowTree, RecvStmt { + override predicate firstNode(ControlFlow::Node first) { + firstNode(this.getExpr().getOperand(), first) + } + } + + private class ReturnStmtTree extends PostOrderTree, ReturnStmt { + override ControlFlow::Node getNode() { result = MkReturnNode(this) } + + override Completion getCompletion() { result = Return() } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + exists(int i | + lastNode(this.getExpr(i), pred, normalCompletion()) and + succ = this.complete(i) + or + pred = MkExtractNode(this, i) and + succ = this.after(i) + or + pred = MkResultWriteNode(_, i, this) and + succ = this.next(i) + ) + } + + private ControlFlow::Node complete(int i) { + result = MkExtractNode(this, i) + or + not exists(MkExtractNode(this, _)) and + result = this.after(i) + } + + private ControlFlow::Node after(int i) { + result = MkResultWriteNode(_, i, this) + or + not exists(MkResultWriteNode(_, i, this)) and + result = this.next(i) + } + + private ControlFlow::Node next(int i) { + firstNode(this.getExpr(i + 1), result) + or + exists(MkExtractNode(this, _)) and + result = this.complete(i + 1) + or + i + 1 = this.getEnclosingFunction().getType().getNumResult() and + result = this.getNode() + } + + override ControlFlowTree getChildTree(int i) { result = this.getExpr(i) } + } + + private class SelectStmtTree extends ControlFlowTree, SelectStmt { + private BranchTarget getLabel() { result = BranchTarget::of(this) } + + override predicate firstNode(ControlFlow::Node first) { + firstNode(this.getNonDefaultCommClause(0), first) + or + this.getNumNonDefaultCommClause() = 0 and + first = MkSelectNode(this) + } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + exists(Completion inner | lastNode(this.getACommClause(), last, inner) | + if inner = Break(this.getLabel()) then cmpl = Done() else cmpl = inner + ) + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + ControlFlowTree.super.succ(pred, succ) + or + exists(CommClause cc, int i, Stmt comm | + cc = this.getNonDefaultCommClause(i) and + comm = cc.getComm() and + ( + comm instanceof RecvStmt and + lastNode(comm.(RecvStmt).getExpr().getOperand(), pred, normalCompletion()) + or + comm instanceof SendStmt and + lastNode(comm.(SendStmt).getValue(), pred, normalCompletion()) + ) + | + firstNode(this.getNonDefaultCommClause(i + 1), succ) + or + i = this.getNumNonDefaultCommClause() - 1 and + succ = MkSelectNode(this) + ) + or + pred = MkSelectNode(this) and + exists(CommClause cc, Stmt comm | + cc = this.getNonDefaultCommClause(_) and comm = cc.getComm() + | + comm instanceof RecvStmt and + succ = MkExprNode(comm.(RecvStmt).getExpr()) + or + comm instanceof SendStmt and + succ = MkSendNode(comm) + ) + or + pred = MkSelectNode(this) and + exists(CommClause cc | cc = this.getDefaultCommClause() | + firstNode(cc.getStmt(0), succ) + or + succ = MkSkipNode(cc) + ) + or + exists(CommClause cc, RecvStmt recv | cc = this.getCommClause(_) and recv = cc.getComm() | + pred = MkExprNode(recv.getExpr()) and + ( + firstNode(recv.getLhs(0), succ) + or + not exists(recv.getLhs(0)) and + (firstNode(cc.getStmt(0), succ) or succ = MkSkipNode(cc)) + ) + or + lastNode(recv.getLhs(0), pred, normalCompletion()) and + not exists(recv.getLhs(1)) and + ( + succ = MkAssignNode(recv, 0) + or + not exists(MkAssignNode(recv, 0)) and + (firstNode(cc.getStmt(0), succ) or succ = MkSkipNode(cc)) + ) + or + lastNode(recv.getLhs(1), pred, normalCompletion()) and + succ = MkExtractNode(recv, 0) + or + ( + pred = MkAssignNode(recv, 0) and + not exists(MkExtractNode(recv, 1)) + or + pred = MkExtractNode(recv, 1) and + not exists(MkAssignNode(recv, 1)) + or + pred = MkAssignNode(recv, 1) + ) and + (firstNode(cc.getStmt(0), succ) or succ = MkSkipNode(cc)) + ) + or + exists(CommClause cc, SendStmt ss | + cc = this.getCommClause(_) and + ss = cc.getComm() and + pred = MkSendNode(ss) + | + firstNode(cc.getStmt(0), succ) + or + succ = MkSkipNode(cc) + ) + } + } + + private class SelectorExprTree extends ControlFlowTree, SelectorExpr { + SelectorExprTree() { this.getBase() instanceof ValueExpr } + + override predicate firstNode(ControlFlow::Node first) { firstNode(this.getBase(), first) } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + ControlFlowTree.super.lastNode(last, cmpl) + or + // panic due to `nil` dereference + last = MkImplicitDeref(this.getBase()) and + cmpl = Panic() + or + last = mkExprOrSkipNode(this) and + cmpl = Done() + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + exists(int i | pred = this.getStepWithRank(i) and succ = this.getStepWithRank(i + 1)) + } + + private ControlFlow::Node getStepOrdered(int i) { + i = -2 and lastNode(this.getBase(), result, normalCompletion()) + or + i = -1 and result = MkImplicitDeref(this.getBase()) + or + exists(int maxIndex | + maxIndex = max(int k | k = 0 or exists(MkImplicitFieldSelection(this, k, _))) + | + result = MkImplicitFieldSelection(this, maxIndex - i, _) + or + i = maxIndex and + result = mkExprOrSkipNode(this) + ) + } + + private ControlFlow::Node getStepWithRank(int i) { + exists(int j | + result = this.getStepOrdered(j) and + j = rank[i + 1](int k | exists(this.getStepOrdered(k))) + ) + } + } + + private class SendStmtTree extends ControlFlowTree, SendStmt { + override predicate firstNode(ControlFlow::Node first) { firstNode(this.getChannel(), first) } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + ControlFlowTree.super.lastNode(last, cmpl) + or + last = MkSendNode(this) and + (cmpl = Done() or cmpl = Panic()) + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + ControlFlowTree.super.succ(pred, succ) + or + not this = any(CommClause cc).getComm() and + lastNode(this.getValue(), pred, normalCompletion()) and + succ = MkSendNode(this) + } + + override ControlFlowTree getChildTree(int i) { + i = 0 and result = this.getChannel() + or + i = 1 and result = this.getValue() + } + } + + private class SliceExprTree extends ControlFlowTree, SliceExpr { + override predicate firstNode(ControlFlow::Node first) { firstNode(this.getBase(), first) } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + ControlFlowTree.super.lastNode(last, cmpl) + or + // panic due to `nil` dereference + last = MkImplicitDeref(this.getBase()) and + cmpl = Panic() + or + last = MkExprNode(this) and + (cmpl = Done() or cmpl = Panic()) + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + ControlFlowTree.super.succ(pred, succ) + or + lastNode(this.getBase(), pred, normalCompletion()) and + ( + succ = MkImplicitDeref(this.getBase()) + or + not exists(MkImplicitDeref(this.getBase())) and + (firstNode(this.getLow(), succ) or succ = MkImplicitLowerSliceBound(this)) + ) + or + pred = MkImplicitDeref(this.getBase()) and + (firstNode(this.getLow(), succ) or succ = MkImplicitLowerSliceBound(this)) + or + (lastNode(this.getLow(), pred, normalCompletion()) or pred = MkImplicitLowerSliceBound(this)) and + (firstNode(this.getHigh(), succ) or succ = MkImplicitUpperSliceBound(this)) + or + (lastNode(this.getHigh(), pred, normalCompletion()) or pred = MkImplicitUpperSliceBound(this)) and + (firstNode(this.getMax(), succ) or succ = MkImplicitMaxSliceBound(this)) + or + (lastNode(this.getMax(), pred, normalCompletion()) or pred = MkImplicitMaxSliceBound(this)) and + succ = MkExprNode(this) + } + } + + private class StarExprTree extends PostOrderTree, StarExpr { + override ControlFlow::Node getNode() { result = mkExprOrSkipNode(this) } + + override Completion getCompletion() { result = Done() or result = Panic() } + + override ControlFlowTree getChildTree(int i) { i = 0 and result = this.getBase() } + } + + private class SwitchTree extends ControlFlowTree, SwitchStmt { + override predicate firstNode(ControlFlow::Node first) { + firstNode(this.getInit(), first) + or + not exists(this.getInit()) and + ( + firstNode(this.(ExpressionSwitchStmt).getExpr(), first) + or + first = MkImplicitTrue(this) + or + firstNode(this.(TypeSwitchStmt).getTest(), first) + ) + } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + lastNode(this.getInit(), last, cmpl) and + not cmpl.isNormal() + or + ( + lastNode(this.(ExpressionSwitchStmt).getExpr(), last, cmpl) + or + lastNode(this.(TypeSwitchStmt).getTest(), last, cmpl) + ) and + ( + not cmpl.isNormal() + or + not exists(this.getDefault()) + ) + or + last = MkImplicitTrue(this) and + cmpl = Bool(true) and + this.getNumCase() = 0 + or + exists(CaseClause cc, int i, Completion inner | + cc = this.getCase(i) and lastNode(cc, last, inner) + | + not exists(this.getDefault()) and + i = this.getNumCase() - 1 and + last = cc.(CaseClauseTree).getExprEnd(cc.getNumExpr() - 1, false) and + inner.isNormal() and + cmpl = inner + or + not last = cc.(CaseClauseTree).getExprEnd(_, _) and + inner.isNormal() and + cmpl = inner + or + if inner = Break(BranchTarget::of(this)) + then cmpl = Done() + else ( + not inner.isNormal() and inner != Fallthrough() and cmpl = inner + ) + ) + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + ControlFlowTree.super.succ(pred, succ) + or + lastNode(this.getInit(), pred, normalCompletion()) and + ( + firstNode(this.(ExpressionSwitchStmt).getExpr(), succ) or + succ = MkImplicitTrue(this) or + firstNode(this.(TypeSwitchStmt).getTest(), succ) + ) + or + ( + lastNode(this.(ExpressionSwitchStmt).getExpr(), pred, normalCompletion()) or + pred = MkImplicitTrue(this) or + lastNode(this.(TypeSwitchStmt).getTest(), pred, normalCompletion()) + ) and + ( + firstNode(this.getNonDefaultCase(0), succ) + or + not exists(this.getANonDefaultCase()) and + firstNode(this.getDefault(), succ) + ) + or + exists(CaseClause cc, int i | + cc = this.getNonDefaultCase(i) and + lastNode(cc, pred, normalCompletion()) and + pred = cc.(CaseClauseTree).getExprEnd(_, false) + | + firstNode(this.getNonDefaultCase(i + 1), succ) + or + i = this.getNumNonDefaultCase() - 1 and + firstNode(this.getDefault(), succ) + ) + or + exists(CaseClause cc, int i, CaseClause next | + cc = this.getCase(i) and + lastNode(cc, pred, Fallthrough()) and + next = this.getCase(i + 1) + | + firstNode(next.getStmt(0), succ) + or + succ = MkSkipNode(next) + ) + } + } + + private class TypeAssertTree extends PostOrderTree, TypeAssertExpr { + override ControlFlow::Node getNode() { result = MkExprNode(this) } + + override Completion getCompletion() { + result = Done() + or + // panic due to type mismatch, but not if the assertion appears in an assignment or + // initialization with two variables or a type-switch + not exists(Assignment assgn | assgn.getNumLhs() = 2 and this = assgn.getRhs().stripParens()) and + not exists(ValueSpec vs | vs.getNumName() = 2 and this = vs.getInit().stripParens()) and + not exists(TypeSwitchStmt ts | this = ts.getExpr()) and + result = Panic() + } + + override ControlFlowTree getChildTree(int i) { i = 0 and result = this.getExpr() } + } + + private class UnaryExprTree extends ControlFlowTree, UnaryExpr { + override predicate firstNode(ControlFlow::Node first) { firstNode(this.getOperand(), first) } + + override predicate lastNode(ControlFlow::Node last, Completion cmpl) { + last = MkExprNode(this) and + ( + cmpl = Done() + or + this instanceof DerefExpr and cmpl = Panic() + ) + } + + override predicate succ(ControlFlow::Node pred, ControlFlow::Node succ) { + ControlFlowTree.super.succ(pred, succ) + or + not this = any(RecvStmt recv).getExpr() and + lastNode(this.getOperand(), pred, normalCompletion()) and + succ = MkExprNode(this) + } + } + + private ControlFlow::Node mkExprOrSkipNode(Expr e) { + result = MkExprNode(e) or + result = MkSkipNode(e) + } + + /** Holds if evaluation of `root` may start at `first`. */ + cached + predicate firstNode(ControlFlowTree root, ControlFlow::Node first) { root.firstNode(first) } + + /** Holds if evaluation of `root` may complete normally after `last`. */ + cached + predicate lastNode(ControlFlowTree root, ControlFlow::Node last) { + lastNode(root, last, normalCompletion()) + } + + private predicate lastNode(ControlFlowTree root, ControlFlow::Node last, Completion cmpl) { + root.lastNode(last, cmpl) + } + + /** Gets a successor of `nd` that is not a `defer` node */ + private ControlFlow::Node notDeferSucc(ControlFlow::Node nd) { + not result = MkDeferNode(_) and + result = succ(nd) + } + + /** Gets `defer` statements that can be the first defer statement after `nd` in the CFG */ + private ControlFlow::Node nextDefer(ControlFlow::Node nd) { + nd = MkDeferNode(_) and + result = MkDeferNode(_) and + ( + result = succ(nd) + or + result = succ(notDeferSucc+(nd)) + ) + } + + /** + * Holds if the function `f` may return without panicking, exiting the process, or looping forever. + * + * This is defined conservatively, and so may also hold of a function that in fact + * cannot return normally, but never fails to hold of a function that can return normally. + */ + cached + predicate mayReturnNormally(ControlFlowTree root) { + exists(ControlFlow::Node last, Completion cmpl | lastNode(root, last, cmpl) and cmpl != Panic()) + } + + /** + * Holds if `pred` is the node for the case `testExpr` in an expression + * switch statement which is switching on `switchExpr`, and `succ` is the + * node to be executed next if the case test succeeds. + */ + cached + predicate isSwitchCaseTestPassingEdge( + ControlFlow::Node pred, ControlFlow::Node succ, Expr switchExpr, Expr testExpr + ) { + exists(ExpressionSwitchStmt ess | ess.getExpr() = switchExpr | + ess.getACase().(CaseClauseTree).isPassingEdge(_, pred, succ, testExpr) + ) + } + + /** Gets a successor of `nd`, that is, a node that is executed after `nd`. */ + cached + ControlFlow::Node succ(ControlFlow::Node nd) { any(ControlFlowTree tree).succ(nd, result) } +} diff --git a/go/ql/lib/semmle/go/controlflow/IR.qll b/go/ql/lib/semmle/go/controlflow/IR.qll new file mode 100644 index 00000000000..4df0867e4c6 --- /dev/null +++ b/go/ql/lib/semmle/go/controlflow/IR.qll @@ -0,0 +1,1669 @@ +/** + * Provides classes and predicates for working with an intermediate representation (IR) of Go + * programs that is used as the foundation of the control flow and data flow graphs. + * + * In the IR, the program is represented as a set of instructions, which correspond to expressions + * and statements that compute a value or perform an operation (as opposed to providing syntactic + * structure or type information). + * + * Each instruction is also a control-flow node, but there are control-flow nodes that are not + * instructions (synthetic entry and exit nodes, as well as no-op skip nodes). + */ + +import go +private import semmle.go.controlflow.ControlFlowGraphImpl + +/** Provides predicates and classes for working with IR constructs. */ +module IR { + /** + * An IR instruction. + */ + class Instruction extends ControlFlow::Node { + Instruction() { + this instanceof MkExprNode or + this instanceof MkLiteralElementInitNode or + this instanceof MkImplicitLiteralElementIndex or + this instanceof MkAssignNode or + this instanceof MkCompoundAssignRhsNode or + this instanceof MkExtractNode or + this instanceof MkZeroInitNode or + this instanceof MkFuncDeclNode or + this instanceof MkDeferNode or + this instanceof MkGoNode or + this instanceof MkConditionGuardNode or + this instanceof MkIncDecNode or + this instanceof MkIncDecRhs or + this instanceof MkImplicitOne or + this instanceof MkReturnNode or + this instanceof MkResultWriteNode or + this instanceof MkResultReadNode or + this instanceof MkSelectNode or + this instanceof MkSendNode or + this instanceof MkParameterInit or + this instanceof MkArgumentNode or + this instanceof MkResultInit or + this instanceof MkNextNode or + this instanceof MkImplicitTrue or + this instanceof MkCaseCheckNode or + this instanceof MkImplicitLowerSliceBound or + this instanceof MkImplicitUpperSliceBound or + this instanceof MkImplicitMaxSliceBound or + this instanceof MkImplicitDeref or + this instanceof MkImplicitFieldSelection + } + + /** Holds if this instruction reads the value of variable or constant `v`. */ + predicate reads(ValueEntity v) { this.readsField(_, v) or this.readsMethod(_, v) } + + /** Holds if this instruction updates variable or constant `v` to the value of `rhs`. */ + predicate writes(ValueEntity v, Instruction rhs) { this.writesField(_, v, rhs) } + + /** Holds if this instruction reads the value of field `f` on the value of `base`. */ + predicate readsField(Instruction base, Field f) { none() } + + /** Holds if this instruction updates the value of field `f` on the value of `base`. */ + predicate writesField(Instruction base, Field f, Instruction rhs) { none() } + + /** Holds if this instruction looks up method `m` on the value of `receiver`. */ + predicate readsMethod(Instruction receiver, Method m) { none() } + + /** Holds if this instruction reads the value of element `index` on the value of `base`. */ + predicate readsElement(Instruction base, Instruction index) { none() } + + /** Holds if this instruction updates the value of element `index` on the value of `base`. */ + predicate writesElement(Instruction base, Instruction index) { none() } + + /** Gets the type of the result of this instruction, if any. */ + Type getResultType() { none() } + + /** Gets the float value of the result of this instruction, if it can be determined. */ + float getFloatValue() { none() } + + /** Gets the int value of the result of this instruction, if it can be determined. */ + int getIntValue() { none() } + + /** + * Holds if the complex value of the result of this instruction has real part `real` and + * imaginary part `imag`. + */ + predicate hasComplexValue(float real, float imag) { none() } + + /** Gets either `getFloatValue` or `getIntValue` */ + float getNumericValue() { result = this.getFloatValue() or result = this.getIntValue() } + + /** + * Gets the string representation of the exact value of the result of this instruction, + * if any. + * + * For example, for the constant 3.141592653589793238462, this will + * result in 1570796326794896619231/500000000000000000000 + */ + string getExactValue() { none() } + + /** Gets the string value of the result of this instruction, if it can be determined. */ + string getStringValue() { none() } + + /** Gets the Boolean value of the result of this instruction, if it can be determined. */ + boolean getBoolValue() { none() } + + /** Holds if the result of this instruction is known at compile time. */ + predicate isConst() { none() } + + /** + * Holds if the result of this instruction is known at compile time, and is guaranteed not to + * depend on the platform where it is evaluated. + */ + predicate isPlatformIndependentConstant() { none() } + + /** Gets a textual representation of the kind of this instruction. */ + string getInsnKind() { + this instanceof MkExprNode and result = "expression" + or + this instanceof MkLiteralElementInitNode and result = "element init" + or + this instanceof MkImplicitLiteralElementIndex and result = "element index" + or + this instanceof MkAssignNode and result = "assignment" + or + this instanceof MkCompoundAssignRhsNode and result = "right-hand side of compound assignment" + or + this instanceof MkExtractNode and result = "tuple element extraction" + or + this instanceof MkZeroInitNode and result = "zero value" + or + this instanceof MkFuncDeclNode and result = "function declaration" + or + this instanceof MkDeferNode and result = "defer" + or + this instanceof MkGoNode and result = "go" + or + this instanceof MkConditionGuardNode and result = "condition guard" + or + this instanceof MkIncDecNode and result = "increment/decrement" + or + this instanceof MkIncDecRhs and result = "right-hand side of increment/decrement" + or + this instanceof MkImplicitOne and result = "implicit 1" + or + this instanceof MkReturnNode and result = "return" + or + this instanceof MkResultWriteNode and result = "result write" + or + this instanceof MkResultReadNode and result = "result read" + or + this instanceof MkSelectNode and result = "select" + or + this instanceof MkSendNode and result = "send" + or + this instanceof MkParameterInit and result = "parameter initialization" + or + this instanceof MkArgumentNode and result = "argument" + or + this instanceof MkResultInit and result = "result initialization" + or + this instanceof MkNextNode and result = "next key-value pair" + or + this instanceof MkImplicitTrue and result = "implicit true" + or + this instanceof MkCaseCheckNode and result = "case" + or + this instanceof MkImplicitLowerSliceBound and result = "implicit lower bound" + or + this instanceof MkImplicitUpperSliceBound and result = "implicit upper bound" + or + this instanceof MkImplicitMaxSliceBound and result = "implicit maximum" + or + this instanceof MkImplicitDeref and result = "implicit dereference" + or + this instanceof MkImplicitFieldSelection and result = "implicit field selection" + } + } + + /** + * An IR instruction representing the evaluation of an expression. + */ + class EvalInstruction extends Instruction, MkExprNode { + Expr e; + + EvalInstruction() { this = MkExprNode(e) } + + /** Gets the expression underlying this instruction. */ + Expr getExpr() { result = e } + + override predicate reads(ValueEntity v) { e = v.getAReference() } + + override Type getResultType() { result = e.getType() } + + override ControlFlow::Root getRoot() { result.isRootOf(e) } + + override float getFloatValue() { result = e.getFloatValue() } + + override int getIntValue() { result = e.getIntValue() } + + override predicate hasComplexValue(float real, float imag) { e.hasComplexValue(real, imag) } + + override string getExactValue() { result = e.getExactValue() } + + override string getStringValue() { result = e.getStringValue() } + + override boolean getBoolValue() { result = e.getBoolValue() } + + override predicate isConst() { e.isConst() } + + override predicate isPlatformIndependentConstant() { e.isPlatformIndependentConstant() } + + override string toString() { result = e.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + e.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An IR instruction that reads the value of a variable, constant, field or array element, + * or refers to a function. + */ + class ReadInstruction extends Instruction { + ReadInstruction() { + exists(Expr e | e = this.(EvalInstruction).getExpr() | + (e instanceof ValueName or e instanceof IndexExpr) and + e.(ReferenceExpr).isRvalue() + ) + or + this instanceof ReadResultInstruction + or + this instanceof MkImplicitFieldSelection + } + } + + /** + * Gets the effective base of a selector, index or slice expression, taking implicit dereferences + * and implicit field reads into account. + * + * For a selector expression `b.f`, this could be the implicit dereference `*b`, or the implicit + * field access `b.Embedded` if the field `f` is promoted from an embedded type `Embedded`, or a + * combination of both `*(b.Embedded)`, or simply `b` if neither case applies. + */ + private Instruction selectorBase(Expr e) { + exists(ImplicitFieldReadInstruction fri | fri.getSelectorExpr() = e and fri.getIndex() = 1 | + result = fri + ) + or + not exists(ImplicitFieldReadInstruction fri | fri.getSelectorExpr() = e and fri.getIndex() = 1) and + exists(Expr base | + base = e.(SelectorExpr).getBase() + or + base = e.(IndexExpr).getBase() + or + base = e.(SliceExpr).getBase() + | + result = MkImplicitDeref(base) + or + not exists(MkImplicitDeref(base)) and + result = evalExprInstruction(base) + ) + } + + /** + * An IR instruction that reads a component from a composite object. + * + * This is either a field of a struct, or an element of an array, map, slice or string. + */ + class ComponentReadInstruction extends ReadInstruction { + ComponentReadInstruction() { + exists(Expr e | e = this.(EvalInstruction).getExpr() | + e instanceof IndexExpr + or + e.(SelectorExpr).getBase() instanceof ValueExpr and + not e.(SelectorExpr).getSelector() = any(Method method).getAReference() + ) + or + this instanceof MkImplicitFieldSelection + } + + /** Gets the instruction computing the base value on which the field or element is read. */ + Instruction getBase() { + result = this.(ImplicitFieldReadInstruction).getBaseInstruction() + or + result = selectorBase(this.(EvalInstruction).getExpr()) + } + } + + /** + * An IR instruction that reads the value of a field. + * + * On snapshots with incomplete type information, method expressions may sometimes be + * misclassified as field reads. + */ + class FieldReadInstruction extends ComponentReadInstruction { + SelectorExpr e; + int index; + Field field; + + FieldReadInstruction() { + e = this.(EvalInstruction).getExpr() and + index = 0 and + field.getAReference() = e.getSelector() + or + this = MkImplicitFieldSelection(e, index, field) + } + + /** Gets the `SelectorExpr` of this field read. */ + SelectorExpr getSelectorExpr() { result = e } + + /** Gets the index of this field read. */ + int getIndex() { result = index } + + /** Gets the field being read. */ + Field getField() { result = field } + + Instruction getBaseInstruction() { + exists(ImplicitFieldReadInstruction fri | + fri.getSelectorExpr() = e and fri.getIndex() = pragma[only_bind_into](index + 1) + | + result = fri + ) + or + not exists(ImplicitFieldReadInstruction fri | + fri.getSelectorExpr() = e and fri.getIndex() = pragma[only_bind_into](index + 1) + ) and + ( + result = MkImplicitDeref(e.getBase()) + or + not exists(MkImplicitDeref(e.getBase())) and + result = evalExprInstruction(e.getBase()) + ) + } + + override predicate readsField(Instruction base, Field f) { + base = this.getBaseInstruction() and f = field + } + } + + /** + * An IR instruction for an implicit field read as part of reading a + * promoted field. + * + * If the field that is being implicitly read has a pointer type then this + * instruction represents an implicit dereference of it. + */ + class ImplicitFieldReadInstruction extends FieldReadInstruction, MkImplicitFieldSelection { + ImplicitFieldReadInstruction() { this = MkImplicitFieldSelection(e, index, field) } + + override predicate reads(ValueEntity v) { v = field } + + override Type getResultType() { + if field.getType() instanceof PointerType + then result = field.getType().(PointerType).getBaseType() + else result = field.getType() + } + + override ControlFlow::Root getRoot() { result.isRootOf(e) } + + override string toString() { result = "implicit read of field " + field.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + e.getBase().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An IR instruction that looks up a method. + */ + class MethodReadInstruction extends ReadInstruction, EvalInstruction { + Method method; + override SelectorExpr e; + + MethodReadInstruction() { e.getSelector() = method.getAReference() } + + /** Gets the instruction computing the receiver value on which the method is looked up. */ + Instruction getReceiver() { result = selectorBase(e) } + + /** Gets the method being looked up. */ + Method getMethod() { result = method } + + override predicate readsMethod(Instruction receiver, Method m) { + receiver = this.getReceiver() and m = this.getMethod() + } + } + + /** + * An IR instruction that reads an element of an array, slice, map or string. + */ + class ElementReadInstruction extends ComponentReadInstruction, EvalInstruction { + override IndexExpr e; + + /** Gets the instruction computing the index of the element being looked up. */ + Instruction getIndex() { result = evalExprInstruction(e.getIndex()) } + + override predicate readsElement(Instruction base, Instruction index) { + base = this.getBase() and index = this.getIndex() + } + } + + /** + * An IR instruction that constructs a slice. + */ + class SliceInstruction extends EvalInstruction { + override SliceExpr e; + + /** Gets the instruction computing the base value from which the slice is constructed. */ + Instruction getBase() { result = selectorBase(e) } + + /** Gets the instruction computing the lower bound of the slice. */ + Instruction getLow() { + result = evalExprInstruction(e.getLow()) or + result = implicitLowerSliceBoundInstruction(e) + } + + /** Gets the instruction computing the upper bound of the slice. */ + Instruction getHigh() { + result = evalExprInstruction(e.getHigh()) or + result = implicitUpperSliceBoundInstruction(e) + } + + /** Gets the instruction computing the capacity of the slice. */ + Instruction getMax() { + result = evalExprInstruction(e.getMax()) or + result = implicitMaxSliceBoundInstruction(e) + } + } + + /** + * An IR instruction that writes a memory location. + */ + class WriteInstruction extends Instruction { + WriteTarget lhs; + + WriteInstruction() { + lhs = MkLhs(this, _) + or + lhs = MkLiteralElementTarget(this) + or + lhs = MkResultWriteTarget(this) + } + + /** Gets the target to which this instruction writes. */ + WriteTarget getLhs() { result = lhs } + + /** Gets the instruction computing the value this instruction writes. */ + Instruction getRhs() { none() } + + override predicate writes(ValueEntity v, Instruction rhs) { + this.getLhs().refersTo(v) and + rhs = this.getRhs() + } + } + + /** + * An IR instruction that initializes a component of a composite literal. + */ + class InitLiteralComponentInstruction extends WriteInstruction, MkLiteralElementInitNode { + CompositeLit lit; + int i; + Expr elt; + + InitLiteralComponentInstruction() { + this = MkLiteralElementInitNode(elt) and elt = lit.getElement(i) + } + + /** Gets the instruction allocating the composite literal. */ + Instruction getBase() { result = evalExprInstruction(lit) } + + override Instruction getRhs() { + result = evalExprInstruction(elt) or + result = evalExprInstruction(elt.(KeyValueExpr).getValue()) + } + + override ControlFlow::Root getRoot() { result.isRootOf(elt) } + + override string toString() { result = "init of " + elt } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + elt.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An IR instruction that initializes a field of a struct literal. + */ + class InitLiteralStructFieldInstruction extends InitLiteralComponentInstruction { + override StructLit lit; + + /** Gets the name of the initialized field. */ + string getFieldName() { + if elt instanceof KeyValueExpr + then result = elt.(KeyValueExpr).getKey().(Ident).getName() + else lit.getStructType().hasOwnField(i, result, _, _) + } + + /** Gets the initialized field. */ + Field getField() { + result.getDeclaringType() = lit.getStructType() and + result.getName() = this.getFieldName() + } + } + + /** + * An IR instruction that initializes an element of an array, slice or map literal. + */ + class InitLiteralElementInstruction extends InitLiteralComponentInstruction { + Type literalType; + + InitLiteralElementInstruction() { + literalType = lit.getType().getUnderlyingType() and + ( + literalType instanceof ArrayType or + literalType instanceof SliceType or + literalType instanceof MapType + ) + } + + /** Gets the instruction computing the index of the initialized element. */ + Instruction getIndex() { + result = evalExprInstruction(elt.(KeyValueExpr).getKey()) + or + result = MkImplicitLiteralElementIndex(elt) + } + } + + /** + * An IR instruction that initializes an element of an array literal. + */ + class InitLiteralArrayElementInstruction extends InitLiteralElementInstruction { + override ArrayType literalType; + } + + /** + * An IR instruction that initializes an element of a slice literal. + */ + class InitLiteralSliceElementInstruction extends InitLiteralElementInstruction { + override SliceType literalType; + } + + /** + * An IR instruction that initializes an element of a map literal. + */ + class InitLiteralMapElementInstruction extends InitLiteralElementInstruction { + override MapType literalType; + } + + /** + * An IR instruction that writes to a field. + */ + class FieldWriteInstruction extends WriteInstruction { + override FieldTarget lhs; + + /** Gets the instruction computing the base value on which the field is written. */ + Instruction getBase() { result = lhs.getBase() } + + /** Gets the field being written. */ + Field getField() { result = lhs.getField() } + + override predicate writesField(Instruction base, Field f, Instruction rhs) { + this.getBase() = base and + this.getField() = f and + this.getRhs() = rhs + } + } + + /** + * An IR instruction that writes to an element of an array, slice, or map. + */ + class ElementWriteInstruction extends WriteInstruction { + override ElementTarget lhs; + + /** Gets the instruction computing the base value on which the field is written. */ + Instruction getBase() { result = lhs.getBase() } + + /** Gets the instruction computing the element index being written. */ + Instruction getIndex() { result = lhs.getIndex() } + + override predicate writesElement(Instruction base, Instruction index) { + this.getBase() = base and + this.getIndex() = index + } + } + + /** Holds if `lit` does not specify any explicit keys. */ + private predicate noExplicitKeys(CompositeLit lit) { + not lit.getAnElement() instanceof KeyValueExpr + } + + /** Gets the index of the `i`th element in (array or slice) literal `lit`. */ + private int getElementIndex(CompositeLit lit, int i) { + ( + lit.getType().getUnderlyingType() instanceof ArrayType or + lit.getType().getUnderlyingType() instanceof SliceType + ) and + exists(Expr elt | elt = lit.getElement(i) | + // short-circuit computation for literals without any explicit keys + noExplicitKeys(lit) and result = i + or + result = elt.(KeyValueExpr).getKey().getIntValue() + or + not elt instanceof KeyValueExpr and + ( + i = 0 and result = 0 + or + result = getElementIndex(lit, i - 1) + 1 + ) + ) + } + + /** + * An IR instruction computing the implicit index of an element in an array or slice literal. + */ + class ImplicitLiteralElementIndexInstruction extends Instruction, MkImplicitLiteralElementIndex { + Expr elt; + + ImplicitLiteralElementIndexInstruction() { this = MkImplicitLiteralElementIndex(elt) } + + override Type getResultType() { result instanceof IntType } + + override ControlFlow::Root getRoot() { result.isRootOf(elt) } + + override int getIntValue() { + exists(CompositeLit lit, int i | elt = lit.getElement(i) | result = getElementIndex(lit, i)) + } + + override string getStringValue() { none() } + + override string getExactValue() { result = this.getIntValue().toString() } + + override predicate isPlatformIndependentConstant() { any() } + + override predicate isConst() { any() } + + override string toString() { result = "element index" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + elt.hasLocationInfo(filepath, startline, startcolumn, _, _) and + endline = startline and + endcolumn = startcolumn + } + } + + /** + * An instruction assigning to a variable or field. + */ + class AssignInstruction extends WriteInstruction, MkAssignNode { + AstNode assgn; + int i; + + AssignInstruction() { this = MkAssignNode(assgn, i) } + + override Instruction getRhs() { + exists(SimpleAssignStmt a | a = assgn | + a.getNumLhs() = a.getNumRhs() and + result = evalExprInstruction(a.getRhs(i)) + ) + or + exists(ValueSpec spec | spec = assgn | + spec.getNumName() = spec.getNumInit() and + result = evalExprInstruction(spec.getInit(i)) + or + result = MkZeroInitNode(any(ValueEntity v | spec.getNameExpr(i) = v.getDeclaration())) + ) + or + result = MkCompoundAssignRhsNode(assgn) + or + result = MkExtractNode(assgn, i) + } + + override ControlFlow::Root getRoot() { result.isRootOf(assgn) } + + override string toString() { result = "assignment to " + this.getLhs() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getLhs().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** An instruction computing the value of the right-hand side of a compound assignment. */ + class EvalCompoundAssignRhsInstruction extends Instruction, MkCompoundAssignRhsNode { + CompoundAssignStmt assgn; + + EvalCompoundAssignRhsInstruction() { this = MkCompoundAssignRhsNode(assgn) } + + /** Gets the underlying assignment of this instruction. */ + CompoundAssignStmt getAssignment() { result = assgn } + + override Type getResultType() { result = assgn.getRhs().getType() } + + override ControlFlow::Root getRoot() { result.isRootOf(assgn) } + + override string toString() { result = assgn.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + assgn.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction selecting one of multiple values returned by a function, or either the key + * or the value of the iterator in a range loop, or the result or success value from a type + * assertion. + */ + class ExtractTupleElementInstruction extends Instruction, MkExtractNode { + AstNode s; + int i; + + ExtractTupleElementInstruction() { this = MkExtractNode(s, i) } + + /** Gets the instruction computing the tuple value from which one value is extracted. */ + Instruction getBase() { + exists(Expr baseExpr | + baseExpr = s.(Assignment).getRhs() or + baseExpr = s.(ValueSpec).getInit() + | + result = evalExprInstruction(baseExpr) + ) + or + result = MkNextNode(s) + or + result = evalExprInstruction(s.(ReturnStmt).getExpr()) + or + result = evalExprInstruction(s.(CallExpr).getArgument(0).stripParens()) + } + + /** Holds if this extracts the `idx`th value of the result of `base`. */ + predicate extractsElement(Instruction base, int idx) { base = this.getBase() and idx = i } + + override Type getResultType() { + exists(CallExpr c | this.getBase() = evalExprInstruction(c) | + result = c.getTarget().getResultType(i) + ) + or + exists(Expr e | this.getBase() = evalExprInstruction(e) | + result = e.getType().(TupleType).getComponentType(pragma[only_bind_into](i)) + ) + or + exists(Type rangeType | rangeType = s.(RangeStmt).getDomain().getType().getUnderlyingType() | + exists(Type baseType | + baseType = rangeType.(ArrayType).getElementType() or + baseType = + rangeType.(PointerType).getBaseType().getUnderlyingType().(ArrayType).getElementType() or + baseType = rangeType.(SliceType).getElementType() + | + i = 0 and + result instanceof IntType + or + i = 1 and + result = baseType + ) + or + rangeType instanceof StringType and + ( + i = 0 and + result instanceof IntType + or + result = Builtin::rune().getType() + ) + or + exists(MapType map | map = rangeType | + i = 0 and + result = map.getKeyType() + or + i = 1 and + result = map.getValueType() + ) + or + i = 0 and + result = rangeType.(RecvChanType).getElementType() + or + i = 0 and + result = rangeType.(SendRecvChanType).getElementType() + ) + } + + override ControlFlow::Root getRoot() { result.isRootOf(s) } + + override string toString() { result = s + "[" + i + "]" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + s.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction that computes the zero value for a variable or constant. + */ + class EvalImplicitInitInstruction extends Instruction, MkZeroInitNode { + ValueEntity v; + + EvalImplicitInitInstruction() { this = MkZeroInitNode(v) } + + override Type getResultType() { result = v.getType() } + + override ControlFlow::Root getRoot() { result.isRootOf(v.getDeclaration()) } + + override int getIntValue() { + v.getType().getUnderlyingType() instanceof IntegerType and result = 0 + } + + override float getFloatValue() { + v.getType().getUnderlyingType() instanceof FloatType and result = 0.0 + } + + override string getStringValue() { + v.getType().getUnderlyingType() instanceof StringType and result = "" + } + + override boolean getBoolValue() { + v.getType().getUnderlyingType() instanceof BoolType and result = false + } + + override string getExactValue() { + result = this.getIntValue().toString() or + result = this.getFloatValue().toString() or + result = this.getStringValue().toString() or + result = this.getBoolValue().toString() + } + + override predicate isConst() { any() } + + override predicate isPlatformIndependentConstant() { any() } + + override string toString() { result = "zero value for " + v } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + v.getDeclaration().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction that corresponds to the declaration of a function. + */ + class DeclareFunctionInstruction extends Instruction, MkFuncDeclNode { + FuncDecl fd; + + DeclareFunctionInstruction() { this = MkFuncDeclNode(fd) } + + override Type getResultType() { result = fd.getType() } + + override string toString() { result = fd.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + fd.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction that corresponds to a `defer` statement. + */ + class DeferInstruction extends Instruction, MkDeferNode { + DeferStmt defer; + + DeferInstruction() { this = MkDeferNode(defer) } + + override ControlFlow::Root getRoot() { result.isRootOf(defer) } + + override string toString() { result = defer.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + defer.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction that corresponds to a `go` statement. + */ + class GoInstruction extends Instruction, MkGoNode { + GoStmt go; + + GoInstruction() { this = MkGoNode(go) } + + override ControlFlow::Root getRoot() { result.isRootOf(go) } + + override string toString() { result = go.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + go.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction that corresponds to an increment or decrement statement. + */ + class IncDecInstruction extends WriteInstruction, MkIncDecNode { + IncDecStmt ids; + + IncDecInstruction() { this = MkIncDecNode(ids) } + + override Instruction getRhs() { result = MkIncDecRhs(ids) } + + override ControlFlow::Root getRoot() { result.isRootOf(ids) } + + override string toString() { result = ids.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + ids.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction that computes the (implicit) right-hand side of an increment or + * decrement statement. + */ + class EvalIncDecRhsInstruction extends Instruction, MkIncDecRhs { + IncDecStmt ids; + + EvalIncDecRhsInstruction() { this = MkIncDecRhs(ids) } + + /** Gets the corresponding increment or decrement statement. */ + IncDecStmt getStmt() { result = ids } + + override Type getResultType() { result = ids.getOperand().getType() } + + override ControlFlow::Root getRoot() { result.isRootOf(ids) } + + override string toString() { result = "rhs of " + ids } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + ids.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction computing the implicit operand `1` in an increment or decrement statement. + */ + class EvalImplicitOneInstruction extends Instruction, MkImplicitOne { + IncDecStmt ids; + + EvalImplicitOneInstruction() { this = MkImplicitOne(ids) } + + /** Gets the corresponding increment or decrement statement. */ + IncDecStmt getStmt() { result = ids } + + override Type getResultType() { result = ids.getOperand().getType() } + + override ControlFlow::Root getRoot() { result.isRootOf(ids) } + + override int getIntValue() { result = 1 } + + override string getExactValue() { result = "1" } + + override predicate isConst() { any() } + + override predicate isPlatformIndependentConstant() { any() } + + override string toString() { result = "1" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + ids.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction corresponding to a return from a function. + */ + class ReturnInstruction extends Instruction, MkReturnNode { + ReturnStmt ret; + + ReturnInstruction() { this = MkReturnNode(ret) } + + /** Gets the corresponding `ReturnStmt`. */ + ReturnStmt getReturnStmt() { result = ret } + + /** Holds if this statement returns multiple results. */ + predicate returnsMultipleResults() { exists(MkExtractNode(ret, _)) or ret.getNumExpr() > 1 } + + /** Gets the instruction whose result is the (unique) result returned by this statement. */ + Instruction getResult() { + not this.returnsMultipleResults() and + result = evalExprInstruction(ret.getExpr()) + } + + /** Gets the instruction whose result is the `i`th result returned by this statement. */ + Instruction getResult(int i) { + result = MkExtractNode(ret, i) + or + not exists(MkExtractNode(ret, _)) and + result = evalExprInstruction(ret.getExpr(i)) + } + + override ControlFlow::Root getRoot() { result.isRootOf(ret) } + + override string toString() { result = ret.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + ret.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction that represents the implicit assignment to a result variable + * performed by a return statement. + */ + class WriteResultInstruction extends WriteInstruction, MkResultWriteNode { + ResultVariable var; + int i; + ReturnInstruction ret; + + WriteResultInstruction() { + exists(ReturnStmt retstmt | + this = MkResultWriteNode(var, i, retstmt) and + ret = MkReturnNode(retstmt) + ) + } + + override Instruction getRhs() { result = ret.getResult(i) } + + /** Gets the result variable being assigned. */ + ResultVariable getResultVariable() { result = var } + + override Type getResultType() { result = var.getType() } + + override ControlFlow::Root getRoot() { var = result.(FuncDef).getAResultVar() } + + override string toString() { result = "implicit write of " + var } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + ret.getResult(i).hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction that reads the final value of a result variable upon returning + * from a function. + */ + class ReadResultInstruction extends Instruction, MkResultReadNode { + ResultVariable var; + + ReadResultInstruction() { this = MkResultReadNode(var) } + + override predicate reads(ValueEntity v) { v = var } + + override Type getResultType() { result = var.getType() } + + override ControlFlow::Root getRoot() { var = result.(FuncDef).getAResultVar() } + + override string toString() { result = "implicit read of " + var } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + var.getDeclaration().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction corresponding to a `select` statement. + */ + class SelectInstruction extends Instruction, MkSelectNode { + SelectStmt sel; + + SelectInstruction() { this = MkSelectNode(sel) } + + override ControlFlow::Root getRoot() { result.isRootOf(sel) } + + override string toString() { result = sel.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + sel.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction corresponding to a send statement. + */ + class SendInstruction extends Instruction, MkSendNode { + SendStmt send; + + SendInstruction() { this = MkSendNode(send) } + + override ControlFlow::Root getRoot() { result.isRootOf(send) } + + override string toString() { result = send.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + send.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction initializing a parameter to the corresponding argument. + */ + class InitParameterInstruction extends WriteInstruction, MkParameterInit { + Parameter parm; + + InitParameterInstruction() { this = MkParameterInit(parm) } + + override Instruction getRhs() { result = MkArgumentNode(parm) } + + override ControlFlow::Root getRoot() { result = parm.getFunction() } + + override string toString() { result = "initialization of " + parm } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + parm.getDeclaration().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction reading the value of a function argument. + */ + class ReadArgumentInstruction extends Instruction, MkArgumentNode { + Parameter parm; + + ReadArgumentInstruction() { this = MkArgumentNode(parm) } + + override Type getResultType() { result = parm.getType() } + + override ControlFlow::Root getRoot() { result = parm.getFunction() } + + override string toString() { result = "argument corresponding to " + parm } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + parm.getDeclaration().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction initializing a result variable to its zero value. + */ + class InitResultInstruction extends WriteInstruction, MkResultInit { + ResultVariable res; + + InitResultInstruction() { this = MkResultInit(res) } + + override Instruction getRhs() { result = MkZeroInitNode(res) } + + override ControlFlow::Root getRoot() { result = res.getFunction() } + + override string toString() { result = "initialization of " + res } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + res.getDeclaration().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction that gets the next key-value pair in a range loop. + */ + class GetNextEntryInstruction extends Instruction, MkNextNode { + RangeStmt rs; + + GetNextEntryInstruction() { this = MkNextNode(rs) } + + /** + * Gets the instruction computing the value whose key-value pairs this instruction reads. + */ + Instruction getDomain() { result = evalExprInstruction(rs.getDomain()) } + + override ControlFlow::Root getRoot() { result.isRootOf(rs) } + + override string toString() { result = "next key-value pair in range" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + rs.getDomain().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction computing the implicit `true` value in an expression-less `switch` statement. + */ + class EvalImplicitTrueInstruction extends Instruction, MkImplicitTrue { + Stmt stmt; + + EvalImplicitTrueInstruction() { this = MkImplicitTrue(stmt) } + + override Type getResultType() { result instanceof BoolType } + + override ControlFlow::Root getRoot() { result.isRootOf(stmt) } + + override boolean getBoolValue() { result = true } + + override string getExactValue() { result = "true" } + + override predicate isConst() { any() } + + override predicate isPlatformIndependentConstant() { any() } + + override string toString() { result = "true" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + stmt.hasLocationInfo(filepath, startline, startcolumn, _, _) and + endline = startline and + endcolumn = startcolumn + } + } + + /** + * An instruction corresponding to the implicit comparison or type check performed by an + * expression in a `case` clause. + * + * For example, consider this `switch` statement: + * + * ```go + * switch x { + * case 2, y+1: + * ... + * } + * ``` + * + * The expressions `2` and `y+1` are implicitly compared to `x`. These comparisons are + * represented by case instructions. + */ + class CaseInstruction extends Instruction, MkCaseCheckNode { + CaseClause cc; + int i; + + CaseInstruction() { this = MkCaseCheckNode(cc, i) } + + override ControlFlow::Root getRoot() { result.isRootOf(cc) } + + override string toString() { result = "case " + cc.getExpr(i) } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + cc.getExpr(i).hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction computing the implicit lower slice bound of zero in a slice expression without + * an explicit lower bound. + */ + class EvalImplicitLowerSliceBoundInstruction extends Instruction, MkImplicitLowerSliceBound { + SliceExpr slice; + + EvalImplicitLowerSliceBoundInstruction() { this = MkImplicitLowerSliceBound(slice) } + + override Type getResultType() { result instanceof IntType } + + override ControlFlow::Root getRoot() { result.isRootOf(slice) } + + override int getIntValue() { result = 0 } + + override string getExactValue() { result = "0" } + + override predicate isConst() { any() } + + override predicate isPlatformIndependentConstant() { any() } + + override string toString() { result = "0" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + slice.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction computing the implicit upper slice bound in a slice expression without an + * explicit upper bound. + */ + class EvalImplicitUpperSliceBoundInstruction extends Instruction, MkImplicitUpperSliceBound { + SliceExpr slice; + + EvalImplicitUpperSliceBoundInstruction() { this = MkImplicitUpperSliceBound(slice) } + + override ControlFlow::Root getRoot() { result.isRootOf(slice) } + + override Type getResultType() { result instanceof IntType } + + override string toString() { result = "len" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + slice.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction computing the implicit maximum slice bound in a slice expression without an + * explicit maximum bound. + */ + class EvalImplicitMaxSliceBoundInstruction extends Instruction, MkImplicitMaxSliceBound { + SliceExpr slice; + + EvalImplicitMaxSliceBoundInstruction() { this = MkImplicitMaxSliceBound(slice) } + + override ControlFlow::Root getRoot() { result.isRootOf(slice) } + + override Type getResultType() { result instanceof IntType } + + override string toString() { result = "cap" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + slice.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An instruction implicitly dereferencing the base in a field or method reference through a + * pointer, or the base in an element or slice reference through a pointer. + */ + class EvalImplicitDerefInstruction extends Instruction, MkImplicitDeref { + Expr e; + + EvalImplicitDerefInstruction() { this = MkImplicitDeref(e) } + + /** Gets the operand that is being dereferenced. */ + Expr getOperand() { result = e } + + override Type getResultType() { + result = e.getType().getUnderlyingType().(PointerType).getBaseType() + } + + override ControlFlow::Root getRoot() { result.isRootOf(e) } + + override string toString() { result = "implicit dereference" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + e.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** A representation of the target of a write instruction. */ + class WriteTarget extends TWriteTarget { + ControlFlow::Node w; + + WriteTarget() { + this = MkLhs(w, _) or this = MkLiteralElementTarget(w) or this = MkResultWriteTarget(w) + } + + /** Gets the write instruction of which this is the target. */ + WriteInstruction getWrite() { result = w } + + /** Gets the name of the variable or field being written to, if any. */ + string getName() { none() } + + /** Gets the SSA variable being written to, if any. */ + SsaVariable asSsaVariable() { + this.getWrite() = result.getDefinition().(SsaExplicitDefinition).getInstruction() + } + + /** Holds if `e` is the variable or field being written to. */ + predicate refersTo(ValueEntity e) { none() } + + /** Gets a textual representation of this target. */ + string toString() { result = "write target" } + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + filepath = "" and startline = 0 and startcolumn = 0 and endline = 0 and endcolumn = 0 + } + } + + /** A reference to a variable or constant, used as the target of a write. */ + class VarOrConstTarget extends WriteTarget { + Expr loc; + + VarOrConstTarget() { + this = MkLhs(_, loc) and + ( + loc instanceof Ident + or + loc instanceof SelectorExpr and + not loc.(SelectorExpr).getBase() instanceof ReferenceExpr + ) + or + exists(WriteResultInstruction wr | + this = MkResultWriteTarget(wr) and + evalExprInstruction(loc) = wr.getRhs() + ) + } + + override predicate refersTo(ValueEntity e) { + this instanceof MkLhs and + loc = e.getAReference() + or + exists(WriteResultInstruction wr | this = MkResultWriteTarget(wr) | + e = wr.getResultVariable() + ) + } + + override string getName() { + this = MkLhs(_, loc) and + ( + result = loc.(Ident).getName() + or + result = loc.(SelectorExpr).getSelector().getName() + ) + or + exists(WriteResultInstruction wr | this = MkResultWriteTarget(wr) | + result = wr.getResultVariable().getName() + ) + } + + /** Gets the variable this refers to, if any. */ + Variable getVariable() { this.refersTo(result) } + + /** Gets the constant this refers to, if any. */ + Constant getConstant() { this.refersTo(result) } + + override string toString() { result = this.getName() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + loc.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** A reference to a field, used as the target of a write. */ + class FieldTarget extends WriteTarget { + FieldTarget() { + exists(SelectorExpr sel | this = MkLhs(_, sel) | sel.getBase() instanceof ValueExpr) + or + w instanceof InitLiteralStructFieldInstruction + } + + /** Gets the instruction computing the base value on which this field is accessed. */ + Instruction getBase() { + exists(SelectorExpr sel | this = MkLhs(_, sel) | result = selectorBase(sel)) + or + result = w.(InitLiteralStructFieldInstruction).getBase() + } + + /** Get the type of the base of this field access, that is, the type that contains the field. */ + Type getBaseType() { result = this.getBase().getResultType() } + + override predicate refersTo(ValueEntity e) { + exists(SelectorExpr sel | this = MkLhs(_, sel) | sel.uses(e)) + or + e = w.(InitLiteralStructFieldInstruction).getField() + } + + override string getName() { exists(Field f | this.refersTo(f) | result = f.getName()) } + + /** Gets the field this refers to, if it can be determined. */ + Field getField() { this.refersTo(result) } + + override string toString() { + exists(SelectorExpr sel | this = MkLhs(_, sel) | + result = "field " + sel.getSelector().getName() + ) + or + result = "field " + w.(InitLiteralStructFieldInstruction).getFieldName() + } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + exists(SelectorExpr sel | this = MkLhs(_, sel) | + sel.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + ) + or + w.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * A reference to an element of an array, slice or map, used as the target of a write. + */ + class ElementTarget extends WriteTarget { + ElementTarget() { + this = MkLhs(_, any(IndexExpr idx)) + or + w instanceof InitLiteralElementInstruction + } + + /** Gets the instruction computing the base value of this element reference. */ + Instruction getBase() { + exists(IndexExpr idx | this = MkLhs(_, idx) | result = selectorBase(idx)) + or + result = w.(InitLiteralComponentInstruction).getBase() + } + + /** Gets the instruction computing the index of this element reference. */ + Instruction getIndex() { + exists(IndexExpr idx | this = MkLhs(_, idx) | result = evalExprInstruction(idx.getIndex())) + or + result = w.(InitLiteralElementInstruction).getIndex() + } + + override string toString() { result = "element" } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + exists(IndexExpr idx | this = MkLhs(_, idx) | + idx.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + ) + or + w.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * A pointer dereference, used as the target of a write. + */ + class PointerTarget extends WriteTarget { + Expr lhs; + + PointerTarget() { + this = MkLhs(_, lhs) and + (lhs instanceof StarExpr or lhs instanceof DerefExpr) + } + + /** Gets the instruction computing the pointer value being dereferenced. */ + Instruction getBase() { + exists(Expr base | base = lhs.(StarExpr).getBase() or base = lhs.(DerefExpr).getOperand() | + result = evalExprInstruction(base) + ) + } + + override string toString() { result = lhs.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + lhs.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * Gets the (final) instruction computing the value of `e`. + * + * Note that some expressions (such as type expressions or labels) have no corresponding + * instruction, so this predicate is undefined for them. + * + * Short-circuiting expressions that are purely used for control flow (meaning that their + * value is not stored in a variable or used to compute the value of a non-shortcircuiting + * expression) do not have a final instruction either. + */ + Instruction evalExprInstruction(Expr e) { + result = MkExprNode(e) or + result = evalExprInstruction(e.(ParenExpr).getExpr()) + } + + /** + * Gets the instruction corresponding to the initialization of `r`. + */ + InitParameterInstruction initRecvInstruction(ReceiverVariable r) { result = MkParameterInit(r) } + + /** + * Gets the instruction corresponding to the initialization of `p`. + */ + InitParameterInstruction initParamInstruction(Parameter p) { result = MkParameterInit(p) } + + /** + * Gets the instruction corresponding to the `i`th assignment happening at + * `assgn` (0-based). + */ + AssignInstruction assignInstruction(Assignment assgn, int i) { result = MkAssignNode(assgn, i) } + + /** + * Gets the instruction corresponding to the `i`th initialization happening + * at `spec` (0-based). + */ + AssignInstruction initInstruction(ValueSpec spec, int i) { result = MkAssignNode(spec, i) } + + /** + * Gets the instruction corresponding to the assignment of the key variable + * of range statement `rs`. + */ + AssignInstruction assignKeyInstruction(RangeStmt rs) { result = MkAssignNode(rs, 0) } + + /** + * Gets the instruction corresponding to the assignment of the value variable + * of range statement `rs`. + */ + AssignInstruction assignValueInstruction(RangeStmt rs) { result = MkAssignNode(rs, 1) } + + /** + * Gets the instruction corresponding to the implicit initialization of `v` + * to its zero value. + */ + EvalImplicitInitInstruction implicitInitInstruction(ValueEntity v) { result = MkZeroInitNode(v) } + + /** + * Gets the instruction corresponding to the extraction of the `idx`th element + * of the tuple produced by `base`. + */ + ExtractTupleElementInstruction extractTupleElement(Instruction base, int idx) { + result.extractsElement(base, idx) + } + + /** + * Gets the instruction corresponding to the implicit lower bound of slice `e`, if any. + */ + EvalImplicitLowerSliceBoundInstruction implicitLowerSliceBoundInstruction(SliceExpr e) { + result = MkImplicitLowerSliceBound(e) + } + + /** + * Gets the instruction corresponding to the implicit upper bound of slice `e`, if any. + */ + EvalImplicitUpperSliceBoundInstruction implicitUpperSliceBoundInstruction(SliceExpr e) { + result = MkImplicitUpperSliceBound(e) + } + + /** + * Gets the instruction corresponding to the implicit maximum bound of slice `e`, if any. + */ + EvalImplicitMaxSliceBoundInstruction implicitMaxSliceBoundInstruction(SliceExpr e) { + result = MkImplicitMaxSliceBound(e) + } + + /** + * Gets the implicit dereference instruction for `e`, where `e` is a pointer used as the base + * in a field/method access, element access, or slice expression. + */ + EvalImplicitDerefInstruction implicitDerefInstruction(Expr e) { result = MkImplicitDeref(e) } +} diff --git a/go/ql/lib/semmle/go/dataflow/DataFlow.qll b/go/ql/lib/semmle/go/dataflow/DataFlow.qll new file mode 100644 index 00000000000..d99ce3bb554 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/DataFlow.qll @@ -0,0 +1,29 @@ +/** + * Provides a library for local (intra-procedural) and global (inter-procedural) + * data flow analysis: deciding whether data can flow from a _source_ to a + * _sink_. + * + * Unless configured otherwise, _flow_ means that the exact value of + * the source may reach the sink. We do not track flow across pointer + * dereferences or array indexing. To track these types of flow, where the + * exact value may not be preserved, import + * `semmle.code.go.dataflow.TaintTracking`. + * + * To use global (interprocedural) data flow, extend the class + * `DataFlow::Configuration` as documented on that class. To use local + * (intraprocedural) data flow, invoke `DataFlow::localFlow` or + * `DataFlow::LocalFlowStep` with arguments of type `DataFlow::Node`. + */ + +import go + +/** + * Provides a library for local (intra-procedural) and global (inter-procedural) + * data flow analysis. + */ +module DataFlow { + import semmle.go.dataflow.internal.DataFlowImpl + import Properties +} + +class Read = DataFlow::ReadNode; diff --git a/go/ql/lib/semmle/go/dataflow/DataFlow2.qll b/go/ql/lib/semmle/go/dataflow/DataFlow2.qll new file mode 100644 index 00000000000..a2bae8bd939 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/DataFlow2.qll @@ -0,0 +1,27 @@ +/** + * Provides a library for local (intra-procedural) and global (inter-procedural) + * data flow analysis: deciding whether data can flow from a _source_ to a + * _sink_. + * + * Unless configured otherwise, _flow_ means that the exact value of + * the source may reach the sink. We do not track flow across pointer + * dereferences or array indexing. To track these types of flow, where the + * exact value may not be preserved, import + * `semmle.code.go.dataflow.TaintTracking`. + * + * To use global (interprocedural) data flow, extend the class + * `DataFlow::Configuration` as documented on that class. To use local + * (intraprocedural) data flow, invoke `DataFlow::localFlow` or + * `DataFlow::LocalFlowStep` with arguments of type `DataFlow::Node`. + */ + +import go + +/** + * Provides a library for local (intra-procedural) and global (inter-procedural) + * data flow analysis. + */ +module DataFlow2 { + import semmle.go.dataflow.internal.DataFlowImpl2 + import Properties +} diff --git a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll new file mode 100644 index 00000000000..1716fa33ef7 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll @@ -0,0 +1,468 @@ +/** + * INTERNAL use only. This is an experimental API subject to change without notice. + * + * Provides classes and predicates for dealing with flow models specified in CSV format. + * + * The CSV specification has the following columns: + * - Sources: + * `namespace; type; subtypes; name; signature; ext; output; kind` + * - Sinks: + * `namespace; type; subtypes; name; signature; ext; input; kind` + * - Summaries: + * `namespace; type; subtypes; name; signature; ext; input; output; kind` + * + * The interpretation of a row is similar to API-graphs with a left-to-right + * reading. + * 1. The `namespace` column selects a package. + * 2. The `type` column selects a type within that package. + * 3. The `subtypes` is a boolean that indicates whether to jump to an + * arbitrary subtype of that type. + * 4. The `name` column optionally selects a specific named member of the type. + * 5. The `signature` column is always empty. + * 6. The `ext` column is always empty. + * 7. The `input` column specifies how data enters the element selected by the + * first 6 columns, and the `output` column specifies how data leaves the + * element selected by the first 6 columns. An `input` can be either "", + * "Argument[n]", or "Argument[n1..n2]": + * - "": Selects a write to the selected element in case this is a field. + * - "Argument[n]": Selects an argument in a call to the selected element. + * The arguments are zero-indexed, and `-1` specifies the qualifier. + * - "Argument[n1..n2]": Similar to "Argument[n]" but selects any argument + * in the given range. The range is inclusive at both ends. + * + * An `output` can be either "", "Argument[n]", "Argument[n1..n2]", "Parameter", + * "Parameter[n]", "Parameter[n1..n2]", , "ReturnValue", "ReturnValue[n]", or + * "ReturnValue[n1..n2]": + * - "": Selects a read of a selected field, or a selected parameter. + * - "Argument[n]": Selects the post-update value of an argument in a call to the + * selected element. That is, the value of the argument after the call returns. + * The arguments are zero-indexed, and `-1` specifies the qualifier. + * - "Argument[n1..n2]": Similar to "Argument[n]" but select any argument in + * the given range. The range is inclusive at both ends. + * - "Parameter": Selects the value of a parameter of the selected element. + * "Parameter" is also allowed in case the selected element is already a + * parameter itself. + * - "Parameter[n]": Similar to "Parameter" but restricted to a specific + * numbered parameter (zero-indexed, and `-1` specifies the value of `this`). + * - "Parameter[n1..n2]": Similar to "Parameter[n]" but selects any parameter + * in the given range. The range is inclusive at both ends. + * - "ReturnValue": Selects the first value being returned by the selected + * element. This requires that the selected element is a method with a + * body. + * - "ReturnValue[n]": Similar to "ReturnValue" but selects the specified + * return value. The return values are zero-indexed + * - "ReturnValue[n1..n2]": Similar to "ReturnValue[n]" but selects any + * return value in the given range. The range is inclusive at both ends. + * 8. The `kind` column is a tag that can be referenced from QL to determine to + * which classes the interpreted elements should be added. For example, for + * sources "remote" indicates a default remote flow source, and for summaries + * "taint" indicates a default additional taint step and "value" indicates a + * globally applicable value-preserving step. + */ + +private import go +private import internal.DataFlowPrivate +private import internal.FlowSummaryImpl::Private::External +private import internal.FlowSummaryImplSpecific +private import internal.AccessPathSyntax +private import FlowSummary + +/** + * A module importing the frameworks that provide external flow data, + * ensuring that they are visible to the taint tracking / data flow library. + */ +private module Frameworks { + private import semmle.go.frameworks.Stdlib +} + +private class BuiltinModel extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + ";;false;append;;;Argument[0].ArrayElement;ReturnValue.ArrayElement;value", + ";;false;append;;;Argument[1];ReturnValue.ArrayElement;value" + ] + } +} + +private predicate sourceModelCsv(string row) { none() } + +private predicate sinkModelCsv(string row) { none() } + +private predicate summaryModelCsv(string row) { none() } + +/** + * A unit class for adding additional source model rows. + * + * Extend this class to add additional source definitions. + */ +class SourceModelCsv extends Unit { + /** Holds if `row` specifies a source definition. */ + abstract predicate row(string row); +} + +/** + * A unit class for adding additional sink model rows. + * + * Extend this class to add additional sink definitions. + */ +class SinkModelCsv extends Unit { + /** Holds if `row` specifies a sink definition. */ + abstract predicate row(string row); +} + +/** + * A unit class for adding additional summary model rows. + * + * Extend this class to add additional flow summary definitions. + */ +class SummaryModelCsv extends Unit { + /** Holds if `row` specifies a summary definition. */ + abstract predicate row(string row); +} + +private predicate sourceModel(string row) { + sourceModelCsv(row) or + any(SourceModelCsv s).row(row) +} + +private predicate sinkModel(string row) { + sinkModelCsv(row) or + any(SinkModelCsv s).row(row) +} + +private predicate summaryModel(string row) { + summaryModelCsv(row) or + any(SummaryModelCsv s).row(row) +} + +/** Holds if a source model exists for the given parameters. */ +predicate sourceModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string output, string kind +) { + exists(string row | + sourceModel(row) and + row.splitAt(";", 0) = namespace and + row.splitAt(";", 1) = type and + row.splitAt(";", 2) = subtypes.toString() and + subtypes = [true, false] and + row.splitAt(";", 3) = name and + row.splitAt(";", 4) = signature and + row.splitAt(";", 5) = ext and + row.splitAt(";", 6) = output and + row.splitAt(";", 7) = kind + ) +} + +/** Holds if a sink model exists for the given parameters. */ +predicate sinkModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string kind +) { + exists(string row | + sinkModel(row) and + row.splitAt(";", 0) = namespace and + row.splitAt(";", 1) = type and + row.splitAt(";", 2) = subtypes.toString() and + subtypes = [true, false] and + row.splitAt(";", 3) = name and + row.splitAt(";", 4) = signature and + row.splitAt(";", 5) = ext and + row.splitAt(";", 6) = input and + row.splitAt(";", 7) = kind + ) +} + +/** Holds if a summary model exists for the given parameters. */ +predicate summaryModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string output, string kind +) { + summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, _) +} + +/** Holds if a summary model `row` exists for the given parameters. */ +predicate summaryModel( + string namespace, string type, boolean subtypes, string name, string signature, string ext, + string input, string output, string kind, string row +) { + summaryModel(row) and + row.splitAt(";", 0) = namespace and + row.splitAt(";", 1) = type and + row.splitAt(";", 2) = subtypes.toString() and + subtypes = [true, false] and + row.splitAt(";", 3) = name and + row.splitAt(";", 4) = signature and + row.splitAt(";", 5) = ext and + row.splitAt(";", 6) = input and + row.splitAt(";", 7) = output and + row.splitAt(";", 8) = kind +} + +/** Holds if `package` have CSV framework coverage. */ +private predicate packageHasCsvCoverage(string package) { + sourceModel(package, _, _, _, _, _, _, _) or + sinkModel(package, _, _, _, _, _, _, _) or + summaryModel(package, _, _, _, _, _, _, _, _) +} + +/** + * Holds if `package` and `subpkg` have CSV framework coverage and `subpkg` + * is a subpackage of `package`. + */ +private predicate packageHasASubpackage(string package, string subpkg) { + packageHasCsvCoverage(package) and + packageHasCsvCoverage(subpkg) and + subpkg.prefix(subpkg.indexOf(".")) = package +} + +/** + * Holds if `package` has CSV framework coverage and it is not a subpackage of + * any other package with CSV framework coverage. + */ +private predicate canonicalPackage(string package) { + packageHasCsvCoverage(package) and not packageHasASubpackage(_, package) +} + +/** + * Holds if `package` and `subpkg` have CSV framework coverage, `subpkg` is a + * subpackage of `package` (or they are the same), and `package` is not a + * subpackage of any other package with CSV framework coverage. + */ +private predicate canonicalPackageHasASubpackage(string package, string subpkg) { + canonicalPackage(package) and + (subpkg = package or packageHasASubpackage(package, subpkg)) +} + +/** + * Holds if CSV framework coverage of `package` is `n` api endpoints of the + * kind `(kind, part)`, and `pkgs` is the number of subpackages of `package` + * which have CSV framework coverage (including `package` itself). + */ +predicate modelCoverage(string package, int pkgs, string kind, string part, int n) { + pkgs = strictcount(string subpkg | canonicalPackageHasASubpackage(package, subpkg)) and + ( + part = "source" and + n = + strictcount(string subpkg, string type, boolean subtypes, string name, string signature, + string ext, string output | + canonicalPackageHasASubpackage(package, subpkg) and + sourceModel(subpkg, type, subtypes, name, signature, ext, output, kind) + ) + or + part = "sink" and + n = + strictcount(string subpkg, string type, boolean subtypes, string name, string signature, + string ext, string input | + canonicalPackageHasASubpackage(package, subpkg) and + sinkModel(subpkg, type, subtypes, name, signature, ext, input, kind) + ) + or + part = "summary" and + n = + strictcount(string subpkg, string type, boolean subtypes, string name, string signature, + string ext, string input, string output | + canonicalPackageHasASubpackage(package, subpkg) and + summaryModel(subpkg, type, subtypes, name, signature, ext, input, output, kind) + ) + ) +} + +/** Provides a query predicate to check the CSV data for validation errors. */ +module CsvValidation { + /** Holds if some row in a CSV-based flow model appears to contain typos. */ + query predicate invalidModelRow(string msg) { + exists(string pred, string namespace, string type, string name, string signature, string ext | + sourceModel(namespace, type, _, name, signature, ext, _, _) and pred = "source" + or + sinkModel(namespace, type, _, name, signature, ext, _, _) and pred = "sink" + or + summaryModel(namespace, type, _, name, signature, ext, _, _, _) and pred = "summary" + | + not namespace.regexpMatch("[a-zA-Z0-9_\\./]*") and + msg = "Dubious namespace \"" + namespace + "\" in " + pred + " model." + or + not type.regexpMatch("[a-zA-Z0-9_\\$<>]*") and + msg = "Dubious type \"" + type + "\" in " + pred + " model." + or + not name.regexpMatch("[a-zA-Z0-9_]*") and + msg = "Dubious name \"" + name + "\" in " + pred + " model." + or + not signature.regexpMatch("|\\([a-zA-Z0-9_\\.\\$<>,\\[\\]]*\\)") and + msg = "Dubious signature \"" + signature + "\" in " + pred + " model." + or + not ext.regexpMatch("|Annotated") and + msg = "Unrecognized extra API graph element \"" + ext + "\" in " + pred + " model." + ) + or + exists(string pred, AccessPath input, string part | + sinkModel(_, _, _, _, _, _, input, _) and pred = "sink" + or + summaryModel(_, _, _, _, _, _, input, _, _) and pred = "summary" + | + ( + invalidSpecComponent(input, part) and + not part = "" and + not parseArg(part, _) + or + part = input.getToken(_) and + parseParam(part, _) + ) and + msg = "Unrecognized input specification \"" + part + "\" in " + pred + " model." + ) + or + exists(string pred, string output, string part | + sourceModel(_, _, _, _, _, _, output, _) and pred = "source" + or + summaryModel(_, _, _, _, _, _, _, output, _) and pred = "summary" + | + invalidSpecComponent(output, part) and + not part = "" and + not (part = "Parameter" and pred = "source") and + msg = "Unrecognized output specification \"" + part + "\" in " + pred + " model." + ) + or + exists(string pred, string row, int expect | + sourceModel(row) and expect = 8 and pred = "source" + or + sinkModel(row) and expect = 8 and pred = "sink" + or + summaryModel(row) and expect = 9 and pred = "summary" + | + exists(int cols | + cols = 1 + max(int n | exists(row.splitAt(";", n))) and + cols != expect and + msg = + "Wrong number of columns in " + pred + " model row, expected " + expect + ", got " + cols + + "." + ) + or + exists(string b | + b = row.splitAt(";", 2) and + not b = ["true", "false"] and + msg = "Invalid boolean \"" + b + "\" in " + pred + " model." + ) + ) + } +} + +pragma[nomagic] +private predicate elementSpec( + string namespace, string type, boolean subtypes, string name, string signature, string ext +) { + sourceModel(namespace, type, subtypes, name, signature, ext, _, _) or + sinkModel(namespace, type, subtypes, name, signature, ext, _, _) or + summaryModel(namespace, type, subtypes, name, signature, ext, _, _, _) +} + +private string paramsStringPart(Function f, int i) { + i = -1 and result = "(" + or + exists(int n, string p | f.getParameterType(n).toString() = p | + i = 2 * n and result = p + or + i = 2 * n - 1 and result = "," and n != 0 + ) + or + i = 2 * f.getNumParameter() and result = ")" +} + +/** + * Gets a parenthesized string containing all parameter types of this callable, separated by a comma. + * + * Returns the empty string if the callable has no parameters. + * Parameter types are represented by their type erasure. + */ +string paramsString(Function f) { result = concat(int i | | paramsStringPart(f, i) order by i) } + +/** Gets the source/sink/summary element corresponding to the supplied parameters. */ +SourceOrSinkElement interpretElement( + string pkg, string type, boolean subtypes, string name, string signature, string ext +) { + elementSpec(pkg, type, subtypes, name, signature, ext) and + // Go does not need to distinguish functions with signature + signature = "" and + ( + exists(Field f | f.hasQualifiedName(pkg, type, name) | result.asEntity() = f) + or + exists(Method m | m.hasQualifiedName(pkg, type, name) | + result.asEntity() = m + or + subtypes = true and result.asEntity().(Method).implements(m) + ) + or + type = "" and + exists(Entity e | e.hasQualifiedName(pkg, name) | result.asEntity() = e) + ) +} + +/** Holds if there is an external specification for `f`. */ +predicate hasExternalSpecification(Function f) { + f = any(SummarizedCallable sc).asFunction() + or + exists(SourceOrSinkElement e | f = e.asEntity() | sourceElement(e, _, _) or sinkElement(e, _, _)) +} + +private predicate parseField(AccessPathToken c, DataFlow::FieldContent f) { + exists(string fieldRegex, string package, string className, string fieldName | + fieldRegex = "^Field\\[(.*)\\.([^.]+)\\.([^.]+)\\]$" and + package = c.regexpCapture(fieldRegex, 1) and + className = c.regexpCapture(fieldRegex, 2) and + fieldName = c.regexpCapture(fieldRegex, 3) and + f.getField().hasQualifiedName(package, className, fieldName) + ) +} + +/** A string representing a synthetic instance field. */ +class SyntheticField extends string { + SyntheticField() { parseSynthField(_, this) } + + /** + * Gets the type of this field. The default type is `interface{}`, but this can be + * overridden. + */ + Type getType() { result instanceof EmptyInterfaceType } +} + +private predicate parseSynthField(AccessPathToken c, string f) { + c.regexpCapture("SyntheticField\\[([.a-zA-Z0-9]+)\\]", 1) = f +} + +/** Holds if the specification component parses as a `Content`. */ +predicate parseContent(string component, DataFlow::Content content) { + parseField(component, content) + or + parseSynthField(component, content.(DataFlow::SyntheticFieldContent).getField()) + or + component = "ArrayElement" and content instanceof DataFlow::ArrayContent + or + component = "Element" and content instanceof DataFlow::CollectionContent + or + component = "MapKey" and content instanceof DataFlow::MapKeyContent + or + component = "MapValue" and content instanceof DataFlow::MapValueContent +} + +cached +private module Cached { + /** + * Holds if `node` is specified as a source with the given kind in a CSV flow + * model. + */ + cached + predicate sourceNode(DataFlow::Node node, string kind) { + exists(InterpretNode n | isSourceNode(n, kind) and n.asNode() = node) + } + + /** + * Holds if `node` is specified as a sink with the given kind in a CSV flow + * model. + */ + cached + predicate sinkNode(DataFlow::Node node, string kind) { + exists(InterpretNode n | isSinkNode(n, kind) and n.asNode() = node) + } +} + +import Cached diff --git a/go/ql/lib/semmle/go/dataflow/FlowSummary.qll b/go/ql/lib/semmle/go/dataflow/FlowSummary.qll new file mode 100644 index 00000000000..39f8774716a --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/FlowSummary.qll @@ -0,0 +1,49 @@ +/** + * Provides classes and predicates for definining flow summaries. + */ + +import go +private import internal.FlowSummaryImpl as Impl +private import internal.DataFlowDispatch +private import internal.DataFlowUtil + +// import all instances below +private module Summaries { } + +class SummaryComponent = Impl::Public::SummaryComponent; + +/** Provides predicates for constructing summary components. */ +module SummaryComponent { + import Impl::Public::SummaryComponent + + /** Gets a summary component that represents a qualifier. */ + SummaryComponent qualifier() { result = argument(-1) } + + /** Gets a summary component for field `f`. */ + SummaryComponent field(Field f) { result = content(any(FieldContent c | c.getField() = f)) } + + /** Gets a summary component that represents the return value of a call. */ + SummaryComponent return() { result = return(_) } +} + +class SummaryComponentStack = Impl::Public::SummaryComponentStack; + +/** Provides predicates for constructing stacks of summary components. */ +module SummaryComponentStack { + import Impl::Public::SummaryComponentStack + + /** Gets a singleton stack representing a qualifier. */ + SummaryComponentStack qualifier() { result = singleton(SummaryComponent::qualifier()) } + + /** Gets a stack representing a field `f` of `object`. */ + SummaryComponentStack fieldOf(Field f, SummaryComponentStack object) { + result = push(SummaryComponent::field(f), object) + } + + /** Gets a singleton stack representing a (normal) return. */ + SummaryComponentStack return() { result = singleton(SummaryComponent::return()) } +} + +class SummarizedCallable = Impl::Public::SummarizedCallable; + +class RequiredSummaryComponentStack = Impl::Public::RequiredSummaryComponentStack; diff --git a/go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll b/go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll new file mode 100644 index 00000000000..c1653f5b3ad --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll @@ -0,0 +1,310 @@ +/** + * Provides QL classes for indicating data flow through a function parameter, return value, + * or receiver. + */ + +import go +private import semmle.go.dataflow.internal.DataFlowPrivate + +/** + * An abstract representation of an input to a function, which is either a parameter + * or the receiver parameter. + */ +private newtype TFunctionInput = + TInParameter(int i) { exists(SignatureType s | exists(s.getParameterType(i))) } or + TInReceiver() or + TInResult(int index) { + // the one and only result + index = -1 + or + // one among several results + exists(SignatureType s | exists(s.getResultType(index))) + } + +/** + * An abstract representation of an input to a function, which is either a parameter + * or the receiver parameter. + */ +class FunctionInput extends TFunctionInput { + /** Holds if this represents the `i`th parameter of a function. */ + predicate isParameter(int i) { none() } + + /** Holds if this represents the receiver of a function. */ + predicate isReceiver() { none() } + + /** Holds if this represents the result of a function. */ + predicate isResult() { none() } + + /** Holds if this represents the `i`th result of a function. */ + predicate isResult(int i) { none() } + + /** Gets the data-flow node corresponding to this input for the call `c`. */ + final DataFlow::Node getNode(DataFlow::CallNode c) { result = getEntryNode(c) } + + /** Gets the data-flow node through which data is passed into this input for the call `c`. */ + abstract DataFlow::Node getEntryNode(DataFlow::CallNode c); + + /** Gets the data-flow node through which data from this input enters function `f`. */ + abstract DataFlow::Node getExitNode(FuncDef f); + + /** Gets a textual representation of this element. */ + abstract string toString(); +} + +/** Defines convenience methods that get particular `FunctionInput` instances. */ +module FunctionInput { + /** Gets a `FunctionInput` representing the `i`th parameter. */ + FunctionInput parameter(int i) { result.isParameter(i) } + + /** Gets a `FunctionInput` representing the receiver. */ + FunctionInput receiver() { result.isReceiver() } + + /** Gets a `FunctionInput` representing the result of a single-result function. */ + FunctionInput functionResult() { result.isResult() } + + /** Gets a `FunctionInput` representing the `i`th result. */ + FunctionInput functionResult(int i) { result.isResult(i) } +} + +/** A parameter position of a function, viewed as a source of input. */ +private class ParameterInput extends FunctionInput, TInParameter { + int index; + + ParameterInput() { this = TInParameter(index) } + + override predicate isParameter(int i) { i = index } + + override DataFlow::Node getEntryNode(DataFlow::CallNode c) { result = c.getArgument(index) } + + override DataFlow::Node getExitNode(FuncDef f) { + result = DataFlow::parameterNode(f.getParameter(index)) + } + + override string toString() { result = "parameter " + index } +} + +/** The receiver of a function, viewed as a source of input. */ +private class ReceiverInput extends FunctionInput, TInReceiver { + override predicate isReceiver() { any() } + + override DataFlow::Node getEntryNode(DataFlow::CallNode c) { + result = c.(DataFlow::MethodCallNode).getReceiver() + } + + override DataFlow::Node getExitNode(FuncDef f) { + result = DataFlow::receiverNode(f.(MethodDecl).getReceiver()) + } + + override string toString() { result = "receiver" } +} + +/** + * A result position of a function, viewed as an input. + * + * Results are usually outputs rather than inputs, but for taint tracking it can be useful to + * think of taint propagating backwards from a result of a function to its arguments. For instance, + * the function `bufio.NewWriter` returns a writer `bw` that buffers write operations to an + * underlying writer `w`. If tainted data is written to `bw`, then it makes sense to propagate + * that taint back to the underlying writer `w`, which can be modeled by saying that + * `bufio.NewWriter` propagates taint from its result to its first argument. + */ +private class ResultInput extends FunctionInput, TInResult { + int index; + + ResultInput() { this = TInResult(index) } + + override predicate isResult() { index = -1 } + + override predicate isResult(int i) { + i = 0 and isResult() + or + i = index and i >= 0 + } + + override DataFlow::Node getEntryNode(DataFlow::CallNode c) { + exists(DataFlow::Node pred | + index = -1 and + pred = c.getResult() + or + index >= 0 and + pred = c.getResult(index) + | + // if the result is assigned to an SSA variable, we want to propagate mutations backwards + // through that variable + exists(DataFlow::SsaNode ssa | ssa.getInit() = pred | result = ssa) + or + // otherwise the entry node is simply the result + not exists(DataFlow::SsaNode ssa | ssa.getInit() = pred) and + result = pred + ) + } + + override DataFlow::Node getExitNode(FuncDef f) { none() } + + override string toString() { + index = -1 and result = "result" + or + index >= 0 and result = "result " + index + } +} + +/** + * An abstract representation of an output of a function, which is one of its results. + */ +private newtype TFunctionOutput = + TOutResult(int index) { + // the one and only result + index = -1 + or + // one among several results + exists(SignatureType s | exists(s.getResultType(index))) + } or + TOutReceiver() or + TOutParameter(int index) { exists(SignatureType s | exists(s.getParameterType(index))) } + +/** + * An abstract representation of an output of a function, which is one of its results + * or a parameter with mutable type. + */ +class FunctionOutput extends TFunctionOutput { + /** Holds if this represents the (single) result of a function. */ + predicate isResult() { none() } + + /** Holds if this represents the `i`th result of a function. */ + predicate isResult(int i) { none() } + + /** Holds if this represents the receiver of a function. */ + predicate isReceiver() { none() } + + /** Holds if this represents the `i`th parameter of a function. */ + predicate isParameter(int i) { none() } + + /** Gets the data-flow node corresponding to this output for the call `c`. */ + final DataFlow::Node getNode(DataFlow::CallNode c) { result = getExitNode(c) } + + /** Gets the data-flow node through which data is passed into this output for the function `f`. */ + abstract DataFlow::Node getEntryNode(FuncDef f); + + /** Gets the data-flow node through which data is returned from this output for the call `c`. */ + abstract DataFlow::Node getExitNode(DataFlow::CallNode c); + + /** Gets a textual representation of this element. */ + abstract string toString(); +} + +/** Defines convenience methods that get particular `FunctionOutput` instances. */ +module FunctionOutput { + /** Gets a `FunctionOutput` representing the result of a single-result function. */ + FunctionOutput functionResult() { result.isResult() } + + /** Gets a `FunctionOutput` representing the `i`th result. */ + FunctionOutput functionResult(int i) { result.isResult(i) } + + /** Gets a `FunctionOutput` representing the receiver after a function returns. */ + FunctionOutput receiver() { result.isReceiver() } + + /** Gets a `FunctionOutput` representing the `i`th parameter after a function returns. */ + FunctionOutput parameter(int i) { result.isParameter(i) } +} + +/** A result position of a function, viewed as an output. */ +private class OutResult extends FunctionOutput, TOutResult { + int index; + + OutResult() { this = TOutResult(index) } + + override predicate isResult() { index = -1 } + + override predicate isResult(int i) { + i = 0 and isResult() + or + i = index and i >= 0 + } + + override DataFlow::Node getEntryNode(FuncDef f) { + // return expressions + exists(IR::ReturnInstruction ret | f = ret.getRoot() | + index = -1 and + result = DataFlow::instructionNode(ret.getResult()) + or + index >= 0 and + ret.returnsMultipleResults() and + result = DataFlow::instructionNode(ret.getResult(index)) + ) + or + // expressions assigned to result variables + exists(Write w, int nr | nr = f.getType().getNumResult() | + index = -1 and + nr = 1 and + w.writes(f.getResultVar(0), result) + or + index >= 0 and + nr > 1 and + w.writes(f.getResultVar(index), result) + ) + } + + override DataFlow::Node getExitNode(DataFlow::CallNode c) { + index = -1 and result = c.getResult() + or + result = c.getResult(index) + } + + override string toString() { + index = -1 and result = "result" + or + index >= 0 and result = "result " + index + } +} + +/** The receiver of a function, viewed as an output. */ +private class OutReceiver extends FunctionOutput, TOutReceiver { + override predicate isReceiver() { any() } + + override DataFlow::Node getEntryNode(FuncDef f) { + // there is no generic way of assigning to a receiver; operations that taint a receiver + // have to be handled on a case-by-case basis + none() + } + + override DataFlow::Node getExitNode(DataFlow::CallNode c) { + exists(DataFlow::Node arg | + arg = getArgument(c, -1) and + result.(DataFlow::PostUpdateNode).getPreUpdateNode() = arg + ) + } + + override string toString() { result = "receiver" } +} + +/** + * A parameter of a function, viewed as an output. + * + * Note that slices passed to varargs parameters using `...` are not included, since in this + * case it is ambiguous whether the output should be the slice itself or one of its elements. + */ +private class OutParameter extends FunctionOutput, TOutParameter { + int index; + + OutParameter() { this = TOutParameter(index) } + + override predicate isParameter(int i) { i = index } + + override DataFlow::Node getEntryNode(FuncDef f) { + // there is no generic way of assigning to a parameter; operations that taint a parameter + // have to be handled on a case-by-case basis + none() + } + + override DataFlow::Node getExitNode(DataFlow::CallNode c) { + exists(DataFlow::Node arg | + arg = getArgument(c, index) and + // exclude slices passed to varargs parameters using `...` calls + not (c.hasEllipsis() and index = c.getNumArgument() - 1) + | + result.(DataFlow::PostUpdateNode).getPreUpdateNode() = arg + ) + } + + override string toString() { result = "parameter " + index } +} diff --git a/go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll b/go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll new file mode 100644 index 00000000000..c9c0c58b33e --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll @@ -0,0 +1,591 @@ +/** + * Provides an implementation of Global Value Numbering. + * See https://en.wikipedia.org/wiki/Global_value_numbering + * + * The predicate `globalValueNumber` converts an expression into a `GVN`, + * which is an abstract type representing the value of the expression. If + * two expressions have the same `GVN` then they compute the same value. + * For example: + * + * ``` + * func f(x int, y int) { + * g(x+y, x+y); + * } + * ``` + * + * In this example, both arguments in the call to `g` compute the same value, + * so both arguments have the same `GVN`. In other words, we can find + * this call with the following query: + * + * ``` + * from CallExpr call, GVN v + * where v = globalValueNumber(call.getArgument(0)) + * and v = globalValueNumber(call.getArgument(1)) + * select call + * ``` + * + * The analysis is conservative, so two expressions might have different + * `GVN`s even though the actually always compute the same value. The most + * common reason for this is that the analysis cannot prove that there + * are no side-effects that might cause the computed value to change. + */ + +/* + * Note to developers: the correctness of this module depends on the + * definitions of GVN, globalValueNumber, and analyzableExpr being kept in + * sync with each other. If you change this module then make sure that the + * change is symmetric across all three. + */ + +import go + +/** + * Holds if the result is a control flow node that might change the + * value of any package variable. This is used in the implementation + * of `MkOtherVariable`, because we need to be quite conservative when + * we assign a value number to a package variable. For example: + * + * ``` + * x = g+1; + * dosomething(); + * y = g+1; + * ``` + * + * It is not safe to assign the same value number to both instances + * of `g+1` in this example, because the call to `dosomething` might + * change the value of `g`. + */ +private ControlFlow::Node nodeWithPossibleSideEffect() { + exists(DataFlow::CallNode call | + call.getCall().mayHaveOwnSideEffects() and + not isPureFn(call.getTarget()) and + result = call.asInstruction() + ) + or + // If the lhs of an assignment is not analyzable by SSA, then + // we need to treat the assignment as having a possible side-effect. + result instanceof Write and + not exists(SsaExplicitDefinition ssa | result = ssa.getInstruction()) +} + +private predicate isPureFn(Function f) { + f.(BuiltinFunction).isPure() + or + isPureStmt(f.(DeclaredFunction).getBody()) +} + +private predicate isPureStmt(Stmt s) { + exists(BlockStmt blk | blk = s | forall(Stmt ch | ch = blk.getAStmt() | isPureStmt(ch))) + or + isPureExpr(s.(ReturnStmt).getExpr()) +} + +private predicate isPureExpr(Expr e) { + e instanceof BasicLit + or + exists(FuncDef f | f = e.getEnclosingFunction() | + e = f.getAParameter().getAReference() + or + e = f.(MethodDecl).getReceiver().getAReference() + ) + or + isPureExpr(e.(SelectorExpr).getBase()) + or + exists(CallExpr ce | e = ce | + isPureFn(ce.getTarget()) and + forall(Expr arg | arg = ce.getAnArgument() | isPureExpr(arg)) + ) +} + +/** + * Gets the entry node of the control flow graph of which `node` is a + * member. + */ +private ControlFlow::Node getControlFlowEntry(ControlFlow::Node node) { + result = node.getRoot().getEntryNode() +} + +private predicate entryNode(ControlFlow::Node node) { node.isEntryNode() } + +/** + * Holds if there is a control flow edge from `src` to `dst` or + * if `dst` is an expression with a possible side-effect. The idea + * is to treat side effects as entry points in the control flow + * graph so that we can use the dominator tree to find the most recent + * side-effect. + */ +private predicate sideEffectCFG(ControlFlow::Node src, ControlFlow::Node dst) { + src.getASuccessor() = dst + or + // Add an edge from the entry point to any node that might have a side + // effect. + dst = nodeWithPossibleSideEffect() and + src = getControlFlowEntry(dst) +} + +/** + * Holds if `dominator` is the immediate dominator of `node` in + * the side-effect CFG. + */ +private predicate iDomEffect(ControlFlow::Node dominator, ControlFlow::Node node) = + idominance(entryNode/1, sideEffectCFG/2)(_, dominator, node) + +/** + * Gets the most recent side effect. To be more precise, `result` is a + * dominator of `node` and no side-effects can occur between `result` and + * `node`. + * + * `sideEffectCFG` has an edge from the function entry to every node with a + * side-effect. This means that every node with a side-effect has the + * function entry as its immediate dominator. So if node `x` dominates node + * `y` then there can be no side effects between `x` and `y` unless `x` is + * the function entry. So the optimal choice for `result` has the function + * entry as its immediate dominator. + * + * Example: + * + * ``` + * 000: int f(int a, int b, int *p) { + * 001: int r = 0; + * 002: if (a) { + * 003: if (b) { + * 004: sideEffect1(); + * 005: } + * 006: } else { + * 007: sideEffect2(); + * 008: } + * 009: if (a) { + * 010: r++; // Not a side-effect, because r is an SSA variable. + * 011: } + * 012: if (b) { + * 013: r++; // Not a side-effect, because r is an SSA variable. + * 014: } + * 015: return *p; + * 016: } + * ``` + * + * Suppose we want to find the most recent side-effect for the dereference + * of `p` on line 015. The `sideEffectCFG` has an edge from the function + * entry (line 000) to the side effects at lines 004 and 007. Therefore, + * the immediate dominator tree looks like this: + * + * 000 - 001 - 002 - 003 + * - 004 + * - 007 + * - 009 - 010 + * - 012 - 013 + * - 015 + * + * The immediate dominator path to line 015 is 000 - 009 - 012 - 015. + * Therefore, the most recent side effect for line 015 is line 009. + */ +cached +private ControlFlow::Node mostRecentSideEffect(ControlFlow::Node node) { + exists(ControlFlow::Node entry | + entryNode(entry) and + iDomEffect(entry, result) and + iDomEffect*(result, node) + ) +} + +/** Used to represent the "global value number" of an expression. */ +cached +private newtype GVNBase = + MkNumericConst(string val) { mkNumericConst(_, val) } or + MkStringConst(string val) { mkStringConst(_, val) } or + MkBoolConst(boolean val) { mkBoolConst(_, val) } or + MkIndirectSsa(SsaDefinition def) { not ssaInit(def, _) } or + MkFunc(Function fn) { mkFunc(_, fn) } or + // Variables with no SSA information. As a crude (but safe) + // approximation, we use `mostRecentSideEffect` to compute a definition + // location for the variable. This ensures that two instances of the same + // global variable will only get the same value number if they are + // guaranteed to have the same value. + MkOtherVariable(ValueEntity x, ControlFlow::Node dominator) { mkOtherVariable(_, x, dominator) } or + MkMethodAccess(GVN base, Function m) { mkMethodAccess(_, base, m) } or + MkFieldRead(GVN base, Field f, ControlFlow::Node dominator) { mkFieldRead(_, base, f, dominator) } or + MkPureCall(Function f, GVN callee, GVNList args) { mkPureCall(_, f, callee, args) } or + MkIndex(GVN base, GVN index, ControlFlow::Node dominator) { mkIndex(_, base, index, dominator) } or + // Dereference a pointer. The value might have changed since the last + // time the pointer was dereferenced, so we need to include a definition + // location. As a crude (but safe) approximation, we use + // `mostRecentSideEffect` to compute a definition location. + MkDeref(GVN base, ControlFlow::Node dominator) { mkDeref(_, base, dominator) } or + MkBinaryOp(GVN lhs, GVN rhs, string op) { mkBinaryOp(_, lhs, rhs, op) } or + MkUnaryOp(GVN child, string op) { mkUnaryOp(_, child, op) } or + // Any expression that is not handled by the cases above is + // given a unique number based on the expression itself. + MkUnanalyzable(DataFlow::Node e) { not analyzableExpr(e) } + +private newtype GVNList = + MkNil() or + MkCons(GVN head, GVNList tail) { globalValueNumbers(_, _, head, tail) } + +private GVNList globalValueNumbers(DataFlow::CallNode ce, int start) { + analyzableCall(ce, _) and + start = ce.getNumArgument() and + result = MkNil() + or + exists(GVN head, GVNList tail | + globalValueNumbers(ce, start, head, tail) and + result = MkCons(head, tail) + ) +} + +private predicate globalValueNumbers(DataFlow::CallNode ce, int start, GVN head, GVNList tail) { + analyzableCall(ce, _) and + head = globalValueNumber(ce.getArgument(start)) and + tail = globalValueNumbers(ce, start + 1) +} + +/** + * A Global Value Number. A GVN is an abstract representation of the value + * computed by an expression. The relationship between `Expr` and `GVN` is + * many-to-one: every `Expr` has exactly one `GVN`, but multiple + * expressions can have the same `GVN`. If two expressions have the same + * `GVN`, it means that they compute the same value at run time. The `GVN` + * is an opaque value, so you cannot deduce what the run-time value of an + * expression will be from its `GVN`. The only use for the `GVN` of an + * expression is to find other expressions that compute the same value. + * Use the predicate `globalValueNumber` to get the `GVN` for an `Expr`. + * + * Note: `GVN` has `toString` and `getLocation` methods, so that it can be + * displayed in a results list. These work by picking an arbitrary + * expression with this `GVN` and using its `toString` and `getLocation` + * methods. + */ +class GVN extends GVNBase { + GVN() { this instanceof GVNBase } + + /** Gets a data-flow node that has this GVN. */ + DataFlow::Node getANode() { this = globalValueNumber(result) } + + /** Gets the kind of the GVN. This can be useful for debugging. */ + string getKind() { + this instanceof MkNumericConst and result = "NumericConst" + or + this instanceof MkStringConst and result = "StringConst" + or + this instanceof MkBoolConst and result = "BoolConst" + or + this instanceof MkIndirectSsa and result = "IndirectSsa" + or + this instanceof MkFunc and result = "Func" + or + this instanceof MkOtherVariable and result = "OtherVariable" + or + this instanceof MkMethodAccess and result = "MethodAccess" + or + this instanceof MkFieldRead and result = "FieldRead" + or + this instanceof MkPureCall and result = "PureCall" + or + this instanceof MkIndex and result = "Index" + or + this instanceof MkDeref and result = "Deref" + or + this instanceof MkBinaryOp and result = "BinaryOp" + or + this instanceof MkUnaryOp and result = "UnaryOp" + or + this instanceof MkUnanalyzable and result = "Unanalyzable" + } + + /** + * Gets an example of a data-flow node with this GVN. + * This is useful for things like implementing toString(). + */ + private DataFlow::Node exampleNode() { + // Pick the expression with the minimum source location. This is + // just an arbitrary way to pick an expression with this `GVN`. + result = + min(DataFlow::Node e, string f, int l, int c, string k | + e = getANode() and e.hasLocationInfo(f, l, c, _, _) and k = e.getNodeKind() + | + e order by f, l, c, k + ) + } + + /** Gets a textual representation of this element. */ + string toString() { result = exampleNode().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/). + */ + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + exampleNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +private predicate mkNumericConst(DataFlow::Node nd, string val) { + nd.getType().getUnderlyingType() instanceof NumericType and + val = nd.getExactValue() and + nd.isPlatformIndependentConstant() +} + +private predicate mkStringConst(DataFlow::Node nd, string val) { + val = nd.getStringValue() and + nd.isPlatformIndependentConstant() +} + +private predicate mkBoolConst(DataFlow::Node nd, boolean val) { + val = nd.getBoolValue() and + nd.isPlatformIndependentConstant() +} + +private predicate mkFunc(DataFlow::Node nd, Function f) { + nd = f.getARead() and + not f instanceof Method +} + +private predicate analyzableConst(DataFlow::Node e) { + mkNumericConst(e, _) or mkStringConst(e, _) or mkBoolConst(e, _) or mkFunc(e, _) +} + +private predicate analyzableMethodAccess(Read access, DataFlow::Node receiver, Method m) { + exists(IR::ReadInstruction r | r = access.asInstruction() | + r.readsMethod(receiver.asInstruction(), m) and + not r.isConst() + ) +} + +private predicate mkMethodAccess(DataFlow::Node access, GVN qualifier, Method m) { + exists(DataFlow::Node base | + analyzableMethodAccess(access, base, m) and + qualifier = globalValueNumber(base) + ) +} + +private predicate analyzableFieldRead(Read fread, DataFlow::Node base, Field f) { + exists(IR::ReadInstruction r | r = fread.asInstruction() | + r.readsField(base.asInstruction(), f) and + strictcount(mostRecentSideEffect(r)) = 1 and + not r.isConst() + ) +} + +private predicate mkFieldRead( + DataFlow::Node fread, GVN qualifier, Field v, ControlFlow::Node dominator +) { + exists(DataFlow::Node base | + analyzableFieldRead(fread, base, v) and + qualifier = globalValueNumber(base) and + dominator = mostRecentSideEffect(fread.asInstruction()) + ) +} + +private predicate analyzableCall(DataFlow::CallNode ce, Function f) { + f = ce.getTarget() and + isPureFn(f) and + not ce.isConst() +} + +private predicate mkPureCall(DataFlow::CallNode ce, Function f, GVN callee, GVNList args) { + analyzableCall(ce, f) and + callee = globalValueNumber(ce.getCalleeNode()) and + args = globalValueNumbers(ce, 0) +} + +/** + * Holds if `v` is a variable whose value changes are not, or at least not fully, captured by SSA. + * + * This is the case for package variables (for which no SSA information exists), but also for + * variables of non-primitive type (for which deep mutations are not captured by SSA). + */ +private predicate incompleteSsa(ValueEntity v) { + not v instanceof Field and + ( + not v instanceof SsaSourceVariable + or + v.(SsaSourceVariable).mayHaveIndirectReferences() + or + exists(Type tp | tp = v.(DeclaredVariable).getType().getUnderlyingType() | + not tp instanceof BasicType + ) + ) +} + +/** + * Holds if `access` is an access to a variable `target` for which SSA information is incomplete. + */ +private predicate analyzableOtherVariable(DataFlow::Node access, ValueEntity target) { + access.asInstruction().reads(target) and + incompleteSsa(target) and + strictcount(mostRecentSideEffect(access.asInstruction())) = 1 and + not access.isConst() and + not target instanceof Function +} + +private predicate mkOtherVariable(DataFlow::Node access, ValueEntity x, ControlFlow::Node dominator) { + analyzableOtherVariable(access, x) and + dominator = mostRecentSideEffect(access.asInstruction()) +} + +private predicate analyzableBinaryOp( + DataFlow::BinaryOperationNode op, string opname, DataFlow::Node lhs, DataFlow::Node rhs +) { + opname = op.getOperator() and + not op.mayHaveSideEffects() and + lhs = op.getLeftOperand() and + rhs = op.getRightOperand() and + not op.isConst() +} + +private predicate mkBinaryOp(DataFlow::Node op, GVN lhs, GVN rhs, string opname) { + exists(DataFlow::Node l, DataFlow::Node r | + analyzableBinaryOp(op, opname, l, r) and + lhs = globalValueNumber(l) and + rhs = globalValueNumber(r) + ) +} + +private predicate analyzableUnaryOp(DataFlow::UnaryOperationNode op) { + not op.mayHaveSideEffects() and + not op.isConst() +} + +private predicate mkUnaryOp(DataFlow::UnaryOperationNode op, GVN child, string opname) { + analyzableUnaryOp(op) and + child = globalValueNumber(op.getOperand()) and + opname = op.getOperator() +} + +private predicate analyzableIndexExpr(DataFlow::ElementReadNode ae) { + strictcount(mostRecentSideEffect(ae.asInstruction())) = 1 and + not ae.isConst() +} + +private predicate mkIndex( + DataFlow::ElementReadNode ae, GVN base, GVN offset, ControlFlow::Node dominator +) { + analyzableIndexExpr(ae) and + base = globalValueNumber(ae.getBase()) and + offset = globalValueNumber(ae.getIndex()) and + dominator = mostRecentSideEffect(ae.asInstruction()) +} + +private predicate analyzablePointerDereferenceExpr(DataFlow::PointerDereferenceNode deref) { + strictcount(mostRecentSideEffect(deref.asInstruction())) = 1 and + not deref.isConst() +} + +private predicate mkDeref(DataFlow::PointerDereferenceNode deref, GVN p, ControlFlow::Node dominator) { + analyzablePointerDereferenceExpr(deref) and + p = globalValueNumber(deref.getOperand()) and + dominator = mostRecentSideEffect(deref.asInstruction()) +} + +private predicate ssaInit(SsaExplicitDefinition ssa, DataFlow::Node rhs) { + ssa.getRhs() = rhs.asInstruction() +} + +/** Gets the global value number of data-flow node `nd`. */ +cached +GVN globalValueNumber(DataFlow::Node nd) { + exists(string val | + mkNumericConst(nd, val) and + result = MkNumericConst(val) + ) + or + exists(string val | + mkStringConst(nd, val) and + result = MkStringConst(val) + ) + or + exists(boolean val | + mkBoolConst(nd, val) and + result = MkBoolConst(val) + ) + or + exists(Function f | + mkFunc(nd, f) and + result = MkFunc(f) + ) + or + exists(ValueEntity x, ControlFlow::Node dominator | + mkOtherVariable(nd, x, dominator) and + result = MkOtherVariable(x, dominator) + ) + or + exists(GVN qualifier, Function target | + mkMethodAccess(nd, qualifier, target) and + result = MkMethodAccess(qualifier, target) + ) + or + exists(GVN qualifier, Entity target, ControlFlow::Node dominator | + mkFieldRead(nd, qualifier, target, dominator) and + result = MkFieldRead(qualifier, target, dominator) + ) + or + exists(Function f, GVN callee, GVNList args | + mkPureCall(nd, f, callee, args) and + result = MkPureCall(f, callee, args) + ) + or + exists(GVN lhs, GVN rhs, string opname | + mkBinaryOp(nd, lhs, rhs, opname) and + result = MkBinaryOp(lhs, rhs, opname) + ) + or + exists(GVN child, string opname | + mkUnaryOp(nd, child, opname) and + result = MkUnaryOp(child, opname) + ) + or + exists(GVN x, GVN i, ControlFlow::Node dominator | + mkIndex(nd, x, i, dominator) and + result = MkIndex(x, i, dominator) + ) + or + exists(GVN p, ControlFlow::Node dominator | + mkDeref(nd, p, dominator) and + result = MkDeref(p, dominator) + ) + or + not analyzableExpr(nd) and + result = MkUnanalyzable(nd) + or + exists(DataFlow::SsaNode ssa | + nd = ssa.getAUse() and + not incompleteSsa(ssa.getSourceVariable()) and + result = globalValueNumber(ssa) + ) + or + exists(SsaDefinition ssa | ssa = nd.(DataFlow::SsaNode).getDefinition() | + // Local variable with a defining value. + exists(DataFlow::Node init | + ssaInit(ssa, init) and + result = globalValueNumber(init) + ) + or + // Local variable without a defining value. + not ssaInit(ssa, _) and + result = MkIndirectSsa(ssa) + ) +} + +/** + * Holds if the expression is explicitly handled by `globalValueNumber`. + * Unanalyzable expressions still need to be given a global value number, + * but it will be a unique number that is not shared with any other + * expression. + */ +private predicate analyzableExpr(DataFlow::Node e) { + analyzableConst(e) or + any(DataFlow::SsaNode ssa).getAUse() = e or + e instanceof DataFlow::SsaNode or + analyzableOtherVariable(e, _) or + analyzableMethodAccess(e, _, _) or + analyzableFieldRead(e, _, _) or + analyzableCall(e, _) or + analyzableBinaryOp(e, _, _, _) or + analyzableUnaryOp(e) or + analyzableIndexExpr(e) or + analyzablePointerDereferenceExpr(e) +} diff --git a/go/ql/lib/semmle/go/dataflow/Properties.qll b/go/ql/lib/semmle/go/dataflow/Properties.qll new file mode 100644 index 00000000000..f7df3391f40 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/Properties.qll @@ -0,0 +1,101 @@ +/** + * Provides a class for representing and reasoning about properties of data-flow nodes. + */ + +import go + +private newtype TProperty = + IsBoolean(Boolean b) or + IsNil(Boolean b) + +/** + * A property which may or may not hold of a data-flow node. + * + * Supported properties currently are Boolean truth and `nil`-ness. + */ +class Property extends TProperty { + private predicate checkOnExpr(Expr test, Boolean outcome, DataFlow::Node nd) { + exists(EqualityTestExpr eq, Expr e, boolean isTrue | + eq = test and eq.hasOperands(nd.asExpr(), e) + | + this = IsBoolean(isTrue) and + isTrue = eq.getPolarity().booleanXor(e.getBoolValue().booleanXor(outcome)) + or + this = IsNil(isTrue) and + e = Builtin::nil().getAReference() and + isTrue = eq.getPolarity().booleanXor(outcome).booleanNot() + ) + or + // if test = outcome ==> nd matches this + // then !test = !outcome ==> nd matches this + this.checkOnExpr(test.(NotExpr).getOperand(), outcome.booleanNot(), nd) + or + // if test = outcome ==> nd matches this + // then (test) = outcome ==> nd matches this + this.checkOnExpr(test.(ParenExpr).getExpr(), outcome, nd) + or + // if test = true ==> nd matches this + // then (test && e) = true ==> nd matches this + outcome = true and + this.checkOnExpr(test.(LandExpr).getAnOperand(), outcome, nd) + or + // if test = false ==> nd matches this + // then (test || e) = false ==> nd matches this + outcome = false and + this.checkOnExpr(test.(LorExpr).getAnOperand(), outcome, nd) + or + test = nd.asExpr() and + test instanceof ValueExpr and + test.getType().getUnderlyingType() instanceof BoolType and + this = IsBoolean(outcome) + } + + /** + * Holds if `test` evaluating to `outcome` means that this property holds of `nd`, where `nd` is a + * subexpression of `test`. + */ + predicate checkOn(DataFlow::Node test, Boolean outcome, DataFlow::Node nd) { + this.checkOnExpr(test.asExpr(), outcome, nd) + } + + /** Holds if this is the property of having the Boolean value `b`. */ + predicate isBoolean(boolean b) { this = IsBoolean(b) } + + /** Returns the boolean represented by this property if it is a boolean. */ + boolean asBoolean() { this = IsBoolean(result) } + + /** Holds if this is the property of being `nil`. */ + predicate isNil() { this = IsNil(true) } + + /** Holds if this is the property of being non-`nil`. */ + predicate isNonNil() { this = IsNil(false) } + + /** Gets a textual representation of this property. */ + string toString() { + exists(boolean b | + this = IsBoolean(b) and + result = "is " + b + ) + or + this = IsNil(true) and + result = "is nil" + or + this = IsNil(false) and + result = "is not nil" + } +} + +/** + * Gets a `Property` representing truth outcome `b`. + */ +Property booleanProperty(boolean b) { result = IsBoolean(b) } + +/** + * Gets a `Property` representing `nil`-ness. + */ +Property nilProperty() { result = IsNil(true) } + +/** + * Gets a `Property` representing non-`nil`-ness. + */ +Property notNilProperty() { result = IsNil(false) } diff --git a/go/ql/lib/semmle/go/dataflow/SSA.qll b/go/ql/lib/semmle/go/dataflow/SSA.qll new file mode 100644 index 00000000000..713b02e8325 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/SSA.qll @@ -0,0 +1,411 @@ +/** + * Provides classes for working with static single assignment form (SSA). + */ + +import go +private import SsaImpl + +/** + * A variable that can be SSA converted, that is, a local variable, but not a variable + * declared in file scope. + */ +class SsaSourceVariable extends LocalVariable { + SsaSourceVariable() { not this.getScope() instanceof FileScope } + + /** + * Holds if there may be indirect references of this variable that are not covered by `getAReference()`. + * + * This is the case for variables that have their address taken, and for variables whose + * name resolution information may be incomplete (for instance due to an extractor error). + */ + predicate mayHaveIndirectReferences() { + // variables that have their address taken + exists(AddressExpr addr | addr.getOperand().stripParens() = this.getAReference()) + or + exists(DataFlow::MethodReadNode mrn | + mrn.getReceiver() = this.getARead() and + mrn.getMethod().getReceiverType() instanceof PointerType + ) + or + // variables where there is an unresolved reference with the same name in the same + // scope or a nested scope, suggesting that name resolution information may be incomplete + exists(FunctionScope scope, FuncDef inner | + scope = this.getScope().(LocalScope).getEnclosingFunctionScope() and + unresolvedReference(this.getName(), inner) and + inner.getScope().getOuterScope*() = scope + ) + } +} + +/** + * Holds if there is an unresolved reference to `name` in `fn`. + */ +private predicate unresolvedReference(string name, FuncDef fn) { + exists(Ident unresolved | + unresolvedIdentifier(unresolved, name) and + not unresolved = any(SelectorExpr sel).getSelector() and + fn = unresolved.getEnclosingFunction() + ) +} + +/** + * Holds if `id` is an unresolved identifier with the given `name`. + */ +pragma[noinline] +private predicate unresolvedIdentifier(Ident id, string name) { + id.getName() = name and + id instanceof ReferenceExpr and + not id.refersTo(_) +} + +/** + * An SSA variable. + */ +class SsaVariable extends TSsaDefinition { + /** Gets the source variable corresponding to this SSA variable. */ + SsaSourceVariable getSourceVariable() { result = this.(SsaDefinition).getSourceVariable() } + + /** Gets the (unique) definition of this SSA variable. */ + SsaDefinition getDefinition() { result = this } + + /** Gets the type of this SSA variable. */ + Type getType() { result = this.getSourceVariable().getType() } + + /** Gets a use in basic block `bb` that refers to this SSA variable. */ + IR::Instruction getAUseIn(ReachableBasicBlock bb) { + exists(int i, SsaSourceVariable v | v = this.getSourceVariable() | + result = bb.getNode(i) and + this = getDefinition(bb, i, v) + ) + } + + /** Gets a use that refers to this SSA variable. */ + IR::Instruction getAUse() { result = this.getAUseIn(_) } + + /** Gets a textual representation of this element. */ + string toString() { result = this.getDefinition().prettyPrintRef() } + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getDefinition().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +/** + * An SSA definition. + */ +class SsaDefinition extends TSsaDefinition { + /** Gets the SSA variable defined by this definition. */ + SsaVariable getVariable() { result = this } + + /** Gets the source variable defined by this definition. */ + abstract SsaSourceVariable getSourceVariable(); + + /** + * Gets the basic block to which this definition belongs. + */ + abstract ReachableBasicBlock getBasicBlock(); + + /** + * INTERNAL: Use `getBasicBlock()` and `getSourceVariable()` instead. + * + * Holds if this is a definition of source variable `v` at index `idx` in basic block `bb`. + * + * Phi nodes are considered to be at index `-1`, all other definitions at the index of + * the control flow node they correspond to. + */ + abstract predicate definesAt(ReachableBasicBlock bb, int idx, SsaSourceVariable v); + + /** + * INTERNAL: Use `toString()` instead. + * + * Gets a pretty-printed representation of this SSA definition. + */ + abstract string prettyPrintDef(); + + /** + * INTERNAL: Do not use. + * + * Gets a pretty-printed representation of a reference to this SSA definition. + */ + abstract string prettyPrintRef(); + + /** Gets the innermost function or file to which this SSA definition belongs. */ + ControlFlow::Root getRoot() { result = this.getBasicBlock().getRoot() } + + /** Gets a textual representation of this element. */ + string toString() { result = this.prettyPrintDef() } + + /** + * 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 + ); +} + +/** + * An SSA definition that corresponds to an explicit assignment or other variable definition. + */ +class SsaExplicitDefinition extends SsaDefinition, TExplicitDef { + /** Gets the instruction where the definition happens. */ + IR::Instruction getInstruction() { + exists(BasicBlock bb, int i | this = TExplicitDef(bb, i, _) | result = bb.getNode(i)) + } + + /** Gets the right-hand side of the definition. */ + IR::Instruction getRhs() { this.getInstruction().writes(_, result) } + + override predicate definesAt(ReachableBasicBlock bb, int i, SsaSourceVariable v) { + this = TExplicitDef(bb, i, v) + } + + override ReachableBasicBlock getBasicBlock() { this.definesAt(result, _, _) } + + override SsaSourceVariable getSourceVariable() { this = TExplicitDef(_, _, result) } + + override string prettyPrintRef() { + exists(int l, int c | this.hasLocationInfo(_, l, c, _, _) | result = "def@" + l + ":" + c) + } + + override string prettyPrintDef() { result = "definition of " + this.getSourceVariable() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getInstruction().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +/** Provides a helper predicate for working with explicit SSA definitions. */ +module SsaExplicitDefinition { + /** + * Gets the SSA definition corresponding to definition `def`. + */ + SsaExplicitDefinition of(IR::Instruction def) { result.getInstruction() = def } +} + +/** + * An SSA definition that does not correspond to an explicit variable definition. + */ +abstract class SsaImplicitDefinition extends SsaDefinition { + /** + * INTERNAL: Do not use. + * + * Gets the definition kind to include in `prettyPrintRef`. + */ + abstract string getKind(); + + override string prettyPrintRef() { + exists(int l, int c | this.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 + this.getBasicBlock().hasLocationInfo(filepath, startline, startcolumn, _, _) + } +} + +/** + * An SSA definition representing the capturing of an SSA-convertible variable + * in the closure of a nested function. + * + * Capturing definitions appear at the beginning of such functions, as well as + * at any function call that may affect the value of the variable. + */ +class SsaVariableCapture extends SsaImplicitDefinition, TCapture { + override predicate definesAt(ReachableBasicBlock bb, int i, SsaSourceVariable v) { + this = TCapture(bb, i, v) + } + + override ReachableBasicBlock getBasicBlock() { this.definesAt(result, _, _) } + + override SsaSourceVariable getSourceVariable() { this.definesAt(_, _, result) } + + 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).hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + ) + } +} + +/** + * An SSA definition such as a phi node that has no actual semantics, but simply serves to + * merge or filter data flow. + */ +abstract class SsaPseudoDefinition extends SsaImplicitDefinition { + /** + * Gets an input of this pseudo-definition. + */ + abstract SsaVariable getAnInput(); + + /** + * Gets a textual representation of the inputs of this pseudo-definition + * in lexicographical order. + */ + string ppInputs() { result = concat(this.getAnInput().getDefinition().prettyPrintRef(), ", ") } +} + +/** + * An SSA phi node, that is, a pseudo-definition for a variable at a point + * in the flow graph where otherwise two or more definitions for the variable + * would be visible. + */ +class SsaPhiNode extends SsaPseudoDefinition, TPhi { + override SsaVariable getAnInput() { + result = getDefReachingEndOf(this.getBasicBlock().getAPredecessor(), this.getSourceVariable()) + } + + override predicate definesAt(ReachableBasicBlock bb, int i, SsaSourceVariable v) { + bb = this.getBasicBlock() and v = this.getSourceVariable() and i = -1 + } + + override ReachableBasicBlock getBasicBlock() { this = TPhi(result, _) } + + override SsaSourceVariable getSourceVariable() { this = TPhi(_, result) } + + override string getKind() { result = "phi" } + + override string prettyPrintDef() { + result = this.getSourceVariable() + " = phi(" + this.ppInputs() + ")" + } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + endline = startline and + endcolumn = startcolumn and + this.getBasicBlock().hasLocationInfo(filepath, startline, startcolumn, _, _) + } +} + +/** + * An SSA variable, possibly with a chain of field reads on it. + */ +private newtype TSsaWithFields = + TRoot(SsaVariable v) or + TStep(SsaWithFields base, Field f) { exists(accessPathAux(base, f)) } + +/** + * Gets a representation of `nd` as an ssa-with-fields value if there is one. + */ +private TSsaWithFields accessPath(IR::Instruction insn) { + exists(SsaVariable v | insn = v.getAUse() | result = TRoot(v)) + or + exists(SsaWithFields base, Field f | insn = accessPathAux(base, f) | result = TStep(base, f)) +} + +/** + * Gets a data-flow node that reads a field `f` from a node that is represented + * by ssa-with-fields value `base`. + */ +private IR::Instruction accessPathAux(TSsaWithFields base, Field f) { + exists(IR::FieldReadInstruction fr, IR::Instruction frb | + fr.getBase() = frb or + fr.getBase() = IR::implicitDerefInstruction(frb.(IR::EvalInstruction).getExpr()) + | + base = accessPath(frb) and + f = fr.getField() and + result = fr + ) +} + +/** An SSA variable with zero or more fields read from it. */ +class SsaWithFields extends TSsaWithFields { + /** + * Gets the SSA variable corresponding to the base of this SSA variable with fields. + * + * For example, the SSA variable corresponding to `a` for the SSA variable with fields + * corresponding to `a.b`. + */ + SsaVariable getBaseVariable() { + this = TRoot(result) + or + exists(SsaWithFields base, Field f | this = TStep(base, f) | result = base.getBaseVariable()) + } + + /** Gets a use that refers to this SSA variable with fields. */ + DataFlow::Node getAUse() { this = accessPath(result.asInstruction()) } + + /** Gets the type of this SSA variable with fields. */ + Type getType() { + exists(SsaVariable var | this = TRoot(var) | result = var.getType()) + or + exists(Field f | this = TStep(_, f) | result = f.getType()) + } + + /** Gets a textual representation of this element. */ + string toString() { + exists(SsaVariable var | this = TRoot(var) | result = "(" + var + ")") + or + exists(SsaWithFields base, Field f | this = TStep(base, f) | result = base + "." + f.getName()) + } + + /** + * Gets an SSA-with-fields variable that is similar to this SSA-with-fields variable in the + * sense that it has the same root variable and the same sequence of field accesses. + */ + SsaWithFields similar() { + result.getBaseVariable().getSourceVariable() = this.getBaseVariable().getSourceVariable() and + result.getQualifiedName() = this.getQualifiedName() + } + + /** + * Gets the qualified name of the source variable or variable and fields that this represents. + * + * For example, for an SSA variable that represents the field `a.b`, this would get the string + * `"a.b"`. + */ + string getQualifiedName() { + exists(SsaVariable v | this = TRoot(v) and result = v.getSourceVariable().getName()) + or + exists(SsaWithFields base, Field f | this = TStep(base, f) | + result = base.getQualifiedName() + "." + f.getName() + ) + } + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getBaseVariable().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +/** + * Gets a read similar to `node`, according to the same rules as `SsaWithFields.similar()`. + */ +DataFlow::Node getASimilarReadNode(DataFlow::Node node) { + exists(SsaWithFields readFields | node = readFields.getAUse() | + result = readFields.similar().getAUse() + ) +} diff --git a/go/ql/lib/semmle/go/dataflow/SsaImpl.qll b/go/ql/lib/semmle/go/dataflow/SsaImpl.qll new file mode 100644 index 00000000000..0db37ac03ce --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/SsaImpl.qll @@ -0,0 +1,295 @@ +/** + * INTERNAL: Analyses should use module `SSA` instead. + * + * Provides predicates for constructing an SSA representation for functions. + */ + +import go + +cached +private module Internal { + /** Holds if the `i`th node of `bb` defines `v`. */ + cached + predicate defAt(ReachableBasicBlock bb, int i, SsaSourceVariable v) { + bb.getNode(i).(IR::Instruction).writes(v, _) + } + + /** Holds if the `i`th node of `bb` reads `v`. */ + cached + predicate useAt(ReachableBasicBlock bb, int i, SsaSourceVariable v) { + bb.getNode(i).(IR::Instruction).reads(v) + } + + /** + * A data type representing SSA definitions. + * + * We distinguish three kinds of SSA definitions: + * + * 1. Variable definitions, including declarations, assignments and increments/decrements. + * 2. Pseudo-definitions for captured variables at the beginning of the capturing function + * as well as after calls. + * 3. Phi nodes. + * + * SSA definitions are only introduced where necessary. In particular, + * unreachable code has no SSA definitions associated with it, and neither + * have dead assignments (that is, assignments whose value is never read). + */ + cached + newtype TSsaDefinition = + /** + * An SSA definition that corresponds to an explicit assignment or other variable definition. + */ + TExplicitDef(ReachableBasicBlock bb, int i, SsaSourceVariable v) { + defAt(bb, i, v) and + (liveAfterDef(bb, i, v) or v.isCaptured()) + } or + /** + * An SSA definition representing the capturing of an SSA-convertible variable + * in the closure of a nested function. + * + * Capturing definitions appear at the beginning of such functions, as well as + * at any function call that may affect the value of the variable. + */ + TCapture(ReachableBasicBlock bb, int i, SsaSourceVariable v) { + mayCapture(bb, i, v) and + liveAfterDef(bb, i, v) + } or + /** + * An SSA phi node, that is, a pseudo-definition for a variable at a point + * in the flow graph where otherwise two or more definitions for the variable + * would be visible. + */ + TPhi(ReachableJoinBlock bb, SsaSourceVariable v) { + liveAtEntry(bb, v) and + inDefDominanceFrontier(bb, v) + } + + /** + * Holds if `bb` is in the dominance frontier of a block containing a definition of `v`. + */ + pragma[noinline] + private predicate inDefDominanceFrontier(ReachableJoinBlock bb, SsaSourceVariable v) { + exists(ReachableBasicBlock defbb, SsaDefinition def | + def.definesAt(defbb, _, v) and + bb.inDominanceFrontierOf(defbb) + ) + } + + /** + * Holds if `v` is a captured variable which is declared in `declFun` and read in `useFun`. + */ + private predicate readsCapturedVar(FuncDef useFun, SsaSourceVariable v, FuncDef declFun) { + declFun = v.getDeclaringFunction() and + useFun = any(IR::Instruction u | u.reads(v)).getRoot() and + v.isCaptured() + } + + /** Holds if the `i`th node of `bb` in function `f` is an entry node. */ + private predicate entryNode(FuncDef f, ReachableBasicBlock bb, int i) { + f = bb.getRoot() and + bb.getNode(i).isEntryNode() + } + + /** + * Holds if the `i`th node of `bb` in function `f` is a function call. + */ + private predicate callNode(FuncDef f, ReachableBasicBlock bb, int i) { + f = bb.getRoot() and + bb.getNode(i).(IR::EvalInstruction).getExpr() instanceof CallExpr + } + + /** + * Holds if the `i`th node of basic block `bb` may induce a pseudo-definition for + * modeling updates to captured variable `v`. Whether the definition is actually + * introduced depends on whether `v` is live at this point in the program. + */ + private predicate mayCapture(ReachableBasicBlock bb, int i, SsaSourceVariable v) { + exists(FuncDef capturingContainer, FuncDef declContainer | + // capture initial value of variable declared in enclosing scope + readsCapturedVar(capturingContainer, v, declContainer) and + capturingContainer != declContainer and + entryNode(capturingContainer, bb, i) + or + // re-capture value of variable after a call if it is assigned non-locally + readsCapturedVar(capturingContainer, v, declContainer) and + assignedThroughClosure(v) and + callNode(capturingContainer, bb, i) + ) + } + + /** A classification of variable references into reads and writes. */ + private newtype RefKind = + ReadRef() or + WriteRef() + + /** + * Holds if the `i`th node of basic block `bb` is a reference to `v`, either a read + * (when `tp` is `ReadRef()`) or a direct or indirect write (when `tp` is `WriteRef()`). + */ + private predicate ref(ReachableBasicBlock bb, int i, SsaSourceVariable v, RefKind tp) { + useAt(bb, i, v) and tp = ReadRef() + or + (mayCapture(bb, i, v) or defAt(bb, i, v)) and + tp = WriteRef() + } + + /** + * Gets the (1-based) rank of the reference to `v` at the `i`th node of basic block `bb`, + * which has the given reference kind `tp`. + */ + private int refRank(ReachableBasicBlock bb, int i, SsaSourceVariable v, RefKind tp) { + i = rank[result](int j | ref(bb, j, v, _)) and + ref(bb, i, v, tp) + } + + /** + * Gets the maximum rank among all references to `v` in basic block `bb`. + */ + private int maxRefRank(ReachableBasicBlock bb, SsaSourceVariable v) { + result = max(refRank(bb, _, v, _)) + } + + /** + * Holds if variable `v` is live after the `i`th node of basic block `bb`, where + * `i` is the index of a node that may assign or capture `v`. + * + * For the purposes of this predicate, function calls are considered as writes of captured variables. + */ + private predicate liveAfterDef(ReachableBasicBlock bb, int i, SsaSourceVariable v) { + exists(int r | r = refRank(bb, i, v, WriteRef()) | + // the next reference to `v` inside `bb` is a read + r + 1 = refRank(bb, _, v, ReadRef()) + or + // this is the last reference to `v` inside `bb`, but `v` is live at entry + // to a successor basic block of `bb` + r = maxRefRank(bb, v) and + liveAtSuccEntry(bb, v) + ) + } + + /** + * Holds if variable `v` is live at the beginning of basic block `bb`. + * + * For the purposes of this predicate, function calls are considered as writes of captured variables. + */ + private predicate liveAtEntry(ReachableBasicBlock bb, SsaSourceVariable v) { + // the first reference to `v` inside `bb` is a read + refRank(bb, _, v, ReadRef()) = 1 + or + // there is no reference to `v` inside `bb`, but `v` is live at entry + // to a successor basic block of `bb` + not exists(refRank(bb, _, v, _)) and + liveAtSuccEntry(bb, v) + } + + /** + * Holds if `v` is live at the beginning of any successor of basic block `bb`. + */ + private predicate liveAtSuccEntry(ReachableBasicBlock bb, SsaSourceVariable v) { + liveAtEntry(bb.getASuccessor(), v) + } + + /** + * Holds if `v` is assigned outside its declaring function. + */ + private predicate assignedThroughClosure(SsaSourceVariable v) { + any(IR::Instruction def | def.writes(v, _)).getRoot() != v.getDeclaringFunction() + } + + /** + * 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. + */ + private predicate ssaRef(ReachableBasicBlock bb, int i, SsaSourceVariable v, RefKind k) { + useAt(bb, i, v) and k = ReadRef() + or + any(SsaDefinition def).definesAt(bb, i, v) and k = WriteRef() + } + + /** + * Gets the (1-based) rank of the `i`th node of `bb` among all SSA definitions + * and uses of `v` in `bb`, with `k` indicating whether it is a definition or a use. + * + * For example, if `bb` is a basic block with a phi node for `v` (considered + * to be at index -1), uses `v` at node 2 and defines it at node 5, we have: + * + * ``` + * ssaRefRank(bb, -1, v, WriteRef()) = 1 // phi node + * ssaRefRank(bb, 2, v, ReadRef()) = 2 // use at node 2 + * ssaRefRank(bb, 5, v, WriteRef()) = 3 // definition at node 5 + * ``` + */ + private int ssaRefRank(ReachableBasicBlock bb, int i, SsaSourceVariable v, RefKind k) { + i = rank[result](int j | ssaRef(bb, j, v, _)) and + ssaRef(bb, i, v, k) + } + + /** + * Gets the minimum rank of a read in `bb` such that all references to `v` between that + * read and the read at index `i` are reads (and not writes). + */ + private int rewindReads(ReachableBasicBlock bb, int i, SsaSourceVariable v) { + exists(int r | r = ssaRefRank(bb, i, v, ReadRef()) | + exists(int j, RefKind k | r - 1 = ssaRefRank(bb, j, v, k) | + k = ReadRef() and result = rewindReads(bb, j, v) + or + k = WriteRef() and result = r + ) + or + r = 1 and result = r + ) + } + + /** + * Gets the SSA definition of `v` in `bb` that reaches the read of `v` at node `i`, if any. + */ + private SsaDefinition getLocalDefinition(ReachableBasicBlock bb, int i, SsaSourceVariable v) { + exists(int r | r = rewindReads(bb, i, v) | + exists(int j | result.definesAt(bb, j, v) and ssaRefRank(bb, j, v, _) = r - 1) + ) + } + + /** + * Gets an SSA definition of `v` that reaches the end of the immediate dominator of `bb`. + */ + pragma[noinline] + private SsaDefinition getDefReachingEndOfImmediateDominator( + ReachableBasicBlock bb, SsaSourceVariable v + ) { + result = getDefReachingEndOf(bb.getImmediateDominator(), v) + } + + /** + * Gets an SSA definition of `v` that reaches the end of basic block `bb`. + */ + cached + SsaDefinition getDefReachingEndOf(ReachableBasicBlock bb, SsaSourceVariable v) { + exists(int lastRef | lastRef = max(int i | ssaRef(bb, i, v, _)) | + result = getLocalDefinition(bb, lastRef, v) + or + result.definesAt(bb, lastRef, v) and + liveAtSuccEntry(bb, v) + ) + or + // In SSA form, the (unique) reaching definition of a use is the closest + // definition that dominates the use. If two definitions dominate a node + // then one must dominate the other, so we can find the reaching definition + // by following the idominance relation backwards. + result = getDefReachingEndOfImmediateDominator(bb, v) and + not exists(SsaDefinition ssa | ssa.definesAt(bb, _, v)) and + liveAtSuccEntry(bb, v) + } + + /** + * Gets the unique SSA definition of `v` whose value reaches the `i`th node of `bb`, + * which is a use of `v`. + */ + cached + SsaDefinition getDefinition(ReachableBasicBlock bb, int i, SsaSourceVariable v) { + result = getLocalDefinition(bb, i, v) + or + rewindReads(bb, i, v) = 1 and result = getDefReachingEndOf(bb.getImmediateDominator(), v) + } +} + +import Internal diff --git a/go/ql/lib/semmle/go/dataflow/TaintTracking.qll b/go/ql/lib/semmle/go/dataflow/TaintTracking.qll new file mode 100644 index 00000000000..096116d4bee --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/TaintTracking.qll @@ -0,0 +1,14 @@ +/** + * Provides classes for performing local (intra-procedural) and + * global (inter-procedural) taint-tracking analyses. + */ + +import semmle.go.dataflow.DataFlow + +/** + * Provides classes for performing local (intra-procedural) and + * global (inter-procedural) taint-tracking analyses. + */ +module TaintTracking { + import semmle.go.dataflow.internal.tainttracking1.TaintTrackingImpl +} diff --git a/go/ql/lib/semmle/go/dataflow/TaintTracking2.qll b/go/ql/lib/semmle/go/dataflow/TaintTracking2.qll new file mode 100644 index 00000000000..6b1b2487e5b --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/TaintTracking2.qll @@ -0,0 +1,12 @@ +/** + * Provides classes for performing local (intra-procedural) and + * global (inter-procedural) taint-tracking analyses. + */ + +/** + * Provides classes for performing local (intra-procedural) and + * global (inter-procedural) taint-tracking analyses. + */ +module TaintTracking2 { + import semmle.go.dataflow.internal.tainttracking2.TaintTrackingImpl +} diff --git a/go/ql/lib/semmle/go/dataflow/barrierguardutil/RedirectCheckBarrierGuard.qll b/go/ql/lib/semmle/go/dataflow/barrierguardutil/RedirectCheckBarrierGuard.qll new file mode 100644 index 00000000000..6ce0f9014fa --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/barrierguardutil/RedirectCheckBarrierGuard.qll @@ -0,0 +1,21 @@ +/** + * Provides an implementation of a commonly used barrier guard for sanitizing untrusted URLs. + */ + +import go + +/** + * A call to a function called `isLocalUrl`, `isValidRedirect`, or similar, which is + * considered a barrier guard for sanitizing untrusted URLs. + */ +class RedirectCheckBarrierGuard extends DataFlow::BarrierGuard, DataFlow::CallNode { + RedirectCheckBarrierGuard() { + this.getCalleeName().regexpMatch("(?i)(is_?)?(local_?url|valid_?redir(ect)?)(ur[li])?") + } + + override predicate checks(Expr e, boolean outcome) { + // `isLocalUrl(e)` is a barrier for `e` if it evaluates to `true` + this.getAnArgument().asExpr() = e and + outcome = true + } +} diff --git a/go/ql/lib/semmle/go/dataflow/barrierguardutil/RegexpCheck.qll b/go/ql/lib/semmle/go/dataflow/barrierguardutil/RegexpCheck.qll new file mode 100644 index 00000000000..64cff45ab62 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/barrierguardutil/RegexpCheck.qll @@ -0,0 +1,33 @@ +/** + * Provides an implementation of a commonly used barrier guard for sanitizing untrusted URLs. + */ + +import go + +/** + * A call to a regexp match function, considered as a barrier guard for sanitizing untrusted URLs. + * + * This is overapproximate: we do not attempt to reason about the correctness of the regexp. + * + * Use this if you want to define a derived `DataFlow::BarrierGuard` without + * make the type recursive. Otherwise use `RegexpCheck`. + */ +predicate regexpFunctionChecksExpr(DataFlow::Node resultNode, Expr checked, boolean branch) { + exists(RegexpMatchFunction matchfn, DataFlow::CallNode call | + matchfn.getACall() = call and + resultNode = matchfn.getResult().getNode(call).getASuccessor*() and + checked = matchfn.getValue().getNode(call).asExpr() and + (branch = false or branch = true) + ) +} + +/** + * A call to a regexp match function, considered as a barrier guard for sanitizing untrusted URLs. + * + * This is overapproximate: we do not attempt to reason about the correctness of the regexp. + */ +class RegexpCheck extends DataFlow::BarrierGuard { + RegexpCheck() { regexpFunctionChecksExpr(this, _, _) } + + override predicate checks(Expr e, boolean branch) { regexpFunctionChecksExpr(this, e, branch) } +} diff --git a/go/ql/lib/semmle/go/dataflow/barrierguardutil/UrlCheck.qll b/go/ql/lib/semmle/go/dataflow/barrierguardutil/UrlCheck.qll new file mode 100644 index 00000000000..8aefc67ee38 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/barrierguardutil/UrlCheck.qll @@ -0,0 +1,32 @@ +/** + * Provides an implementation of a commonly used barrier guard for sanitizing untrusted URLs. + */ + +import go + +/** + * An equality check comparing a data-flow node against a constant string, considered as + * a barrier guard for sanitizing untrusted URLs. + * + * Additionally, a check comparing `url.Hostname()` against a constant string is also + * considered a barrier guard for `url`. + */ +class UrlCheck extends DataFlow::BarrierGuard, DataFlow::EqualityTestNode { + DataFlow::Node url; + + UrlCheck() { + exists(this.getAnOperand().getStringValue()) and + ( + url = this.getAnOperand() + or + exists(DataFlow::MethodCallNode mc | mc = this.getAnOperand() | + mc.getTarget().getName() = "Hostname" and + url = mc.getReceiver() + ) + ) + } + + override predicate checks(Expr e, boolean outcome) { + e = url.asExpr() and outcome = this.getPolarity() + } +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/AccessPathSyntax.qll b/go/ql/lib/semmle/go/dataflow/internal/AccessPathSyntax.qll new file mode 100644 index 00000000000..ecb6f542955 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/AccessPathSyntax.qll @@ -0,0 +1,79 @@ +/** + * Module for parsing access paths from CSV models, both the identifying access path used + * by dynamic languages, and the input/output specifications for summary steps. + * + * This file is used by the shared data flow library and by the JavaScript libraries + * (which does not use the shared data flow libraries). + */ + +/** Companion module to the `AccessPath` class. */ +module AccessPath { + /** A string that should be parsed as an access path. */ + abstract class Range extends string { + bindingset[this] + Range() { any() } + } +} + +/** Gets the `n`th token on the access path as a string. */ +private string getRawToken(AccessPath path, int n) { + // Avoid splitting by '.' since tokens may contain dots, e.g. `Field[foo.Bar.x]`. + // Instead use regexpFind to match valid tokens, and supplement with a final length + // check (in `AccessPath.hasSyntaxError`) to ensure all characters were included in a token. + result = path.regexpFind("\\w+(?:\\[[^\\]]*\\])?(?=\\.|$)", n, _) +} + +/** + * A string that occurs as an access path (either identifying or input/output spec) + * which might be relevant for this database. + */ +class AccessPath extends string instanceof AccessPath::Range { + /** Holds if this string is not a syntactically valid access path. */ + predicate hasSyntaxError() { + // If the lengths match, all characters must haven been included in a token + // or seen by the `.` lookahead pattern. + this != "" and + not this.length() = sum(int n | | getRawToken(this, n).length() + 1) - 1 + } + + /** Gets the `n`th token on the access path (if there are no syntax errors). */ + AccessPathToken getToken(int n) { + result = getRawToken(this, n) and + not this.hasSyntaxError() + } + + /** Gets the number of tokens on the path (if there are no syntax errors). */ + int getNumToken() { + result = count(int n | exists(getRawToken(this, n))) and + not this.hasSyntaxError() + } +} + +/** + * An access part token such as `Argument[1]` or `ReturnValue`, appearing in one or more access paths. + */ +class AccessPathToken extends string { + AccessPathToken() { this = getRawToken(any(AccessPath path), _) } + + private string getPart(int part) { + result = this.regexpCapture("([^\\[]+)(?:\\[([^\\]]*)\\])?", part) + } + + /** Gets the name of the token, such as `Member` from `Member[x]` */ + string getName() { result = this.getPart(1) } + + /** + * Gets the argument list, such as `1,2` from `Member[1,2]`, + * or has no result if there are no arguments. + */ + string getArgumentList() { result = this.getPart(2) } + + /** Gets the `n`th argument to this token, such as `x` or `y` from `Member[x,y]`. */ + string getArgument(int n) { result = this.getArgumentList().splitAt(",", n).trim() } + + /** Gets an argument to this token, such as `x` or `y` from `Member[x,y]`. */ + string getAnArgument() { result = this.getArgument(_) } + + /** Gets the number of arguments to this token, such as 2 for `Member[x,y]` or zero for `ReturnValue`. */ + int getNumArgument() { result = count(int n | exists(this.getArgument(n))) } +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/ContainerFlow.qll b/go/ql/lib/semmle/go/dataflow/internal/ContainerFlow.qll new file mode 100644 index 00000000000..b6c1005daac --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/ContainerFlow.qll @@ -0,0 +1,71 @@ +/** Contains predicates for dealing with container flow. */ + +import go +private import DataFlowNodes +private import DataFlowPrivate +private import DataFlowUtil +private import semmle.go.dataflow.ExternalFlow + +/** + * Holds if the step from `node1` to `node2` stores a value in an array, a + * slice, a collection or a map. Thus, `node2` references an object with a + * content `c` that contains the value of `node1`. This covers array + * assignments and initializers as well as implicit array creations for + * varargs. + */ +predicate containerStoreStep(Node node1, Node node2, Content c) { + c instanceof ArrayContent and + ( + ( + node2.getType() instanceof ArrayType or + node2.getType() instanceof SliceType + ) and + exists(Write w | w.writesElement(node2, _, node1)) + ) + or + c instanceof CollectionContent and + exists(SendStmt send | + send.getChannel() = node2.(ExprNode).asExpr() and send.getValue() = node1.(ExprNode).asExpr() + ) + or + c instanceof MapKeyContent and + node2.getType() instanceof MapType and + exists(Write w | w.writesElement(node2, node1, _)) + or + c instanceof MapValueContent and + node2.getType() instanceof MapType and + exists(Write w | w.writesElement(node2, _, node1)) +} + +/** + * Holds if the step from `node1` to `node2` reads a value from an array, a + * slice, a collection or a map. Thus, `node1` references an object with a + * content `c` whose value ends up in `node2`. This covers ordinary array reads + * as well as array iteration through enhanced `for` statements. + */ +predicate containerReadStep(Node node1, Node node2, Content c) { + c instanceof ArrayContent and + ( + node2.(Read).readsElement(node1, _) and + ( + node1.getType() instanceof ArrayType or + node1.getType() instanceof SliceType + ) + or + node2.(RangeElementNode).getBase() = node1 + ) + or + c instanceof CollectionContent and + exists(UnaryOperationNode recv | recv = node2 | + node1 = recv.getOperand() and + recv.getOperator() = "<-" + ) + or + c instanceof MapKeyContent and + node1.getType() instanceof MapType and + node2.(RangeIndexNode).getBase() = node1 + or + c instanceof MapValueContent and + node1.getType() instanceof MapType and + node2.(Read).readsElement(node1, _) +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll new file mode 100644 index 00000000000..019d2831e5d --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll @@ -0,0 +1,110 @@ +private import go +private import DataFlowPrivate + +/** + * Holds if `call` is an interface call to method `m`, meaning that its receiver `recv` has + * interface type `tp`. + */ +private predicate isInterfaceCallReceiver( + DataFlow::CallNode call, DataFlow::Node recv, InterfaceType tp, string m +) { + call.getReceiver() = recv and + recv.getType().getUnderlyingType() = tp and + m = call.getACalleeIncludingExternals().asFunction().getName() +} + +/** Gets a data-flow node that may flow into the receiver value of `call`, which is an interface value. */ +private DataFlow::Node getInterfaceCallReceiverSource(DataFlow::CallNode call) { + exists(DataFlow::Node succ | basicLocalFlowStep*(result, succ) | + isInterfaceCallReceiver(call, succ, _, _) + ) +} + +/** Gets the type of `nd`, which must be a valid type and not an interface type. */ +private Type getConcreteType(DataFlow::Node nd) { + result = nd.getType() and + not result.getUnderlyingType() instanceof InterfaceType and + not result instanceof InvalidType +} + +/** + * Holds if all concrete (that is, non-interface) types of `nd` concrete types can be determined by + * local reasoning. + * + * `nd` is restricted to nodes that flow into the receiver value of an interface call, since that is + * all we are ultimately interested in. + */ +private predicate isConcreteValue(DataFlow::Node nd) { + nd = getInterfaceCallReceiverSource(_) and + ( + exists(getConcreteType(nd)) + or + forex(DataFlow::Node pred | basicLocalFlowStep(pred, nd) | isConcreteValue(pred)) + ) +} + +/** + * Holds if `call` is an interface call to method `m` with receiver `recv`, where the concrete + * types of `recv` can be established by local reasoning. + */ +private predicate isConcreteInterfaceCall(DataFlow::Node call, DataFlow::Node recv, string m) { + isInterfaceCallReceiver(call, recv, _, m) and isConcreteValue(recv) +} + +/** + * Gets a function that might be called by `call`, where the receiver of `call` has interface type, + * but its concrete types can be determined by local reasoning. + */ +private DataFlowCallable getConcreteTarget(DataFlow::CallNode call) { + exists(DataFlow::Node recv, string m | isConcreteInterfaceCall(call, recv, m) | + exists(Type concreteReceiverType | + concreteReceiverType = getConcreteType(getInterfaceCallReceiverSource(call)) and + result.asFunction() = concreteReceiverType.getMethod(m) + ) + ) +} + +/** + * Holds if `call` is a method call whose receiver has an interface type. + */ +private predicate isInterfaceMethodCall(DataFlow::CallNode call) { + isInterfaceCallReceiver(call, _, _, _) +} + +/** + * Gets a method that might be called by `call`, where we restrict the result to + * implement the interface type of the receiver of `call`. + */ +private DataFlowCallable getRestrictedInterfaceTarget(DataFlow::CallNode call) { + exists(InterfaceType tp, Type recvtp, string m | + isInterfaceCallReceiver(call, _, tp, m) and + result.asFunction() = recvtp.getMethod(m) and + recvtp.implements(tp) + ) +} + +/** + * Gets a function that might be called by `call`. + */ +DataFlowCallable viableCallable(CallExpr ma) { + exists(DataFlow::CallNode call | call.asExpr() = ma | + if isConcreteInterfaceCall(call, _, _) + then result = getConcreteTarget(call) + else + if isInterfaceMethodCall(call) + then result = getRestrictedInterfaceTarget(call) + else result.asCallable() = call.getACalleeIncludingExternals() + ) +} + +/** + * 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, DataFlowCallable f) { none() } + +/** + * 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) { none() } diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll new file mode 100644 index 00000000000..f535bef3231 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll @@ -0,0 +1,4697 @@ +/** + * Provides an implementation of global (interprocedural) data flow. This file + * re-exports the local (intraprocedural) data flow analysis from + * `DataFlowImplSpecific::Public` and adds a global analysis, mainly exposed + * through the `Configuration` class. This file exists in several identical + * copies, allowing queries to use multiple `Configuration` classes that depend + * on each other without introducing mutual recursion among those configurations. + */ + +private import DataFlowImplCommon +private import DataFlowImplSpecific::Private +import DataFlowImplSpecific::Public +import DataFlowImplCommonPublic + +/** + * A configuration of interprocedural data flow analysis. This defines + * sources, sinks, and any other configurable aspect of the analysis. Each + * use of the global data flow library must define its own unique extension + * of this abstract class. To create a configuration, extend this class with + * a subclass whose characteristic predicate is a unique singleton string. + * For example, write + * + * ```ql + * class MyAnalysisConfiguration extends DataFlow::Configuration { + * MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" } + * // Override `isSource` and `isSink`. + * // Optionally override `isBarrier`. + * // Optionally override `isAdditionalFlowStep`. + * } + * ``` + * Conceptually, this defines a graph where the nodes are `DataFlow::Node`s and + * the edges are those data-flow steps that preserve the value of the node + * along with any additional edges defined by `isAdditionalFlowStep`. + * Specifying nodes in `isBarrier` will remove those nodes from the graph, and + * specifying nodes in `isBarrierIn` and/or `isBarrierOut` will remove in-going + * and/or out-going edges from those nodes, respectively. + * + * Then, to query whether there is flow between some `source` and `sink`, + * write + * + * ```ql + * exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink)) + * ``` + * + * Multiple configurations can coexist, but two classes extending + * `DataFlow::Configuration` should never depend on each other. One of them + * should instead depend on a `DataFlow2::Configuration`, a + * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. + */ +abstract class Configuration extends string { + bindingset[this] + Configuration() { any() } + + /** + * Holds if `source` is a relevant data flow source. + */ + abstract predicate isSource(Node source); + + /** + * Holds if `sink` is a relevant data flow sink. + */ + abstract predicate isSink(Node sink); + + /** + * Holds if data flow through `node` is prohibited. This completely removes + * `node` from the data flow graph. + */ + predicate isBarrier(Node node) { none() } + + /** Holds if data flow into `node` is prohibited. */ + predicate isBarrierIn(Node node) { none() } + + /** Holds if data flow out of `node` is prohibited. */ + predicate isBarrierOut(Node node) { none() } + + /** Holds if data flow through nodes guarded by `guard` is prohibited. */ + predicate isBarrierGuard(BarrierGuard guard) { none() } + + /** + * Holds if the additional flow step from `node1` to `node2` must be taken + * into account in the analysis. + */ + predicate isAdditionalFlowStep(Node node1, Node node2) { none() } + + /** + * Holds if an arbitrary number of implicit read steps of content `c` may be + * taken at `node`. + */ + predicate allowImplicitRead(Node node, Content c) { none() } + + /** + * Gets the virtual dispatch branching limit when calculating field flow. + * This can be overridden to a smaller value to improve performance (a + * value of 0 disables field flow), or a larger value to get more results. + */ + int fieldFlowBranchLimit() { result = 2 } + + /** + * Gets a data flow configuration feature to add restrictions to the set of + * valid flow paths. + * + * - `FeatureHasSourceCallContext`: + * Assume that sources have some existing call context to disallow + * conflicting return-flow directly following the source. + * - `FeatureHasSinkCallContext`: + * Assume that sinks have some existing call context to disallow + * conflicting argument-to-parameter flow directly preceding the sink. + * - `FeatureEqualSourceSinkCallContext`: + * Implies both of the above and additionally ensures that the entire flow + * path preserves the call context. + */ + FlowFeature getAFeature() { none() } + + /** + * Holds if data may flow from `source` to `sink` for this configuration. + */ + predicate hasFlow(Node source, Node sink) { flowsTo(source, sink, this) } + + /** + * Holds if data may flow from `source` to `sink` for this configuration. + * + * The corresponding paths are generated from the end-points and the graph + * included in the module `PathGraph`. + */ + predicate hasFlowPath(PathNode source, PathNode sink) { flowsTo(source, sink, _, _, this) } + + /** + * Holds if data may flow from some source to `sink` for this configuration. + */ + predicate hasFlowTo(Node sink) { this.hasFlow(_, sink) } + + /** + * Holds if data may flow from some source to `sink` for this configuration. + */ + predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } + + /** + * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` + * measured in approximate number of interprocedural steps. + */ + int explorationLimit() { none() } + + /** + * Holds if there is a partial data flow path from `source` to `node`. The + * approximate distance between `node` and the closest source is `dist` and + * is restricted to be less than or equal to `explorationLimit()`. This + * predicate completely disregards sink definitions. + * + * This predicate is intended for data-flow exploration and debugging and may + * perform poorly if the number of sources is too big and/or the exploration + * limit is set too high without using barriers. + * + * This predicate is disabled (has no results) by default. Override + * `explorationLimit()` with a suitable number to enable this predicate. + * + * To use this in a `path-problem` query, import the module `PartialPathGraph`. + */ + final predicate hasPartialFlow(PartialPathNode source, PartialPathNode node, int dist) { + partialFlow(source, node, this) and + dist = node.getSourceDistance() + } + + /** + * Holds if there is a partial data flow path from `node` to `sink`. The + * approximate distance between `node` and the closest sink is `dist` and + * is restricted to be less than or equal to `explorationLimit()`. This + * predicate completely disregards source definitions. + * + * This predicate is intended for data-flow exploration and debugging and may + * perform poorly if the number of sinks is too big and/or the exploration + * limit is set too high without using barriers. + * + * This predicate is disabled (has no results) by default. Override + * `explorationLimit()` with a suitable number to enable this predicate. + * + * To use this in a `path-problem` query, import the module `PartialPathGraph`. + * + * Note that reverse flow has slightly lower precision than the corresponding + * forward flow, as reverse flow disregards type pruning among other features. + */ + final predicate hasPartialFlowRev(PartialPathNode node, PartialPathNode sink, int dist) { + revPartialFlow(node, sink, this) and + dist = node.getSinkDistance() + } +} + +/** + * This class exists to prevent mutual recursion between the user-overridden + * member predicates of `Configuration` and the rest of the data-flow library. + * Good performance cannot be guaranteed in the presence of such recursion, so + * it should be replaced by using more than one copy of the data flow library. + */ +abstract private class ConfigurationRecursionPrevention extends Configuration { + bindingset[this] + ConfigurationRecursionPrevention() { any() } + + override predicate hasFlow(Node source, Node sink) { + strictcount(Node n | this.isSource(n)) < 0 + or + strictcount(Node n | this.isSink(n)) < 0 + or + strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0 + or + super.hasFlow(source, sink) + } +} + +private newtype TNodeEx = + TNodeNormal(Node n) or + TNodeImplicitRead(Node n, boolean hasRead) { + any(Configuration c).allowImplicitRead(n, _) and hasRead = [false, true] + } + +private class NodeEx extends TNodeEx { + string toString() { + result = this.asNode().toString() + or + exists(Node n | this.isImplicitReadNode(n, _) | result = n.toString() + " [Ext]") + } + + Node asNode() { this = TNodeNormal(result) } + + predicate isImplicitReadNode(Node n, boolean hasRead) { this = TNodeImplicitRead(n, hasRead) } + + Node projectToNode() { this = TNodeNormal(result) or this = TNodeImplicitRead(result, _) } + + pragma[nomagic] + private DataFlowCallable getEnclosingCallable0() { + nodeEnclosingCallable(this.projectToNode(), result) + } + + pragma[inline] + DataFlowCallable getEnclosingCallable() { + pragma[only_bind_out](this).getEnclosingCallable0() = pragma[only_bind_into](result) + } + + pragma[nomagic] + private DataFlowType getDataFlowType0() { nodeDataFlowType(this.asNode(), result) } + + pragma[inline] + DataFlowType getDataFlowType() { + pragma[only_bind_out](this).getDataFlowType0() = pragma[only_bind_into](result) + } + + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.projectToNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +private class ArgNodeEx extends NodeEx { + ArgNodeEx() { this.asNode() instanceof ArgNode } +} + +private class ParamNodeEx extends NodeEx { + ParamNodeEx() { this.asNode() instanceof ParamNode } + + predicate isParameterOf(DataFlowCallable c, int i) { + this.asNode().(ParamNode).isParameterOf(c, i) + } + + int getPosition() { this.isParameterOf(_, result) } + + predicate allowParameterReturnInSelf() { allowParameterReturnInSelfCached(this.asNode()) } +} + +private class RetNodeEx extends NodeEx { + RetNodeEx() { this.asNode() instanceof ReturnNodeExt } + + ReturnPosition getReturnPosition() { result = getReturnPosition(this.asNode()) } + + ReturnKindExt getKind() { result = this.asNode().(ReturnNodeExt).getKind() } +} + +private predicate inBarrier(NodeEx node, Configuration config) { + exists(Node n | + node.asNode() = n and + config.isBarrierIn(n) and + config.isSource(n) + ) +} + +private predicate outBarrier(NodeEx node, Configuration config) { + exists(Node n | + node.asNode() = n and + config.isBarrierOut(n) and + config.isSink(n) + ) +} + +pragma[nomagic] +private predicate fullBarrier(NodeEx node, Configuration config) { + exists(Node n | node.asNode() = n | + config.isBarrier(n) + or + config.isBarrierIn(n) and + not config.isSource(n) + or + config.isBarrierOut(n) and + not config.isSink(n) + or + exists(BarrierGuard g | + config.isBarrierGuard(g) and + n = g.getAGuardedNode() + ) + ) +} + +pragma[nomagic] +private predicate sourceNode(NodeEx node, Configuration config) { + config.isSource(node.asNode()) and + not fullBarrier(node, config) +} + +pragma[nomagic] +private predicate sinkNode(NodeEx node, Configuration config) { config.isSink(node.asNode()) } + +/** Provides the relevant barriers for a step from `node1` to `node2`. */ +pragma[inline] +private predicate stepFilter(NodeEx node1, NodeEx node2, Configuration config) { + not outBarrier(node1, config) and + not inBarrier(node2, config) and + not fullBarrier(node1, config) and + not fullBarrier(node2, config) +} + +/** + * Holds if data can flow in one local step from `node1` to `node2`. + */ +private predicate localFlowStep(NodeEx node1, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + simpleLocalFlowStepExt(pragma[only_bind_into](n1), pragma[only_bind_into](n2)) and + stepFilter(node1, node2, config) + ) + or + exists(Node n | + config.allowImplicitRead(n, _) and + node1.asNode() = n and + node2.isImplicitReadNode(n, false) and + not fullBarrier(node1, config) + ) +} + +/** + * Holds if the additional step from `node1` to `node2` does not jump between callables. + */ +private predicate additionalLocalFlowStep(NodeEx node1, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + pragma[only_bind_into](config) + .isAdditionalFlowStep(pragma[only_bind_into](n1), pragma[only_bind_into](n2)) and + getNodeEnclosingCallable(n1) = getNodeEnclosingCallable(n2) and + stepFilter(node1, node2, config) + ) + or + exists(Node n | + config.allowImplicitRead(n, _) and + node1.isImplicitReadNode(n, true) and + node2.asNode() = n and + not fullBarrier(node2, config) + ) +} + +/** + * Holds if data can flow from `node1` to `node2` in a way that discards call contexts. + */ +private predicate jumpStep(NodeEx node1, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + jumpStepCached(pragma[only_bind_into](n1), pragma[only_bind_into](n2)) and + stepFilter(node1, node2, config) and + not config.getAFeature() instanceof FeatureEqualSourceSinkCallContext + ) +} + +/** + * Holds if the additional step from `node1` to `node2` jumps between callables. + */ +private predicate additionalJumpStep(NodeEx node1, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + pragma[only_bind_into](config) + .isAdditionalFlowStep(pragma[only_bind_into](n1), pragma[only_bind_into](n2)) and + getNodeEnclosingCallable(n1) != getNodeEnclosingCallable(n2) and + stepFilter(node1, node2, config) and + not config.getAFeature() instanceof FeatureEqualSourceSinkCallContext + ) +} + +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + read(pragma[only_bind_into](n1), c, pragma[only_bind_into](n2)) and + stepFilter(node1, node2, config) + ) + or + exists(Node n | + node2.isImplicitReadNode(n, true) and + node1.isImplicitReadNode(n, _) and + config.allowImplicitRead(n, c) + ) +} + +private predicate store( + NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config +) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + store(pragma[only_bind_into](n1), tc, pragma[only_bind_into](n2), contentType) and + read(_, tc.getContent(), _, config) and + stepFilter(node1, node2, config) + ) +} + +pragma[nomagic] +private predicate viableReturnPosOutEx(DataFlowCall call, ReturnPosition pos, NodeEx out) { + viableReturnPosOut(call, pos, out.asNode()) +} + +pragma[nomagic] +private predicate viableParamArgEx(DataFlowCall call, ParamNodeEx p, ArgNodeEx arg) { + viableParamArg(call, p.asNode(), arg.asNode()) +} + +/** + * Holds if field flow should be used for the given configuration. + */ +private predicate useFieldFlow(Configuration config) { config.fieldFlowBranchLimit() >= 1 } + +private predicate hasSourceCallCtx(Configuration config) { + exists(FlowFeature feature | feature = config.getAFeature() | + feature instanceof FeatureHasSourceCallContext or + feature instanceof FeatureEqualSourceSinkCallContext + ) +} + +private predicate hasSinkCallCtx(Configuration config) { + exists(FlowFeature feature | feature = config.getAFeature() | + feature instanceof FeatureHasSinkCallContext or + feature instanceof FeatureEqualSourceSinkCallContext + ) +} + +private module Stage1 { + class ApApprox = Unit; + + class Ap = Unit; + + class ApOption = Unit; + + class Cc = boolean; + + /* Begin: Stage 1 logic. */ + /** + * Holds if `node` is reachable from a source in the configuration `config`. + * + * The Boolean `cc` records whether the node is reached through an + * argument in a call. + */ + predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { + sourceNode(node, config) and + if hasSourceCallCtx(config) then cc = true else cc = false + or + exists(NodeEx mid | + fwdFlow(mid, cc, config) and + localFlowStep(mid, node, config) + ) + or + exists(NodeEx mid | + fwdFlow(mid, cc, config) and + additionalLocalFlowStep(mid, node, config) + ) + or + exists(NodeEx mid | + fwdFlow(mid, _, config) and + jumpStep(mid, node, config) and + cc = false + ) + or + exists(NodeEx mid | + fwdFlow(mid, _, config) and + additionalJumpStep(mid, node, config) and + cc = false + ) + or + // store + exists(NodeEx mid | + useFieldFlow(config) and + fwdFlow(mid, cc, config) and + store(mid, _, node, _, config) + ) + or + // read + exists(Content c | + fwdFlowRead(c, node, cc, config) and + fwdFlowConsCand(c, config) + ) + or + // flow into a callable + exists(NodeEx arg | + fwdFlow(arg, _, config) and + viableParamArgEx(_, node, arg) and + cc = true and + not fullBarrier(node, config) + ) + or + // flow out of a callable + exists(DataFlowCall call | + fwdFlowOut(call, node, false, config) and + cc = false + or + fwdFlowOutFromArg(call, node, config) and + fwdFlowIsEntered(call, cc, config) + ) + } + + private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } + + pragma[nomagic] + private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + exists(NodeEx mid | + fwdFlow(mid, cc, config) and + read(mid, c, node, config) + ) + } + + /** + * Holds if `c` is the target of a store in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCand(Content c, Configuration config) { + exists(NodeEx mid, NodeEx node, TypedContent tc | + not fullBarrier(node, config) and + useFieldFlow(config) and + fwdFlow(mid, _, config) and + store(mid, tc, node, _, config) and + c = tc.getContent() + ) + } + + pragma[nomagic] + private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { + exists(RetNodeEx ret | + fwdFlow(ret, cc, config) and + ret.getReturnPosition() = pos + ) + } + + pragma[nomagic] + private predicate fwdFlowOut(DataFlowCall call, NodeEx out, Cc cc, Configuration config) { + exists(ReturnPosition pos | + fwdFlowReturnPosition(pos, cc, config) and + viableReturnPosOutEx(call, pos, out) and + not fullBarrier(out, config) + ) + } + + pragma[nomagic] + private predicate fwdFlowOutFromArg(DataFlowCall call, NodeEx out, Configuration config) { + fwdFlowOut(call, out, true, config) + } + + /** + * Holds if an argument to `call` is reached in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowIsEntered(DataFlowCall call, Cc cc, Configuration config) { + exists(ArgNodeEx arg | + fwdFlow(arg, cc, config) and + viableParamArgEx(call, _, arg) + ) + } + + /** + * Holds if `node` is part of a path from a source to a sink in the + * configuration `config`. + * + * The Boolean `toReturn` records whether the node must be returned from + * the enclosing callable in order to reach a sink. + */ + pragma[nomagic] + predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { + revFlow0(node, toReturn, config) and + fwdFlow(node, config) + } + + pragma[nomagic] + private predicate revFlow0(NodeEx node, boolean toReturn, Configuration config) { + fwdFlow(node, config) and + sinkNode(node, config) and + if hasSinkCallCtx(config) then toReturn = true else toReturn = false + or + exists(NodeEx mid | + localFlowStep(node, mid, config) and + revFlow(mid, toReturn, config) + ) + or + exists(NodeEx mid | + additionalLocalFlowStep(node, mid, config) and + revFlow(mid, toReturn, config) + ) + or + exists(NodeEx mid | + jumpStep(node, mid, config) and + revFlow(mid, _, config) and + toReturn = false + ) + or + exists(NodeEx mid | + additionalJumpStep(node, mid, config) and + revFlow(mid, _, config) and + toReturn = false + ) + or + // store + exists(Content c | + revFlowStore(c, node, toReturn, config) and + revFlowConsCand(c, config) + ) + or + // read + exists(NodeEx mid, Content c | + read(node, c, mid, config) and + fwdFlowConsCand(c, pragma[only_bind_into](config)) and + revFlow(mid, toReturn, pragma[only_bind_into](config)) + ) + or + // flow into a callable + exists(DataFlowCall call | + revFlowIn(call, node, false, config) and + toReturn = false + or + revFlowInToReturn(call, node, config) and + revFlowIsReturned(call, toReturn, config) + ) + or + // flow out of a callable + exists(ReturnPosition pos | + revFlowOut(pos, config) and + node.(RetNodeEx).getReturnPosition() = pos and + toReturn = true + ) + } + + /** + * Holds if `c` is the target of a read in the flow covered by `revFlow`. + */ + pragma[nomagic] + private predicate revFlowConsCand(Content c, Configuration config) { + exists(NodeEx mid, NodeEx node | + fwdFlow(node, pragma[only_bind_into](config)) and + read(node, c, mid, config) and + fwdFlowConsCand(c, pragma[only_bind_into](config)) and + revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate revFlowStore(Content c, NodeEx node, boolean toReturn, Configuration config) { + exists(NodeEx mid, TypedContent tc | + revFlow(mid, toReturn, pragma[only_bind_into](config)) and + fwdFlowConsCand(c, pragma[only_bind_into](config)) and + store(node, tc, mid, _, config) and + c = tc.getContent() + ) + } + + /** + * Holds if `c` is the target of both a read and a store in the flow covered + * by `revFlow`. + */ + private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + revFlowConsCand(c, conf) and + revFlowStore(c, _, _, conf) + } + + pragma[nomagic] + predicate viableReturnPosOutNodeCandFwd1( + DataFlowCall call, ReturnPosition pos, NodeEx out, Configuration config + ) { + fwdFlowReturnPosition(pos, _, config) and + viableReturnPosOutEx(call, pos, out) + } + + pragma[nomagic] + private predicate revFlowOut(ReturnPosition pos, Configuration config) { + exists(DataFlowCall call, NodeEx out | + revFlow(out, _, config) and + viableReturnPosOutNodeCandFwd1(call, pos, out, config) + ) + } + + pragma[nomagic] + predicate viableParamArgNodeCandFwd1( + DataFlowCall call, ParamNodeEx p, ArgNodeEx arg, Configuration config + ) { + viableParamArgEx(call, p, arg) and + fwdFlow(arg, config) + } + + pragma[nomagic] + private predicate revFlowIn( + DataFlowCall call, ArgNodeEx arg, boolean toReturn, Configuration config + ) { + exists(ParamNodeEx p | + revFlow(p, toReturn, config) and + viableParamArgNodeCandFwd1(call, p, arg, config) + ) + } + + pragma[nomagic] + private predicate revFlowInToReturn(DataFlowCall call, ArgNodeEx arg, Configuration config) { + revFlowIn(call, arg, true, config) + } + + /** + * Holds if an output from `call` is reached in the flow covered by `revFlow` + * and data might flow through the target callable resulting in reverse flow + * reaching an argument of `call`. + */ + pragma[nomagic] + private predicate revFlowIsReturned(DataFlowCall call, boolean toReturn, Configuration config) { + exists(NodeEx out | + revFlow(out, toReturn, config) and + fwdFlowOutFromArg(call, out, config) + ) + } + + pragma[nomagic] + predicate storeStepCand( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, DataFlowType contentType, + Configuration config + ) { + exists(Content c | + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + revFlow(node2, pragma[only_bind_into](config)) and + store(node1, tc, node2, contentType, config) and + c = tc.getContent() and + exists(ap1) + ) + } + + pragma[nomagic] + predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) and + read(n1, c, n2, pragma[only_bind_into](config)) + } + + pragma[nomagic] + predicate revFlow(NodeEx node, Configuration config) { revFlow(node, _, config) } + + predicate revFlow(NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config) { + revFlow(node, toReturn, config) and exists(returnAp) and exists(ap) + } + + private predicate throughFlowNodeCand(NodeEx node, Configuration config) { + revFlow(node, true, config) and + fwdFlow(node, true, config) and + not inBarrier(node, config) and + not outBarrier(node, config) + } + + /** Holds if flow may return from `callable`. */ + pragma[nomagic] + private predicate returnFlowCallableNodeCand( + DataFlowCallable callable, ReturnKindExt kind, Configuration config + ) { + exists(RetNodeEx ret | + throughFlowNodeCand(ret, config) and + callable = ret.getEnclosingCallable() and + kind = ret.getKind() + ) + } + + /** + * Holds if flow may enter through `p` and reach a return node making `p` a + * candidate for the origin of a summary. + */ + pragma[nomagic] + predicate parameterMayFlowThrough(ParamNodeEx p, DataFlowCallable c, Ap ap, Configuration config) { + exists(ReturnKindExt kind | + throughFlowNodeCand(p, config) and + returnFlowCallableNodeCand(c, kind, config) and + p.getEnclosingCallable() = c and + exists(ap) and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = p.getPosition() + or + p.allowParameterReturnInSelf() + ) + ) + } + + pragma[nomagic] + predicate callMayFlowThroughRev(DataFlowCall call, Configuration config) { + exists(ArgNodeEx arg, boolean toReturn | + revFlow(arg, toReturn, config) and + revFlowInToReturn(call, arg, config) and + revFlowIsReturned(call, toReturn, config) + ) + } + + predicate stats(boolean fwd, int nodes, int fields, int conscand, int tuples, Configuration config) { + fwd = true and + nodes = count(NodeEx node | fwdFlow(node, config)) and + fields = count(Content f0 | fwdFlowConsCand(f0, config)) and + conscand = -1 and + tuples = count(NodeEx n, boolean b | fwdFlow(n, b, config)) + or + fwd = false and + nodes = count(NodeEx node | revFlow(node, _, config)) and + fields = count(Content f0 | revFlowConsCand(f0, config)) and + conscand = -1 and + tuples = count(NodeEx n, boolean b | revFlow(n, b, config)) + } + /* End: Stage 1 logic. */ +} + +pragma[noinline] +private predicate localFlowStepNodeCand1(NodeEx node1, NodeEx node2, Configuration config) { + Stage1::revFlow(node2, config) and + localFlowStep(node1, node2, config) +} + +pragma[noinline] +private predicate additionalLocalFlowStepNodeCand1(NodeEx node1, NodeEx node2, Configuration config) { + Stage1::revFlow(node2, config) and + additionalLocalFlowStep(node1, node2, config) +} + +pragma[nomagic] +private predicate viableReturnPosOutNodeCand1( + DataFlowCall call, ReturnPosition pos, NodeEx out, Configuration config +) { + Stage1::revFlow(out, config) and + Stage1::viableReturnPosOutNodeCandFwd1(call, pos, out, config) +} + +/** + * Holds if data can flow out of `call` from `ret` to `out`, either + * through a `ReturnNode` or through an argument that has been mutated, and + * that this step is part of a path from a source to a sink. + */ +pragma[nomagic] +private predicate flowOutOfCallNodeCand1( + DataFlowCall call, RetNodeEx ret, NodeEx out, Configuration config +) { + viableReturnPosOutNodeCand1(call, ret.getReturnPosition(), out, config) and + Stage1::revFlow(ret, config) and + not outBarrier(ret, config) and + not inBarrier(out, config) +} + +pragma[nomagic] +private predicate viableParamArgNodeCand1( + DataFlowCall call, ParamNodeEx p, ArgNodeEx arg, Configuration config +) { + Stage1::viableParamArgNodeCandFwd1(call, p, arg, config) and + Stage1::revFlow(arg, config) +} + +/** + * Holds if data can flow into `call` and that this step is part of a + * path from a source to a sink. + */ +pragma[nomagic] +private predicate flowIntoCallNodeCand1( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, Configuration config +) { + viableParamArgNodeCand1(call, p, arg, config) and + Stage1::revFlow(p, config) and + not outBarrier(arg, config) and + not inBarrier(p, config) +} + +/** + * Gets the amount of forward branching on the origin of a cross-call path + * edge in the graph of paths between sources and sinks that ignores call + * contexts. + */ +private int branch(NodeEx n1, Configuration conf) { + result = + strictcount(NodeEx n | + flowOutOfCallNodeCand1(_, n1, n, conf) or flowIntoCallNodeCand1(_, n1, n, conf) + ) +} + +/** + * Gets the amount of backward branching on the target of a cross-call path + * edge in the graph of paths between sources and sinks that ignores call + * contexts. + */ +private int join(NodeEx n2, Configuration conf) { + result = + strictcount(NodeEx n | + flowOutOfCallNodeCand1(_, n, n2, conf) or flowIntoCallNodeCand1(_, n, n2, conf) + ) +} + +/** + * Holds if data can flow out of `call` from `ret` to `out`, either + * through a `ReturnNode` or through an argument that has been mutated, and + * that this step is part of a path from a source to a sink. The + * `allowsFieldFlow` flag indicates whether the branching is within the limit + * specified by the configuration. + */ +pragma[nomagic] +private predicate flowOutOfCallNodeCand1( + DataFlowCall call, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, Configuration config +) { + flowOutOfCallNodeCand1(call, ret, out, config) and + exists(int b, int j | + b = branch(ret, config) and + j = join(out, config) and + if b.minimum(j) <= config.fieldFlowBranchLimit() + then allowsFieldFlow = true + else allowsFieldFlow = false + ) +} + +/** + * Holds if data can flow into `call` and that this step is part of a + * path from a source to a sink. The `allowsFieldFlow` flag indicates whether + * the branching is within the limit specified by the configuration. + */ +pragma[nomagic] +private predicate flowIntoCallNodeCand1( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, Configuration config +) { + flowIntoCallNodeCand1(call, arg, p, config) and + exists(int b, int j | + b = branch(arg, config) and + j = join(p, config) and + if b.minimum(j) <= config.fieldFlowBranchLimit() + then allowsFieldFlow = true + else allowsFieldFlow = false + ) +} + +private module Stage2 { + module PrevStage = Stage1; + + class ApApprox = PrevStage::Ap; + + class Ap = boolean; + + class ApNil extends Ap { + ApNil() { this = false } + } + + bindingset[result, ap] + private ApApprox getApprox(Ap ap) { any() } + + private ApNil getApNil(NodeEx node) { PrevStage::revFlow(node, _) and exists(result) } + + bindingset[tc, tail] + private Ap apCons(TypedContent tc, Ap tail) { result = true and exists(tc) and exists(tail) } + + pragma[inline] + private Content getHeadContent(Ap ap) { exists(result) and ap = true } + + class ApOption = BooleanOption; + + ApOption apNone() { result = TBooleanNone() } + + ApOption apSome(Ap ap) { result = TBooleanSome(ap) } + + class Cc = CallContext; + + class CcCall = CallContextCall; + + class CcNoCall = CallContextNoCall; + + Cc ccNone() { result instanceof CallContextAny } + + CcCall ccSomeCall() { result instanceof CallContextSomeCall } + + private class LocalCc = Unit; + + bindingset[call, c, outercc] + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } + + bindingset[call, c, innercc] + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } + + bindingset[node, cc, config] + private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } + + private predicate localStep( + NodeEx node1, NodeEx node2, boolean preservesValue, ApNil ap, Configuration config, LocalCc lcc + ) { + ( + preservesValue = true and + localFlowStepNodeCand1(node1, node2, config) + or + preservesValue = false and + additionalLocalFlowStepNodeCand1(node1, node2, config) + ) and + exists(ap) and + exists(lcc) + } + + private predicate flowOutOfCall = flowOutOfCallNodeCand1/5; + + private predicate flowIntoCall = flowIntoCallNodeCand1/5; + + bindingset[node, ap] + private predicate filter(NodeEx node, Ap ap) { any() } + + bindingset[ap, contentType] + private predicate typecheckStore(Ap ap, DataFlowType contentType) { any() } + + /* Begin: Stage 2 logic. */ + private predicate flowCand(NodeEx node, ApApprox apa, Configuration config) { + PrevStage::revFlow(node, _, _, apa, config) + } + + bindingset[result, apa] + private ApApprox unbindApa(ApApprox apa) { + exists(ApApprox apa0 | + apa = pragma[only_bind_into](apa0) and result = pragma[only_bind_into](apa0) + ) + } + + pragma[nomagic] + private predicate flowThroughOutOfCall( + DataFlowCall call, CcCall ccc, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, + Configuration config + ) { + flowOutOfCall(call, ret, out, allowsFieldFlow, pragma[only_bind_into](config)) and + PrevStage::callMayFlowThroughRev(call, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(_, ret.getEnclosingCallable(), _, + pragma[only_bind_into](config)) and + ccc.matchesCall(call) + } + + /** + * Holds if `node` is reachable with access path `ap` from a source in the + * configuration `config`. + * + * The call context `cc` records whether the node is reached through an + * argument in a call, and if so, `argAp` records the access path of that + * argument. + */ + pragma[nomagic] + predicate fwdFlow(NodeEx node, Cc cc, ApOption argAp, Ap ap, Configuration config) { + fwdFlow0(node, cc, argAp, ap, config) and + flowCand(node, unbindApa(getApprox(ap)), config) and + filter(node, ap) + } + + pragma[nomagic] + private predicate fwdFlow0(NodeEx node, Cc cc, ApOption argAp, Ap ap, Configuration config) { + flowCand(node, _, config) and + sourceNode(node, config) and + (if hasSourceCallCtx(config) then cc = ccSomeCall() else cc = ccNone()) and + argAp = apNone() and + ap = getApNil(node) + or + exists(NodeEx mid, Ap ap0, LocalCc localCc | + fwdFlow(mid, cc, argAp, ap0, config) and + localCc = getLocalCc(mid, cc, config) + | + localStep(mid, node, true, _, config, localCc) and + ap = ap0 + or + localStep(mid, node, false, ap, config, localCc) and + ap0 instanceof ApNil + ) + or + exists(NodeEx mid | + fwdFlow(mid, _, _, ap, pragma[only_bind_into](config)) and + flowCand(node, _, pragma[only_bind_into](config)) and + jumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(mid, _, _, nil, pragma[only_bind_into](config)) and + flowCand(node, _, pragma[only_bind_into](config)) and + additionalJumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() and + ap = getApNil(node) + ) + or + // store + exists(TypedContent tc, Ap ap0 | + fwdFlowStore(_, ap0, tc, node, cc, argAp, config) and + ap = apCons(tc, ap0) + ) + or + // read + exists(Ap ap0, Content c | + fwdFlowRead(ap0, c, _, node, cc, argAp, config) and + fwdFlowConsCand(ap0, c, ap, config) + ) + or + // flow into a callable + exists(ApApprox apa | + fwdFlowIn(_, node, _, cc, _, ap, config) and + apa = getApprox(ap) and + if PrevStage::parameterMayFlowThrough(node, _, apa, config) + then argAp = apSome(ap) + else argAp = apNone() + ) + or + // flow out of a callable + fwdFlowOutNotFromArg(node, cc, argAp, ap, config) + or + exists(DataFlowCall call, Ap argAp0 | + fwdFlowOutFromArg(call, node, argAp0, ap, config) and + fwdFlowIsEntered(call, cc, argAp, argAp0, config) + ) + } + + pragma[nomagic] + private predicate fwdFlowStore( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Cc cc, ApOption argAp, Configuration config + ) { + exists(DataFlowType contentType | + fwdFlow(node1, cc, argAp, ap1, config) and + PrevStage::storeStepCand(node1, unbindApa(getApprox(ap1)), tc, node2, contentType, config) and + typecheckStore(ap1, contentType) + ) + } + + /** + * Holds if forward flow with access path `tail` reaches a store of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate fwdFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(TypedContent tc | + fwdFlowStore(_, tail, tc, _, _, _, config) and + tc.getContent() = c and + cons = apCons(tc, tail) + ) + } + + pragma[nomagic] + private predicate fwdFlowRead( + Ap ap, Content c, NodeEx node1, NodeEx node2, Cc cc, ApOption argAp, Configuration config + ) { + fwdFlow(node1, cc, argAp, ap, config) and + PrevStage::readStepCand(node1, c, node2, config) and + getHeadContent(ap) = c + } + + pragma[nomagic] + private predicate fwdFlowIn( + DataFlowCall call, ParamNodeEx p, Cc outercc, Cc innercc, ApOption argAp, Ap ap, + Configuration config + ) { + exists(ArgNodeEx arg, boolean allowsFieldFlow | + fwdFlow(arg, outercc, argAp, ap, config) and + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + innercc = getCallContextCall(call, p.getEnclosingCallable(), outercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutNotFromArg( + NodeEx out, Cc ccOut, ApOption argAp, Ap ap, Configuration config + ) { + exists( + DataFlowCall call, RetNodeEx ret, boolean allowsFieldFlow, CcNoCall innercc, + DataFlowCallable inner + | + fwdFlow(ret, innercc, argAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + inner = ret.getEnclosingCallable() and + ccOut = getCallContextReturn(inner, call, innercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutFromArg( + DataFlowCall call, NodeEx out, Ap argAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, boolean allowsFieldFlow, CcCall ccc | + fwdFlow(ret, ccc, apSome(argAp), ap, config) and + flowThroughOutOfCall(call, ccc, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an argument to `call` is reached in the flow covered by `fwdFlow` + * and data might flow through the target callable and back out at `call`. + */ + pragma[nomagic] + private predicate fwdFlowIsEntered( + DataFlowCall call, Cc cc, ApOption argAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p | + fwdFlowIn(call, p, cc, _, argAp, ap, config) and + PrevStage::parameterMayFlowThrough(p, _, unbindApa(getApprox(ap)), config) + ) + } + + pragma[nomagic] + private predicate storeStepFwd( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Ap ap2, Configuration config + ) { + fwdFlowStore(node1, ap1, tc, node2, _, _, config) and + ap2 = apCons(tc, ap1) and + fwdFlowRead(ap2, tc.getContent(), _, _, _, _, config) + } + + private predicate readStepFwd( + NodeEx n1, Ap ap1, Content c, NodeEx n2, Ap ap2, Configuration config + ) { + fwdFlowRead(ap1, c, n1, n2, _, _, config) and + fwdFlowConsCand(ap1, c, ap2, config) + } + + pragma[nomagic] + private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { + exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | + fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, + pragma[only_bind_into](config)) and + fwdFlowOutFromArg(call, out, argAp0, ap, config) and + fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc), + pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0), + pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate flowThroughIntoCall( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, Configuration config + ) { + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + fwdFlow(arg, _, _, _, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(p, _, _, pragma[only_bind_into](config)) and + callMayFlowThroughFwd(call, pragma[only_bind_into](config)) + } + + pragma[nomagic] + private predicate returnNodeMayFlowThrough(RetNodeEx ret, Ap ap, Configuration config) { + fwdFlow(ret, any(CcCall ccc), apSome(_), ap, config) + } + + /** + * Holds if `node` with access path `ap` is part of a path from a source to a + * sink in the configuration `config`. + * + * The Boolean `toReturn` records whether the node must be returned from the + * enclosing callable in order to reach a sink, and if so, `returnAp` records + * the access path of the returned value. + */ + pragma[nomagic] + predicate revFlow(NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config) { + revFlow0(node, toReturn, returnAp, ap, config) and + fwdFlow(node, _, _, ap, config) + } + + pragma[nomagic] + private predicate revFlow0( + NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + fwdFlow(node, _, _, ap, config) and + sinkNode(node, config) and + (if hasSinkCallCtx(config) then toReturn = true else toReturn = false) and + returnAp = apNone() and + ap instanceof ApNil + or + exists(NodeEx mid | + localStep(node, mid, true, _, config, _) and + revFlow(mid, toReturn, returnAp, ap, config) + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, ap, pragma[only_bind_into](config)) and + localStep(node, mid, false, _, config, _) and + revFlow(mid, toReturn, returnAp, nil, pragma[only_bind_into](config)) and + ap instanceof ApNil + ) + or + exists(NodeEx mid | + jumpStep(node, mid, config) and + revFlow(mid, _, _, ap, config) and + toReturn = false and + returnAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, ap, pragma[only_bind_into](config)) and + additionalJumpStep(node, mid, config) and + revFlow(pragma[only_bind_into](mid), _, _, nil, pragma[only_bind_into](config)) and + toReturn = false and + returnAp = apNone() and + ap instanceof ApNil + ) + or + // store + exists(Ap ap0, Content c | + revFlowStore(ap0, c, ap, node, _, _, toReturn, returnAp, config) and + revFlowConsCand(ap0, c, ap, config) + ) + or + // read + exists(NodeEx mid, Ap ap0 | + revFlow(mid, toReturn, returnAp, ap0, config) and + readStepFwd(node, ap, _, mid, ap0, config) + ) + or + // flow into a callable + revFlowInNotToReturn(node, returnAp, ap, config) and + toReturn = false + or + exists(DataFlowCall call, Ap returnAp0 | + revFlowInToReturn(call, node, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + or + // flow out of a callable + revFlowOut(_, node, _, _, ap, config) and + toReturn = true and + if returnNodeMayFlowThrough(node, ap, config) + then returnAp = apSome(ap) + else returnAp = apNone() + } + + pragma[nomagic] + private predicate revFlowStore( + Ap ap0, Content c, Ap ap, NodeEx node, TypedContent tc, NodeEx mid, boolean toReturn, + ApOption returnAp, Configuration config + ) { + revFlow(mid, toReturn, returnAp, ap0, config) and + storeStepFwd(node, ap, tc, mid, ap0, config) and + tc.getContent() = c + } + + /** + * Holds if reverse flow with access path `tail` reaches a read of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate revFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(NodeEx mid, Ap tail0 | + revFlow(mid, _, _, tail, config) and + tail = pragma[only_bind_into](tail0) and + readStepFwd(_, cons, c, mid, tail0, config) + ) + } + + pragma[nomagic] + private predicate revFlowOut( + DataFlowCall call, RetNodeEx ret, boolean toReturn, ApOption returnAp, Ap ap, + Configuration config + ) { + exists(NodeEx out, boolean allowsFieldFlow | + revFlow(out, toReturn, returnAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInNotToReturn( + ArgNodeEx arg, ApOption returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, false, returnAp, ap, config) and + flowIntoCall(_, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInToReturn( + DataFlowCall call, ArgNodeEx arg, Ap returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, true, apSome(returnAp), ap, config) and + flowThroughIntoCall(call, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an output from `call` is reached in the flow covered by `revFlow` + * and data might flow through the target callable resulting in reverse flow + * reaching an argument of `call`. + */ + pragma[nomagic] + private predicate revFlowIsReturned( + DataFlowCall call, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, CcCall ccc | + revFlowOut(call, ret, toReturn, returnAp, ap, config) and + fwdFlow(ret, ccc, apSome(_), ap, config) and + ccc.matchesCall(call) + ) + } + + pragma[nomagic] + predicate storeStepCand( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, DataFlowType contentType, + Configuration config + ) { + exists(Ap ap2, Content c | + store(node1, tc, node2, contentType, config) and + revFlowStore(ap2, c, ap1, node1, tc, node2, _, _, config) and + revFlowConsCand(ap2, c, ap1, config) + ) + } + + predicate readStepCand(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(Ap ap1, Ap ap2 | + revFlow(node2, _, _, pragma[only_bind_into](ap2), pragma[only_bind_into](config)) and + readStepFwd(node1, ap1, c, node2, ap2, config) and + revFlowStore(ap1, c, pragma[only_bind_into](ap2), _, _, _, _, _, + pragma[only_bind_into](config)) + ) + } + + predicate revFlow(NodeEx node, Configuration config) { revFlow(node, _, _, _, config) } + + private predicate fwdConsCand(TypedContent tc, Ap ap, Configuration config) { + storeStepFwd(_, ap, tc, _, _, config) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + storeStepCand(_, ap, tc, _, _, config) + } + + pragma[noinline] + private predicate parameterFlow( + ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config + ) { + revFlow(p, true, apSome(ap0), ap, config) and + c = p.getEnclosingCallable() + } + + predicate parameterMayFlowThrough(ParamNodeEx p, DataFlowCallable c, Ap ap, Configuration config) { + exists(RetNodeEx ret, Ap ap0, ReturnKindExt kind, int pos | + parameterFlow(p, ap, ap0, c, config) and + c = ret.getEnclosingCallable() and + revFlow(pragma[only_bind_into](ret), true, apSome(_), pragma[only_bind_into](ap0), + pragma[only_bind_into](config)) and + fwdFlow(ret, any(CcCall ccc), apSome(ap), ap0, config) and + kind = ret.getKind() and + p.getPosition() = pos and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = pos + or + p.allowParameterReturnInSelf() + ) + ) + } + + pragma[nomagic] + predicate callMayFlowThroughRev(DataFlowCall call, Configuration config) { + exists(Ap returnAp0, ArgNodeEx arg, boolean toReturn, ApOption returnAp, Ap ap | + revFlow(arg, toReturn, returnAp, ap, config) and + revFlowInToReturn(call, arg, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + } + + predicate stats(boolean fwd, int nodes, int fields, int conscand, int tuples, Configuration config) { + fwd = true and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, config)) and + fields = count(TypedContent f0 | fwdConsCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | fwdConsCand(f0, ap, config)) and + tuples = count(NodeEx n, Cc cc, ApOption argAp, Ap ap | fwdFlow(n, cc, argAp, ap, config)) + or + fwd = false and + nodes = count(NodeEx node | revFlow(node, _, _, _, config)) and + fields = count(TypedContent f0 | consCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | consCand(f0, ap, config)) and + tuples = count(NodeEx n, boolean b, ApOption retAp, Ap ap | revFlow(n, b, retAp, ap, config)) + } + /* End: Stage 2 logic. */ +} + +pragma[nomagic] +private predicate flowOutOfCallNodeCand2( + DataFlowCall call, RetNodeEx node1, NodeEx node2, boolean allowsFieldFlow, Configuration config +) { + flowOutOfCallNodeCand1(call, node1, node2, allowsFieldFlow, config) and + Stage2::revFlow(node2, pragma[only_bind_into](config)) and + Stage2::revFlow(node1, pragma[only_bind_into](config)) +} + +pragma[nomagic] +private predicate flowIntoCallNodeCand2( + DataFlowCall call, ArgNodeEx node1, ParamNodeEx node2, boolean allowsFieldFlow, + Configuration config +) { + flowIntoCallNodeCand1(call, node1, node2, allowsFieldFlow, config) and + Stage2::revFlow(node2, pragma[only_bind_into](config)) and + Stage2::revFlow(node1, pragma[only_bind_into](config)) +} + +private module LocalFlowBigStep { + /** + * A node where some checking is required, and hence the big-step relation + * is not allowed to step over. + */ + private class FlowCheckNode extends NodeEx { + FlowCheckNode() { + castNode(this.asNode()) or + clearsContentCached(this.asNode(), _) + } + } + + /** + * Holds if `node` can be the first node in a maximal subsequence of local + * flow steps in a dataflow path. + */ + predicate localFlowEntry(NodeEx node, Configuration config) { + Stage2::revFlow(node, config) and + ( + sourceNode(node, config) or + jumpStep(_, node, config) or + additionalJumpStep(_, node, config) or + node instanceof ParamNodeEx or + node.asNode() instanceof OutNodeExt or + store(_, _, node, _, config) or + read(_, _, node, config) or + node instanceof FlowCheckNode + ) + } + + /** + * Holds if `node` can be the last node in a maximal subsequence of local + * flow steps in a dataflow path. + */ + private predicate localFlowExit(NodeEx node, Configuration config) { + exists(NodeEx next | Stage2::revFlow(next, config) | + jumpStep(node, next, config) or + additionalJumpStep(node, next, config) or + flowIntoCallNodeCand1(_, node, next, config) or + flowOutOfCallNodeCand1(_, node, next, config) or + store(node, _, next, _, config) or + read(node, _, next, config) + ) + or + node instanceof FlowCheckNode + or + sinkNode(node, config) + } + + pragma[noinline] + private predicate additionalLocalFlowStepNodeCand2( + NodeEx node1, NodeEx node2, Configuration config + ) { + additionalLocalFlowStepNodeCand1(node1, node2, config) and + Stage2::revFlow(node1, _, _, false, pragma[only_bind_into](config)) and + Stage2::revFlow(node2, _, _, false, pragma[only_bind_into](config)) + } + + /** + * Holds if the local path from `node1` to `node2` is a prefix of a maximal + * subsequence of local flow steps in a dataflow path. + * + * This is the transitive closure of `[additional]localFlowStep` beginning + * at `localFlowEntry`. + */ + pragma[nomagic] + private predicate localFlowStepPlus( + NodeEx node1, NodeEx node2, boolean preservesValue, DataFlowType t, Configuration config, + LocalCallContext cc + ) { + not isUnreachableInCallCached(node2.asNode(), cc.(LocalCallContextSpecificCall).getCall()) and + ( + localFlowEntry(node1, pragma[only_bind_into](config)) and + ( + localFlowStepNodeCand1(node1, node2, config) and + preservesValue = true and + t = node1.getDataFlowType() // irrelevant dummy value + or + additionalLocalFlowStepNodeCand2(node1, node2, config) and + preservesValue = false and + t = node2.getDataFlowType() + ) and + node1 != node2 and + cc.relevantFor(node1.getEnclosingCallable()) and + not isUnreachableInCallCached(node1.asNode(), cc.(LocalCallContextSpecificCall).getCall()) and + Stage2::revFlow(node2, pragma[only_bind_into](config)) + or + exists(NodeEx mid | + localFlowStepPlus(node1, mid, preservesValue, t, pragma[only_bind_into](config), cc) and + localFlowStepNodeCand1(mid, node2, config) and + not mid instanceof FlowCheckNode and + Stage2::revFlow(node2, pragma[only_bind_into](config)) + ) + or + exists(NodeEx mid | + localFlowStepPlus(node1, mid, _, _, pragma[only_bind_into](config), cc) and + additionalLocalFlowStepNodeCand2(mid, node2, config) and + not mid instanceof FlowCheckNode and + preservesValue = false and + t = node2.getDataFlowType() and + Stage2::revFlow(node2, pragma[only_bind_into](config)) + ) + ) + } + + /** + * Holds if `node1` can step to `node2` in one or more local steps and this + * path can occur as a maximal subsequence of local steps in a dataflow path. + */ + pragma[nomagic] + predicate localFlowBigStep( + NodeEx node1, NodeEx node2, boolean preservesValue, AccessPathFrontNil apf, + Configuration config, LocalCallContext callContext + ) { + localFlowStepPlus(node1, node2, preservesValue, apf.getType(), config, callContext) and + localFlowExit(node2, config) + } +} + +private import LocalFlowBigStep + +private module Stage3 { + module PrevStage = Stage2; + + class ApApprox = PrevStage::Ap; + + class Ap = AccessPathFront; + + class ApNil = AccessPathFrontNil; + + private ApApprox getApprox(Ap ap) { result = ap.toBoolNonEmpty() } + + private ApNil getApNil(NodeEx node) { + PrevStage::revFlow(node, _) and result = TFrontNil(node.getDataFlowType()) + } + + bindingset[tc, tail] + private Ap apCons(TypedContent tc, Ap tail) { result.getHead() = tc and exists(tail) } + + pragma[noinline] + private Content getHeadContent(Ap ap) { result = ap.getHead().getContent() } + + class ApOption = AccessPathFrontOption; + + ApOption apNone() { result = TAccessPathFrontNone() } + + ApOption apSome(Ap ap) { result = TAccessPathFrontSome(ap) } + + class Cc = boolean; + + class CcCall extends Cc { + CcCall() { this = true } + + /** Holds if this call context may be `call`. */ + predicate matchesCall(DataFlowCall call) { any() } + } + + class CcNoCall extends Cc { + CcNoCall() { this = false } + } + + Cc ccNone() { result = false } + + CcCall ccSomeCall() { result = true } + + private class LocalCc = Unit; + + bindingset[call, c, outercc] + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + + bindingset[call, c, innercc] + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + + bindingset[node, cc, config] + private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } + + private predicate localStep( + NodeEx node1, NodeEx node2, boolean preservesValue, ApNil ap, Configuration config, LocalCc lcc + ) { + localFlowBigStep(node1, node2, preservesValue, ap, config, _) and exists(lcc) + } + + private predicate flowOutOfCall = flowOutOfCallNodeCand2/5; + + private predicate flowIntoCall = flowIntoCallNodeCand2/5; + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + + pragma[nomagic] + private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } + + bindingset[node, ap] + private predicate filter(NodeEx node, Ap ap) { + not clear(node, ap) and + if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + } + + bindingset[ap, contentType] + private predicate typecheckStore(Ap ap, DataFlowType contentType) { + // We need to typecheck stores here, since reverse flow through a getter + // might have a different type here compared to inside the getter. + compatibleTypes(ap.getType(), contentType) + } + + /* Begin: Stage 3 logic. */ + private predicate flowCand(NodeEx node, ApApprox apa, Configuration config) { + PrevStage::revFlow(node, _, _, apa, config) + } + + bindingset[result, apa] + private ApApprox unbindApa(ApApprox apa) { + exists(ApApprox apa0 | + apa = pragma[only_bind_into](apa0) and result = pragma[only_bind_into](apa0) + ) + } + + pragma[nomagic] + private predicate flowThroughOutOfCall( + DataFlowCall call, CcCall ccc, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, + Configuration config + ) { + flowOutOfCall(call, ret, out, allowsFieldFlow, pragma[only_bind_into](config)) and + PrevStage::callMayFlowThroughRev(call, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(_, ret.getEnclosingCallable(), _, + pragma[only_bind_into](config)) and + ccc.matchesCall(call) + } + + /** + * Holds if `node` is reachable with access path `ap` from a source in the + * configuration `config`. + * + * The call context `cc` records whether the node is reached through an + * argument in a call, and if so, `argAp` records the access path of that + * argument. + */ + pragma[nomagic] + predicate fwdFlow(NodeEx node, Cc cc, ApOption argAp, Ap ap, Configuration config) { + fwdFlow0(node, cc, argAp, ap, config) and + flowCand(node, unbindApa(getApprox(ap)), config) and + filter(node, ap) + } + + pragma[nomagic] + private predicate fwdFlow0(NodeEx node, Cc cc, ApOption argAp, Ap ap, Configuration config) { + flowCand(node, _, config) and + sourceNode(node, config) and + (if hasSourceCallCtx(config) then cc = ccSomeCall() else cc = ccNone()) and + argAp = apNone() and + ap = getApNil(node) + or + exists(NodeEx mid, Ap ap0, LocalCc localCc | + fwdFlow(mid, cc, argAp, ap0, config) and + localCc = getLocalCc(mid, cc, config) + | + localStep(mid, node, true, _, config, localCc) and + ap = ap0 + or + localStep(mid, node, false, ap, config, localCc) and + ap0 instanceof ApNil + ) + or + exists(NodeEx mid | + fwdFlow(mid, _, _, ap, pragma[only_bind_into](config)) and + flowCand(node, _, pragma[only_bind_into](config)) and + jumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(mid, _, _, nil, pragma[only_bind_into](config)) and + flowCand(node, _, pragma[only_bind_into](config)) and + additionalJumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() and + ap = getApNil(node) + ) + or + // store + exists(TypedContent tc, Ap ap0 | + fwdFlowStore(_, ap0, tc, node, cc, argAp, config) and + ap = apCons(tc, ap0) + ) + or + // read + exists(Ap ap0, Content c | + fwdFlowRead(ap0, c, _, node, cc, argAp, config) and + fwdFlowConsCand(ap0, c, ap, config) + ) + or + // flow into a callable + exists(ApApprox apa | + fwdFlowIn(_, node, _, cc, _, ap, config) and + apa = getApprox(ap) and + if PrevStage::parameterMayFlowThrough(node, _, apa, config) + then argAp = apSome(ap) + else argAp = apNone() + ) + or + // flow out of a callable + fwdFlowOutNotFromArg(node, cc, argAp, ap, config) + or + exists(DataFlowCall call, Ap argAp0 | + fwdFlowOutFromArg(call, node, argAp0, ap, config) and + fwdFlowIsEntered(call, cc, argAp, argAp0, config) + ) + } + + pragma[nomagic] + private predicate fwdFlowStore( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Cc cc, ApOption argAp, Configuration config + ) { + exists(DataFlowType contentType | + fwdFlow(node1, cc, argAp, ap1, config) and + PrevStage::storeStepCand(node1, unbindApa(getApprox(ap1)), tc, node2, contentType, config) and + typecheckStore(ap1, contentType) + ) + } + + /** + * Holds if forward flow with access path `tail` reaches a store of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate fwdFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(TypedContent tc | + fwdFlowStore(_, tail, tc, _, _, _, config) and + tc.getContent() = c and + cons = apCons(tc, tail) + ) + } + + pragma[nomagic] + private predicate fwdFlowRead( + Ap ap, Content c, NodeEx node1, NodeEx node2, Cc cc, ApOption argAp, Configuration config + ) { + fwdFlow(node1, cc, argAp, ap, config) and + PrevStage::readStepCand(node1, c, node2, config) and + getHeadContent(ap) = c + } + + pragma[nomagic] + private predicate fwdFlowIn( + DataFlowCall call, ParamNodeEx p, Cc outercc, Cc innercc, ApOption argAp, Ap ap, + Configuration config + ) { + exists(ArgNodeEx arg, boolean allowsFieldFlow | + fwdFlow(arg, outercc, argAp, ap, config) and + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + innercc = getCallContextCall(call, p.getEnclosingCallable(), outercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutNotFromArg( + NodeEx out, Cc ccOut, ApOption argAp, Ap ap, Configuration config + ) { + exists( + DataFlowCall call, RetNodeEx ret, boolean allowsFieldFlow, CcNoCall innercc, + DataFlowCallable inner + | + fwdFlow(ret, innercc, argAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + inner = ret.getEnclosingCallable() and + ccOut = getCallContextReturn(inner, call, innercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutFromArg( + DataFlowCall call, NodeEx out, Ap argAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, boolean allowsFieldFlow, CcCall ccc | + fwdFlow(ret, ccc, apSome(argAp), ap, config) and + flowThroughOutOfCall(call, ccc, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an argument to `call` is reached in the flow covered by `fwdFlow` + * and data might flow through the target callable and back out at `call`. + */ + pragma[nomagic] + private predicate fwdFlowIsEntered( + DataFlowCall call, Cc cc, ApOption argAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p | + fwdFlowIn(call, p, cc, _, argAp, ap, config) and + PrevStage::parameterMayFlowThrough(p, _, unbindApa(getApprox(ap)), config) + ) + } + + pragma[nomagic] + private predicate storeStepFwd( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Ap ap2, Configuration config + ) { + fwdFlowStore(node1, ap1, tc, node2, _, _, config) and + ap2 = apCons(tc, ap1) and + fwdFlowRead(ap2, tc.getContent(), _, _, _, _, config) + } + + private predicate readStepFwd( + NodeEx n1, Ap ap1, Content c, NodeEx n2, Ap ap2, Configuration config + ) { + fwdFlowRead(ap1, c, n1, n2, _, _, config) and + fwdFlowConsCand(ap1, c, ap2, config) + } + + pragma[nomagic] + private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { + exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | + fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, + pragma[only_bind_into](config)) and + fwdFlowOutFromArg(call, out, argAp0, ap, config) and + fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc), + pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0), + pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate flowThroughIntoCall( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, Configuration config + ) { + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + fwdFlow(arg, _, _, _, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(p, _, _, pragma[only_bind_into](config)) and + callMayFlowThroughFwd(call, pragma[only_bind_into](config)) + } + + pragma[nomagic] + private predicate returnNodeMayFlowThrough(RetNodeEx ret, Ap ap, Configuration config) { + fwdFlow(ret, any(CcCall ccc), apSome(_), ap, config) + } + + /** + * Holds if `node` with access path `ap` is part of a path from a source to a + * sink in the configuration `config`. + * + * The Boolean `toReturn` records whether the node must be returned from the + * enclosing callable in order to reach a sink, and if so, `returnAp` records + * the access path of the returned value. + */ + pragma[nomagic] + predicate revFlow(NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config) { + revFlow0(node, toReturn, returnAp, ap, config) and + fwdFlow(node, _, _, ap, config) + } + + pragma[nomagic] + private predicate revFlow0( + NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + fwdFlow(node, _, _, ap, config) and + sinkNode(node, config) and + (if hasSinkCallCtx(config) then toReturn = true else toReturn = false) and + returnAp = apNone() and + ap instanceof ApNil + or + exists(NodeEx mid | + localStep(node, mid, true, _, config, _) and + revFlow(mid, toReturn, returnAp, ap, config) + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, ap, pragma[only_bind_into](config)) and + localStep(node, mid, false, _, config, _) and + revFlow(mid, toReturn, returnAp, nil, pragma[only_bind_into](config)) and + ap instanceof ApNil + ) + or + exists(NodeEx mid | + jumpStep(node, mid, config) and + revFlow(mid, _, _, ap, config) and + toReturn = false and + returnAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, ap, pragma[only_bind_into](config)) and + additionalJumpStep(node, mid, config) and + revFlow(pragma[only_bind_into](mid), _, _, nil, pragma[only_bind_into](config)) and + toReturn = false and + returnAp = apNone() and + ap instanceof ApNil + ) + or + // store + exists(Ap ap0, Content c | + revFlowStore(ap0, c, ap, node, _, _, toReturn, returnAp, config) and + revFlowConsCand(ap0, c, ap, config) + ) + or + // read + exists(NodeEx mid, Ap ap0 | + revFlow(mid, toReturn, returnAp, ap0, config) and + readStepFwd(node, ap, _, mid, ap0, config) + ) + or + // flow into a callable + revFlowInNotToReturn(node, returnAp, ap, config) and + toReturn = false + or + exists(DataFlowCall call, Ap returnAp0 | + revFlowInToReturn(call, node, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + or + // flow out of a callable + revFlowOut(_, node, _, _, ap, config) and + toReturn = true and + if returnNodeMayFlowThrough(node, ap, config) + then returnAp = apSome(ap) + else returnAp = apNone() + } + + pragma[nomagic] + private predicate revFlowStore( + Ap ap0, Content c, Ap ap, NodeEx node, TypedContent tc, NodeEx mid, boolean toReturn, + ApOption returnAp, Configuration config + ) { + revFlow(mid, toReturn, returnAp, ap0, config) and + storeStepFwd(node, ap, tc, mid, ap0, config) and + tc.getContent() = c + } + + /** + * Holds if reverse flow with access path `tail` reaches a read of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate revFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(NodeEx mid, Ap tail0 | + revFlow(mid, _, _, tail, config) and + tail = pragma[only_bind_into](tail0) and + readStepFwd(_, cons, c, mid, tail0, config) + ) + } + + pragma[nomagic] + private predicate revFlowOut( + DataFlowCall call, RetNodeEx ret, boolean toReturn, ApOption returnAp, Ap ap, + Configuration config + ) { + exists(NodeEx out, boolean allowsFieldFlow | + revFlow(out, toReturn, returnAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInNotToReturn( + ArgNodeEx arg, ApOption returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, false, returnAp, ap, config) and + flowIntoCall(_, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInToReturn( + DataFlowCall call, ArgNodeEx arg, Ap returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, true, apSome(returnAp), ap, config) and + flowThroughIntoCall(call, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an output from `call` is reached in the flow covered by `revFlow` + * and data might flow through the target callable resulting in reverse flow + * reaching an argument of `call`. + */ + pragma[nomagic] + private predicate revFlowIsReturned( + DataFlowCall call, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, CcCall ccc | + revFlowOut(call, ret, toReturn, returnAp, ap, config) and + fwdFlow(ret, ccc, apSome(_), ap, config) and + ccc.matchesCall(call) + ) + } + + pragma[nomagic] + predicate storeStepCand( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, DataFlowType contentType, + Configuration config + ) { + exists(Ap ap2, Content c | + store(node1, tc, node2, contentType, config) and + revFlowStore(ap2, c, ap1, node1, tc, node2, _, _, config) and + revFlowConsCand(ap2, c, ap1, config) + ) + } + + predicate readStepCand(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(Ap ap1, Ap ap2 | + revFlow(node2, _, _, pragma[only_bind_into](ap2), pragma[only_bind_into](config)) and + readStepFwd(node1, ap1, c, node2, ap2, config) and + revFlowStore(ap1, c, pragma[only_bind_into](ap2), _, _, _, _, _, + pragma[only_bind_into](config)) + ) + } + + predicate revFlow(NodeEx node, Configuration config) { revFlow(node, _, _, _, config) } + + private predicate fwdConsCand(TypedContent tc, Ap ap, Configuration config) { + storeStepFwd(_, ap, tc, _, _, config) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + storeStepCand(_, ap, tc, _, _, config) + } + + pragma[noinline] + private predicate parameterFlow( + ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config + ) { + revFlow(p, true, apSome(ap0), ap, config) and + c = p.getEnclosingCallable() + } + + predicate parameterMayFlowThrough(ParamNodeEx p, DataFlowCallable c, Ap ap, Configuration config) { + exists(RetNodeEx ret, Ap ap0, ReturnKindExt kind, int pos | + parameterFlow(p, ap, ap0, c, config) and + c = ret.getEnclosingCallable() and + revFlow(pragma[only_bind_into](ret), true, apSome(_), pragma[only_bind_into](ap0), + pragma[only_bind_into](config)) and + fwdFlow(ret, any(CcCall ccc), apSome(ap), ap0, config) and + kind = ret.getKind() and + p.getPosition() = pos and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = pos + or + p.allowParameterReturnInSelf() + ) + ) + } + + pragma[nomagic] + predicate callMayFlowThroughRev(DataFlowCall call, Configuration config) { + exists(Ap returnAp0, ArgNodeEx arg, boolean toReturn, ApOption returnAp, Ap ap | + revFlow(arg, toReturn, returnAp, ap, config) and + revFlowInToReturn(call, arg, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + } + + predicate stats(boolean fwd, int nodes, int fields, int conscand, int tuples, Configuration config) { + fwd = true and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, config)) and + fields = count(TypedContent f0 | fwdConsCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | fwdConsCand(f0, ap, config)) and + tuples = count(NodeEx n, Cc cc, ApOption argAp, Ap ap | fwdFlow(n, cc, argAp, ap, config)) + or + fwd = false and + nodes = count(NodeEx node | revFlow(node, _, _, _, config)) and + fields = count(TypedContent f0 | consCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | consCand(f0, ap, config)) and + tuples = count(NodeEx n, boolean b, ApOption retAp, Ap ap | revFlow(n, b, retAp, ap, config)) + } + /* End: Stage 3 logic. */ +} + +/** + * Holds if `argApf` is recorded as the summary context for flow reaching `node` + * and remains relevant for the following pruning stage. + */ +private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { + exists(AccessPathFront apf | + Stage3::revFlow(node, true, _, apf, config) and + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) + ) +} + +/** + * Holds if a length 2 access path approximation with the head `tc` is expected + * to be expensive. + */ +private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) { + exists(int tails, int nodes, int apLimit, int tupleLimit | + tails = strictcount(AccessPathFront apf | Stage3::consCand(tc, apf, config)) and + nodes = + strictcount(NodeEx n | + Stage3::revFlow(n, _, _, any(AccessPathFrontHead apf | apf.getHead() = tc), config) + or + flowCandSummaryCtx(n, any(AccessPathFrontHead apf | apf.getHead() = tc), config) + ) and + accessPathApproxCostLimits(apLimit, tupleLimit) and + apLimit < tails and + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() + ) +} + +private newtype TAccessPathApprox = + TNil(DataFlowType t) or + TConsNil(TypedContent tc, DataFlowType t) { + Stage3::consCand(tc, TFrontNil(t), _) and + not expensiveLen2unfolding(tc, _) + } or + TConsCons(TypedContent tc1, TypedContent tc2, int len) { + Stage3::consCand(tc1, TFrontHead(tc2), _) and + len in [2 .. accessPathLimit()] and + not expensiveLen2unfolding(tc1, _) + } or + TCons1(TypedContent tc, int len) { + len in [1 .. accessPathLimit()] and + expensiveLen2unfolding(tc, _) + } + +/** + * Conceptually a list of `TypedContent`s followed by a `DataFlowType`, but only + * the first two elements of the list and its length are tracked. If data flows + * from a source to a given node with a given `AccessPathApprox`, this indicates + * the sequence of dereference operations needed to get from the value in the node + * to the tracked object. The final type indicates the type of the tracked object. + */ +abstract private class AccessPathApprox extends TAccessPathApprox { + abstract string toString(); + + abstract TypedContent getHead(); + + abstract int len(); + + abstract DataFlowType getType(); + + abstract AccessPathFront getFront(); + + /** Gets the access path obtained by popping `head` from this path, if any. */ + abstract AccessPathApprox pop(TypedContent head); +} + +private class AccessPathApproxNil extends AccessPathApprox, TNil { + private DataFlowType t; + + AccessPathApproxNil() { this = TNil(t) } + + override string toString() { result = concat(": " + ppReprType(t)) } + + override TypedContent getHead() { none() } + + override int len() { result = 0 } + + override DataFlowType getType() { result = t } + + override AccessPathFront getFront() { result = TFrontNil(t) } + + override AccessPathApprox pop(TypedContent head) { none() } +} + +abstract private class AccessPathApproxCons extends AccessPathApprox { } + +private class AccessPathApproxConsNil extends AccessPathApproxCons, TConsNil { + private TypedContent tc; + private DataFlowType t; + + AccessPathApproxConsNil() { this = TConsNil(tc, t) } + + override string toString() { + // The `concat` becomes "" if `ppReprType` has no result. + result = "[" + tc.toString() + "]" + concat(" : " + ppReprType(t)) + } + + override TypedContent getHead() { result = tc } + + override int len() { result = 1 } + + override DataFlowType getType() { result = tc.getContainerType() } + + override AccessPathFront getFront() { result = TFrontHead(tc) } + + override AccessPathApprox pop(TypedContent head) { head = tc and result = TNil(t) } +} + +private class AccessPathApproxConsCons extends AccessPathApproxCons, TConsCons { + private TypedContent tc1; + private TypedContent tc2; + private int len; + + AccessPathApproxConsCons() { this = TConsCons(tc1, tc2, len) } + + override string toString() { + if len = 2 + then result = "[" + tc1.toString() + ", " + tc2.toString() + "]" + else result = "[" + tc1.toString() + ", " + tc2.toString() + ", ... (" + len.toString() + ")]" + } + + override TypedContent getHead() { result = tc1 } + + override int len() { result = len } + + override DataFlowType getType() { result = tc1.getContainerType() } + + override AccessPathFront getFront() { result = TFrontHead(tc1) } + + override AccessPathApprox pop(TypedContent head) { + head = tc1 and + ( + result = TConsCons(tc2, _, len - 1) + or + len = 2 and + result = TConsNil(tc2, _) + or + result = TCons1(tc2, len - 1) + ) + } +} + +private class AccessPathApproxCons1 extends AccessPathApproxCons, TCons1 { + private TypedContent tc; + private int len; + + AccessPathApproxCons1() { this = TCons1(tc, len) } + + override string toString() { + if len = 1 + then result = "[" + tc.toString() + "]" + else result = "[" + tc.toString() + ", ... (" + len.toString() + ")]" + } + + override TypedContent getHead() { result = tc } + + override int len() { result = len } + + override DataFlowType getType() { result = tc.getContainerType() } + + override AccessPathFront getFront() { result = TFrontHead(tc) } + + override AccessPathApprox pop(TypedContent head) { + head = tc and + ( + exists(TypedContent tc2 | Stage3::consCand(tc, TFrontHead(tc2), _) | + result = TConsCons(tc2, _, len - 1) + or + len = 2 and + result = TConsNil(tc2, _) + or + result = TCons1(tc2, len - 1) + ) + or + exists(DataFlowType t | + len = 1 and + Stage3::consCand(tc, TFrontNil(t), _) and + result = TNil(t) + ) + ) + } +} + +/** Gets the access path obtained by popping `tc` from `ap`, if any. */ +private AccessPathApprox pop(TypedContent tc, AccessPathApprox apa) { result = apa.pop(tc) } + +/** Gets the access path obtained by pushing `tc` onto `ap`. */ +private AccessPathApprox push(TypedContent tc, AccessPathApprox apa) { apa = pop(tc, result) } + +private newtype TAccessPathApproxOption = + TAccessPathApproxNone() or + TAccessPathApproxSome(AccessPathApprox apa) + +private class AccessPathApproxOption extends TAccessPathApproxOption { + string toString() { + this = TAccessPathApproxNone() and result = "" + or + this = TAccessPathApproxSome(any(AccessPathApprox apa | result = apa.toString())) + } +} + +private module Stage4 { + module PrevStage = Stage3; + + class ApApprox = PrevStage::Ap; + + class Ap = AccessPathApprox; + + class ApNil = AccessPathApproxNil; + + private ApApprox getApprox(Ap ap) { result = ap.getFront() } + + private ApNil getApNil(NodeEx node) { + PrevStage::revFlow(node, _) and result = TNil(node.getDataFlowType()) + } + + bindingset[tc, tail] + private Ap apCons(TypedContent tc, Ap tail) { result = push(tc, tail) } + + pragma[noinline] + private Content getHeadContent(Ap ap) { result = ap.getHead().getContent() } + + class ApOption = AccessPathApproxOption; + + ApOption apNone() { result = TAccessPathApproxNone() } + + ApOption apSome(Ap ap) { result = TAccessPathApproxSome(ap) } + + class Cc = CallContext; + + class CcCall = CallContextCall; + + class CcNoCall = CallContextNoCall; + + Cc ccNone() { result instanceof CallContextAny } + + CcCall ccSomeCall() { result instanceof CallContextSomeCall } + + private class LocalCc = LocalCallContext; + + bindingset[call, c, outercc] + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSite(call, c) then result = TSpecificCall(call) else result = TSomeCall() + } + + bindingset[call, c, innercc] + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } + + bindingset[node, cc, config] + private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { + localFlowEntry(node, config) and + result = + getLocalCallContext(pragma[only_bind_into](pragma[only_bind_out](cc)), + node.getEnclosingCallable()) + } + + private predicate localStep( + NodeEx node1, NodeEx node2, boolean preservesValue, ApNil ap, Configuration config, LocalCc lcc + ) { + localFlowBigStep(node1, node2, preservesValue, ap.getFront(), config, lcc) + } + + pragma[nomagic] + private predicate flowOutOfCall( + DataFlowCall call, RetNodeEx node1, NodeEx node2, boolean allowsFieldFlow, Configuration config + ) { + flowOutOfCallNodeCand2(call, node1, node2, allowsFieldFlow, config) and + PrevStage::revFlow(node2, _, _, _, pragma[only_bind_into](config)) and + PrevStage::revFlow(node1, _, _, _, pragma[only_bind_into](config)) + } + + pragma[nomagic] + private predicate flowIntoCall( + DataFlowCall call, ArgNodeEx node1, ParamNodeEx node2, boolean allowsFieldFlow, + Configuration config + ) { + flowIntoCallNodeCand2(call, node1, node2, allowsFieldFlow, config) and + PrevStage::revFlow(node2, _, _, _, pragma[only_bind_into](config)) and + PrevStage::revFlow(node1, _, _, _, pragma[only_bind_into](config)) + } + + bindingset[node, ap] + private predicate filter(NodeEx node, Ap ap) { any() } + + // Type checking is not necessary here as it has already been done in stage 3. + bindingset[ap, contentType] + private predicate typecheckStore(Ap ap, DataFlowType contentType) { any() } + + /* Begin: Stage 4 logic. */ + private predicate flowCand(NodeEx node, ApApprox apa, Configuration config) { + PrevStage::revFlow(node, _, _, apa, config) + } + + bindingset[result, apa] + private ApApprox unbindApa(ApApprox apa) { + exists(ApApprox apa0 | + apa = pragma[only_bind_into](apa0) and result = pragma[only_bind_into](apa0) + ) + } + + pragma[nomagic] + private predicate flowThroughOutOfCall( + DataFlowCall call, CcCall ccc, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, + Configuration config + ) { + flowOutOfCall(call, ret, out, allowsFieldFlow, pragma[only_bind_into](config)) and + PrevStage::callMayFlowThroughRev(call, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(_, ret.getEnclosingCallable(), _, + pragma[only_bind_into](config)) and + ccc.matchesCall(call) + } + + /** + * Holds if `node` is reachable with access path `ap` from a source in the + * configuration `config`. + * + * The call context `cc` records whether the node is reached through an + * argument in a call, and if so, `argAp` records the access path of that + * argument. + */ + pragma[nomagic] + predicate fwdFlow(NodeEx node, Cc cc, ApOption argAp, Ap ap, Configuration config) { + fwdFlow0(node, cc, argAp, ap, config) and + flowCand(node, unbindApa(getApprox(ap)), config) and + filter(node, ap) + } + + pragma[nomagic] + private predicate fwdFlow0(NodeEx node, Cc cc, ApOption argAp, Ap ap, Configuration config) { + flowCand(node, _, config) and + sourceNode(node, config) and + (if hasSourceCallCtx(config) then cc = ccSomeCall() else cc = ccNone()) and + argAp = apNone() and + ap = getApNil(node) + or + exists(NodeEx mid, Ap ap0, LocalCc localCc | + fwdFlow(mid, cc, argAp, ap0, config) and + localCc = getLocalCc(mid, cc, config) + | + localStep(mid, node, true, _, config, localCc) and + ap = ap0 + or + localStep(mid, node, false, ap, config, localCc) and + ap0 instanceof ApNil + ) + or + exists(NodeEx mid | + fwdFlow(mid, _, _, ap, pragma[only_bind_into](config)) and + flowCand(node, _, pragma[only_bind_into](config)) and + jumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(mid, _, _, nil, pragma[only_bind_into](config)) and + flowCand(node, _, pragma[only_bind_into](config)) and + additionalJumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() and + ap = getApNil(node) + ) + or + // store + exists(TypedContent tc, Ap ap0 | + fwdFlowStore(_, ap0, tc, node, cc, argAp, config) and + ap = apCons(tc, ap0) + ) + or + // read + exists(Ap ap0, Content c | + fwdFlowRead(ap0, c, _, node, cc, argAp, config) and + fwdFlowConsCand(ap0, c, ap, config) + ) + or + // flow into a callable + exists(ApApprox apa | + fwdFlowIn(_, node, _, cc, _, ap, config) and + apa = getApprox(ap) and + if PrevStage::parameterMayFlowThrough(node, _, apa, config) + then argAp = apSome(ap) + else argAp = apNone() + ) + or + // flow out of a callable + fwdFlowOutNotFromArg(node, cc, argAp, ap, config) + or + exists(DataFlowCall call, Ap argAp0 | + fwdFlowOutFromArg(call, node, argAp0, ap, config) and + fwdFlowIsEntered(call, cc, argAp, argAp0, config) + ) + } + + pragma[nomagic] + private predicate fwdFlowStore( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Cc cc, ApOption argAp, Configuration config + ) { + exists(DataFlowType contentType | + fwdFlow(node1, cc, argAp, ap1, config) and + PrevStage::storeStepCand(node1, unbindApa(getApprox(ap1)), tc, node2, contentType, config) and + typecheckStore(ap1, contentType) + ) + } + + /** + * Holds if forward flow with access path `tail` reaches a store of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate fwdFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(TypedContent tc | + fwdFlowStore(_, tail, tc, _, _, _, config) and + tc.getContent() = c and + cons = apCons(tc, tail) + ) + } + + pragma[nomagic] + private predicate fwdFlowRead( + Ap ap, Content c, NodeEx node1, NodeEx node2, Cc cc, ApOption argAp, Configuration config + ) { + fwdFlow(node1, cc, argAp, ap, config) and + PrevStage::readStepCand(node1, c, node2, config) and + getHeadContent(ap) = c + } + + pragma[nomagic] + private predicate fwdFlowIn( + DataFlowCall call, ParamNodeEx p, Cc outercc, Cc innercc, ApOption argAp, Ap ap, + Configuration config + ) { + exists(ArgNodeEx arg, boolean allowsFieldFlow | + fwdFlow(arg, outercc, argAp, ap, config) and + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + innercc = getCallContextCall(call, p.getEnclosingCallable(), outercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutNotFromArg( + NodeEx out, Cc ccOut, ApOption argAp, Ap ap, Configuration config + ) { + exists( + DataFlowCall call, RetNodeEx ret, boolean allowsFieldFlow, CcNoCall innercc, + DataFlowCallable inner + | + fwdFlow(ret, innercc, argAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + inner = ret.getEnclosingCallable() and + ccOut = getCallContextReturn(inner, call, innercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutFromArg( + DataFlowCall call, NodeEx out, Ap argAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, boolean allowsFieldFlow, CcCall ccc | + fwdFlow(ret, ccc, apSome(argAp), ap, config) and + flowThroughOutOfCall(call, ccc, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an argument to `call` is reached in the flow covered by `fwdFlow` + * and data might flow through the target callable and back out at `call`. + */ + pragma[nomagic] + private predicate fwdFlowIsEntered( + DataFlowCall call, Cc cc, ApOption argAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p | + fwdFlowIn(call, p, cc, _, argAp, ap, config) and + PrevStage::parameterMayFlowThrough(p, _, unbindApa(getApprox(ap)), config) + ) + } + + pragma[nomagic] + private predicate storeStepFwd( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Ap ap2, Configuration config + ) { + fwdFlowStore(node1, ap1, tc, node2, _, _, config) and + ap2 = apCons(tc, ap1) and + fwdFlowRead(ap2, tc.getContent(), _, _, _, _, config) + } + + private predicate readStepFwd( + NodeEx n1, Ap ap1, Content c, NodeEx n2, Ap ap2, Configuration config + ) { + fwdFlowRead(ap1, c, n1, n2, _, _, config) and + fwdFlowConsCand(ap1, c, ap2, config) + } + + pragma[nomagic] + private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { + exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | + fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, + pragma[only_bind_into](config)) and + fwdFlowOutFromArg(call, out, argAp0, ap, config) and + fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc), + pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0), + pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate flowThroughIntoCall( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, Configuration config + ) { + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + fwdFlow(arg, _, _, _, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(p, _, _, pragma[only_bind_into](config)) and + callMayFlowThroughFwd(call, pragma[only_bind_into](config)) + } + + pragma[nomagic] + private predicate returnNodeMayFlowThrough(RetNodeEx ret, Ap ap, Configuration config) { + fwdFlow(ret, any(CcCall ccc), apSome(_), ap, config) + } + + /** + * Holds if `node` with access path `ap` is part of a path from a source to a + * sink in the configuration `config`. + * + * The Boolean `toReturn` records whether the node must be returned from the + * enclosing callable in order to reach a sink, and if so, `returnAp` records + * the access path of the returned value. + */ + pragma[nomagic] + predicate revFlow(NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config) { + revFlow0(node, toReturn, returnAp, ap, config) and + fwdFlow(node, _, _, ap, config) + } + + pragma[nomagic] + private predicate revFlow0( + NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + fwdFlow(node, _, _, ap, config) and + sinkNode(node, config) and + (if hasSinkCallCtx(config) then toReturn = true else toReturn = false) and + returnAp = apNone() and + ap instanceof ApNil + or + exists(NodeEx mid | + localStep(node, mid, true, _, config, _) and + revFlow(mid, toReturn, returnAp, ap, config) + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, ap, pragma[only_bind_into](config)) and + localStep(node, mid, false, _, config, _) and + revFlow(mid, toReturn, returnAp, nil, pragma[only_bind_into](config)) and + ap instanceof ApNil + ) + or + exists(NodeEx mid | + jumpStep(node, mid, config) and + revFlow(mid, _, _, ap, config) and + toReturn = false and + returnAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, ap, pragma[only_bind_into](config)) and + additionalJumpStep(node, mid, config) and + revFlow(pragma[only_bind_into](mid), _, _, nil, pragma[only_bind_into](config)) and + toReturn = false and + returnAp = apNone() and + ap instanceof ApNil + ) + or + // store + exists(Ap ap0, Content c | + revFlowStore(ap0, c, ap, node, _, _, toReturn, returnAp, config) and + revFlowConsCand(ap0, c, ap, config) + ) + or + // read + exists(NodeEx mid, Ap ap0 | + revFlow(mid, toReturn, returnAp, ap0, config) and + readStepFwd(node, ap, _, mid, ap0, config) + ) + or + // flow into a callable + revFlowInNotToReturn(node, returnAp, ap, config) and + toReturn = false + or + exists(DataFlowCall call, Ap returnAp0 | + revFlowInToReturn(call, node, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + or + // flow out of a callable + revFlowOut(_, node, _, _, ap, config) and + toReturn = true and + if returnNodeMayFlowThrough(node, ap, config) + then returnAp = apSome(ap) + else returnAp = apNone() + } + + pragma[nomagic] + private predicate revFlowStore( + Ap ap0, Content c, Ap ap, NodeEx node, TypedContent tc, NodeEx mid, boolean toReturn, + ApOption returnAp, Configuration config + ) { + revFlow(mid, toReturn, returnAp, ap0, config) and + storeStepFwd(node, ap, tc, mid, ap0, config) and + tc.getContent() = c + } + + /** + * Holds if reverse flow with access path `tail` reaches a read of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate revFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(NodeEx mid, Ap tail0 | + revFlow(mid, _, _, tail, config) and + tail = pragma[only_bind_into](tail0) and + readStepFwd(_, cons, c, mid, tail0, config) + ) + } + + pragma[nomagic] + private predicate revFlowOut( + DataFlowCall call, RetNodeEx ret, boolean toReturn, ApOption returnAp, Ap ap, + Configuration config + ) { + exists(NodeEx out, boolean allowsFieldFlow | + revFlow(out, toReturn, returnAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInNotToReturn( + ArgNodeEx arg, ApOption returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, false, returnAp, ap, config) and + flowIntoCall(_, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInToReturn( + DataFlowCall call, ArgNodeEx arg, Ap returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, true, apSome(returnAp), ap, config) and + flowThroughIntoCall(call, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an output from `call` is reached in the flow covered by `revFlow` + * and data might flow through the target callable resulting in reverse flow + * reaching an argument of `call`. + */ + pragma[nomagic] + private predicate revFlowIsReturned( + DataFlowCall call, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, CcCall ccc | + revFlowOut(call, ret, toReturn, returnAp, ap, config) and + fwdFlow(ret, ccc, apSome(_), ap, config) and + ccc.matchesCall(call) + ) + } + + pragma[nomagic] + predicate storeStepCand( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, DataFlowType contentType, + Configuration config + ) { + exists(Ap ap2, Content c | + store(node1, tc, node2, contentType, config) and + revFlowStore(ap2, c, ap1, node1, tc, node2, _, _, config) and + revFlowConsCand(ap2, c, ap1, config) + ) + } + + predicate readStepCand(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(Ap ap1, Ap ap2 | + revFlow(node2, _, _, pragma[only_bind_into](ap2), pragma[only_bind_into](config)) and + readStepFwd(node1, ap1, c, node2, ap2, config) and + revFlowStore(ap1, c, pragma[only_bind_into](ap2), _, _, _, _, _, + pragma[only_bind_into](config)) + ) + } + + predicate revFlow(NodeEx node, Configuration config) { revFlow(node, _, _, _, config) } + + private predicate fwdConsCand(TypedContent tc, Ap ap, Configuration config) { + storeStepFwd(_, ap, tc, _, _, config) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + storeStepCand(_, ap, tc, _, _, config) + } + + pragma[noinline] + private predicate parameterFlow( + ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config + ) { + revFlow(p, true, apSome(ap0), ap, config) and + c = p.getEnclosingCallable() + } + + predicate parameterMayFlowThrough(ParamNodeEx p, DataFlowCallable c, Ap ap, Configuration config) { + exists(RetNodeEx ret, Ap ap0, ReturnKindExt kind, int pos | + parameterFlow(p, ap, ap0, c, config) and + c = ret.getEnclosingCallable() and + revFlow(pragma[only_bind_into](ret), true, apSome(_), pragma[only_bind_into](ap0), + pragma[only_bind_into](config)) and + fwdFlow(ret, any(CcCall ccc), apSome(ap), ap0, config) and + kind = ret.getKind() and + p.getPosition() = pos and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = pos + or + p.allowParameterReturnInSelf() + ) + ) + } + + pragma[nomagic] + predicate callMayFlowThroughRev(DataFlowCall call, Configuration config) { + exists(Ap returnAp0, ArgNodeEx arg, boolean toReturn, ApOption returnAp, Ap ap | + revFlow(arg, toReturn, returnAp, ap, config) and + revFlowInToReturn(call, arg, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + } + + predicate stats(boolean fwd, int nodes, int fields, int conscand, int tuples, Configuration config) { + fwd = true and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, config)) and + fields = count(TypedContent f0 | fwdConsCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | fwdConsCand(f0, ap, config)) and + tuples = count(NodeEx n, Cc cc, ApOption argAp, Ap ap | fwdFlow(n, cc, argAp, ap, config)) + or + fwd = false and + nodes = count(NodeEx node | revFlow(node, _, _, _, config)) and + fields = count(TypedContent f0 | consCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | consCand(f0, ap, config)) and + tuples = count(NodeEx n, boolean b, ApOption retAp, Ap ap | revFlow(n, b, retAp, ap, config)) + } + /* End: Stage 4 logic. */ +} + +bindingset[conf, result] +private Configuration unbindConf(Configuration conf) { + exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) +} + +private predicate nodeMayUseSummary(NodeEx n, AccessPathApprox apa, Configuration config) { + exists(DataFlowCallable c, AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + Stage4::revFlow(n, true, _, apa0, config) and + Stage4::fwdFlow(n, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and + n.getEnclosingCallable() = c + ) +} + +private newtype TSummaryCtx = + TSummaryCtxNone() or + TSummaryCtxSome(ParamNodeEx p, AccessPath ap) { + Stage4::parameterMayFlowThrough(p, _, ap.getApprox(), _) + } + +/** + * A context for generating flow summaries. This represents flow entry through + * a specific parameter with an access path of a specific shape. + * + * Summaries are only created for parameters that may flow through. + */ +abstract private class SummaryCtx extends TSummaryCtx { + abstract string toString(); +} + +/** A summary context from which no flow summary can be generated. */ +private class SummaryCtxNone extends SummaryCtx, TSummaryCtxNone { + override string toString() { result = "" } +} + +/** A summary context from which a flow summary can be generated. */ +private class SummaryCtxSome extends SummaryCtx, TSummaryCtxSome { + private ParamNodeEx p; + private AccessPath ap; + + SummaryCtxSome() { this = TSummaryCtxSome(p, ap) } + + int getParameterPos() { p.isParameterOf(_, result) } + + ParamNodeEx getParamNode() { result = p } + + override string toString() { result = p + ": " + ap } + + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + p.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +/** + * Gets the number of length 2 access path approximations that correspond to `apa`. + */ +private int count1to2unfold(AccessPathApproxCons1 apa, Configuration config) { + exists(TypedContent tc, int len | + tc = apa.getHead() and + len = apa.len() and + result = + strictcount(AccessPathFront apf | + Stage4::consCand(tc, any(AccessPathApprox ap | ap.getFront() = apf and ap.len() = len - 1), + config) + ) + ) +} + +private int countNodesUsingAccessPath(AccessPathApprox apa, Configuration config) { + result = + strictcount(NodeEx n | + Stage4::revFlow(n, _, _, apa, config) or nodeMayUseSummary(n, apa, config) + ) +} + +/** + * Holds if a length 2 access path approximation matching `apa` is expected + * to be expensive. + */ +private predicate expensiveLen1to2unfolding(AccessPathApproxCons1 apa, Configuration config) { + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = count1to2unfold(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + apLimit < aps and + tupleLimit < (aps - 1) * nodes + ) +} + +private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { + exists(TypedContent head | + apa.pop(head) = result and + Stage4::consCand(head, result, config) + ) +} + +/** + * Holds with `unfold = false` if a precise head-tail representation of `apa` is + * expected to be expensive. Holds with `unfold = true` otherwise. + */ +private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) +} + +/** + * Gets the number of `AccessPath`s that correspond to `apa`. + */ +private int countAps(AccessPathApprox apa, Configuration config) { + evalUnfold(apa, false, config) and + result = 1 and + (not apa instanceof AccessPathApproxCons1 or expensiveLen1to2unfolding(apa, config)) + or + evalUnfold(apa, false, config) and + result = count1to2unfold(apa, config) and + not expensiveLen1to2unfolding(apa, config) + or + evalUnfold(apa, true, config) and + result = countPotentialAps(apa, config) +} + +/** + * Gets the number of `AccessPath`s that would correspond to `apa` assuming + * that it is expanded to a precise head-tail representation. + */ +language[monotonicAggregates] +private int countPotentialAps(AccessPathApprox apa, Configuration config) { + apa instanceof AccessPathApproxNil and result = 1 + or + result = strictsum(AccessPathApprox tail | tail = getATail(apa, config) | countAps(tail, config)) +} + +private newtype TAccessPath = + TAccessPathNil(DataFlowType t) or + TAccessPathCons(TypedContent head, AccessPath tail) { + exists(AccessPathApproxCons apa | + not evalUnfold(apa, false, _) and + head = apa.getHead() and + tail.getApprox() = getATail(apa, _) + ) + } or + TAccessPathCons2(TypedContent head1, TypedContent head2, int len) { + exists(AccessPathApproxCons apa | + evalUnfold(apa, false, _) and + not expensiveLen1to2unfolding(apa, _) and + apa.len() = len and + head1 = apa.getHead() and + head2 = getATail(apa, _).getHead() + ) + } or + TAccessPathCons1(TypedContent head, int len) { + exists(AccessPathApproxCons apa | + evalUnfold(apa, false, _) and + expensiveLen1to2unfolding(apa, _) and + apa.len() = len and + head = apa.getHead() + ) + } + +private newtype TPathNode = + TPathNodeMid(NodeEx node, CallContext cc, SummaryCtx sc, AccessPath ap, Configuration config) { + // A PathNode is introduced by a source ... + Stage4::revFlow(node, config) and + sourceNode(node, config) and + ( + if hasSourceCallCtx(config) + then cc instanceof CallContextSomeCall + else cc instanceof CallContextAny + ) and + sc instanceof SummaryCtxNone and + ap = TAccessPathNil(node.getDataFlowType()) + or + // ... or a step from an existing PathNode to another node. + exists(PathNodeMid mid | + pathStep(mid, node, cc, sc, ap) and + pragma[only_bind_into](config) = mid.getConfiguration() and + Stage4::revFlow(node, _, _, ap.getApprox(), pragma[only_bind_into](config)) + ) + } or + TPathNodeSink(NodeEx node, Configuration config) { + exists(PathNodeMid sink | + sink.isAtSink() and + node = sink.getNodeEx() and + config = sink.getConfiguration() + ) + } + +/** + * A list of `TypedContent`s followed by a `DataFlowType`. If data flows from a + * source to a given node with a given `AccessPath`, this indicates the sequence + * of dereference operations needed to get from the value in the node to the + * tracked object. The final type indicates the type of the tracked object. + */ +abstract private class AccessPath extends TAccessPath { + /** Gets the head of this access path, if any. */ + abstract TypedContent getHead(); + + /** Gets the tail of this access path, if any. */ + abstract AccessPath getTail(); + + /** Gets the front of this access path. */ + abstract AccessPathFront getFront(); + + /** Gets the approximation of this access path. */ + abstract AccessPathApprox getApprox(); + + /** Gets the length of this access path. */ + abstract int length(); + + /** Gets a textual representation of this access path. */ + abstract string toString(); + + /** Gets the access path obtained by popping `tc` from this access path, if any. */ + final AccessPath pop(TypedContent tc) { + result = this.getTail() and + tc = this.getHead() + } + + /** Gets the access path obtained by pushing `tc` onto this access path. */ + final AccessPath push(TypedContent tc) { this = result.pop(tc) } +} + +private class AccessPathNil extends AccessPath, TAccessPathNil { + private DataFlowType t; + + AccessPathNil() { this = TAccessPathNil(t) } + + DataFlowType getType() { result = t } + + override TypedContent getHead() { none() } + + override AccessPath getTail() { none() } + + override AccessPathFrontNil getFront() { result = TFrontNil(t) } + + override AccessPathApproxNil getApprox() { result = TNil(t) } + + override int length() { result = 0 } + + override string toString() { result = concat(": " + ppReprType(t)) } +} + +private class AccessPathCons extends AccessPath, TAccessPathCons { + private TypedContent head; + private AccessPath tail; + + AccessPathCons() { this = TAccessPathCons(head, tail) } + + override TypedContent getHead() { result = head } + + override AccessPath getTail() { result = tail } + + override AccessPathFrontHead getFront() { result = TFrontHead(head) } + + override AccessPathApproxCons getApprox() { + result = TConsNil(head, tail.(AccessPathNil).getType()) + or + result = TConsCons(head, tail.getHead(), this.length()) + or + result = TCons1(head, this.length()) + } + + override int length() { result = 1 + tail.length() } + + private string toStringImpl(boolean needsSuffix) { + exists(DataFlowType t | + tail = TAccessPathNil(t) and + needsSuffix = false and + result = head.toString() + "]" + concat(" : " + ppReprType(t)) + ) + or + result = head + ", " + tail.(AccessPathCons).toStringImpl(needsSuffix) + or + exists(TypedContent tc2, TypedContent tc3, int len | tail = TAccessPathCons2(tc2, tc3, len) | + result = head + ", " + tc2 + ", " + tc3 + ", ... (" and len > 2 and needsSuffix = true + or + result = head + ", " + tc2 + ", " + tc3 + "]" and len = 2 and needsSuffix = false + ) + or + exists(TypedContent tc2, int len | tail = TAccessPathCons1(tc2, len) | + result = head + ", " + tc2 + ", ... (" and len > 1 and needsSuffix = true + or + result = head + ", " + tc2 + "]" and len = 1 and needsSuffix = false + ) + } + + override string toString() { + result = "[" + this.toStringImpl(true) + this.length().toString() + ")]" + or + result = "[" + this.toStringImpl(false) + } +} + +private class AccessPathCons2 extends AccessPath, TAccessPathCons2 { + private TypedContent head1; + private TypedContent head2; + private int len; + + AccessPathCons2() { this = TAccessPathCons2(head1, head2, len) } + + override TypedContent getHead() { result = head1 } + + override AccessPath getTail() { + Stage4::consCand(head1, result.getApprox(), _) and + result.getHead() = head2 and + result.length() = len - 1 + } + + override AccessPathFrontHead getFront() { result = TFrontHead(head1) } + + override AccessPathApproxCons getApprox() { + result = TConsCons(head1, head2, len) or + result = TCons1(head1, len) + } + + override int length() { result = len } + + override string toString() { + if len = 2 + then result = "[" + head1.toString() + ", " + head2.toString() + "]" + else + result = "[" + head1.toString() + ", " + head2.toString() + ", ... (" + len.toString() + ")]" + } +} + +private class AccessPathCons1 extends AccessPath, TAccessPathCons1 { + private TypedContent head; + private int len; + + AccessPathCons1() { this = TAccessPathCons1(head, len) } + + override TypedContent getHead() { result = head } + + override AccessPath getTail() { + Stage4::consCand(head, result.getApprox(), _) and result.length() = len - 1 + } + + override AccessPathFrontHead getFront() { result = TFrontHead(head) } + + override AccessPathApproxCons getApprox() { result = TCons1(head, len) } + + override int length() { result = len } + + override string toString() { + if len = 1 + then result = "[" + head.toString() + "]" + else result = "[" + head.toString() + ", ... (" + len.toString() + ")]" + } +} + +/** + * A `Node` augmented with a call context (except for sinks), an access path, and a configuration. + * Only those `PathNode`s that are reachable from a source are generated. + */ +class PathNode extends TPathNode { + /** Gets a textual representation of this element. */ + string toString() { none() } + + /** + * Gets a textual representation of this element, including a textual + * representation of the call context. + */ + string toStringWithContext() { none() } + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + none() + } + + /** Gets the underlying `Node`. */ + final Node getNode() { this.(PathNodeImpl).getNodeEx().projectToNode() = result } + + /** Gets the associated configuration. */ + Configuration getConfiguration() { none() } + + private PathNode getASuccessorIfHidden() { + this.(PathNodeImpl).isHidden() and + result = this.(PathNodeImpl).getASuccessorImpl() + } + + /** Gets a successor of this node, if any. */ + final PathNode getASuccessor() { + result = this.(PathNodeImpl).getASuccessorImpl().getASuccessorIfHidden*() and + not this.(PathNodeImpl).isHidden() and + not result.(PathNodeImpl).isHidden() + } + + /** Holds if this node is a source. */ + predicate isSource() { none() } +} + +abstract private class PathNodeImpl extends PathNode { + abstract PathNode getASuccessorImpl(); + + abstract NodeEx getNodeEx(); + + predicate isHidden() { + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + } + + private string ppAp() { + this instanceof PathNodeSink and result = "" + or + exists(string s | s = this.(PathNodeMid).getAp().toString() | + if s = "" then result = "" else result = " " + s + ) + } + + private string ppCtx() { + this instanceof PathNodeSink and result = "" + or + result = " <" + this.(PathNodeMid).getCallContext().toString() + ">" + } + + override string toString() { result = this.getNodeEx().toString() + this.ppAp() } + + override string toStringWithContext() { + result = this.getNodeEx().toString() + this.ppAp() + this.ppCtx() + } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getNodeEx().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +/** Holds if `n` can reach a sink. */ +private predicate directReach(PathNode n) { + n instanceof PathNodeSink or directReach(n.getASuccessor()) +} + +/** Holds if `n` can reach a sink or is used in a subpath. */ +private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) } + +/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */ +private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) } + +private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2) + +/** + * Provides the query predicates needed to include a graph in a path-problem query. + */ +module PathGraph { + /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ + query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) } + + /** Holds if `n` is a node in the graph of data flow path explanations. */ + query predicate nodes(PathNode n, string key, string val) { + reach(n) and key = "semmle.label" and val = n.toString() + } + + query predicate subpaths = Subpaths::subpaths/4; +} + +/** + * An intermediate flow graph node. This is a triple consisting of a `Node`, + * a `CallContext`, and a `Configuration`. + */ +private class PathNodeMid extends PathNodeImpl, TPathNodeMid { + NodeEx node; + CallContext cc; + SummaryCtx sc; + AccessPath ap; + Configuration config; + + PathNodeMid() { this = TPathNodeMid(node, cc, sc, ap, config) } + + override NodeEx getNodeEx() { result = node } + + CallContext getCallContext() { result = cc } + + SummaryCtx getSummaryCtx() { result = sc } + + AccessPath getAp() { result = ap } + + override Configuration getConfiguration() { result = config } + + private PathNodeMid getSuccMid() { + pathStep(this, result.getNodeEx(), result.getCallContext(), result.getSummaryCtx(), + result.getAp()) and + result.getConfiguration() = unbindConf(this.getConfiguration()) + } + + override PathNodeImpl getASuccessorImpl() { + // an intermediate step to another intermediate node + result = this.getSuccMid() + or + // a final step to a sink + result = this.getSuccMid().projectToSink() + } + + override predicate isSource() { + sourceNode(node, config) and + ( + if hasSourceCallCtx(config) + then cc instanceof CallContextSomeCall + else cc instanceof CallContextAny + ) and + sc instanceof SummaryCtxNone and + ap instanceof AccessPathNil + } + + predicate isAtSink() { + sinkNode(node, config) and + ap instanceof AccessPathNil and + if hasSinkCallCtx(config) + then + // For `FeatureHasSinkCallContext` the condition `cc instanceof CallContextNoCall` + // is exactly what we need to check. This also implies + // `sc instanceof SummaryCtxNone`. + // For `FeatureEqualSourceSinkCallContext` the initial call context was + // set to `CallContextSomeCall` and jumps are disallowed, so + // `cc instanceof CallContextNoCall` never holds. On the other hand, + // in this case there's never any need to enter a call except to identify + // a summary, so the condition in `pathIntoCallable` enforces this, which + // means that `sc instanceof SummaryCtxNone` holds if and only if we are + // in the call context of the source. + sc instanceof SummaryCtxNone or + cc instanceof CallContextNoCall + else any() + } + + PathNodeSink projectToSink() { + this.isAtSink() and + result.getNodeEx() = node and + result.getConfiguration() = unbindConf(config) + } +} + +/** + * A flow graph node corresponding to a sink. This is disjoint from the + * intermediate nodes in order to uniquely correspond to a given sink by + * excluding the `CallContext`. + */ +private class PathNodeSink extends PathNodeImpl, TPathNodeSink { + NodeEx node; + Configuration config; + + PathNodeSink() { this = TPathNodeSink(node, config) } + + override NodeEx getNodeEx() { result = node } + + override Configuration getConfiguration() { result = config } + + override PathNode getASuccessorImpl() { none() } + + override predicate isSource() { sourceNode(node, config) } +} + +/** + * Holds if data may flow from `mid` to `node`. The last step in or out of + * a callable is recorded by `cc`. + */ +private predicate pathStep( + PathNodeMid mid, NodeEx node, CallContext cc, SummaryCtx sc, AccessPath ap +) { + exists(AccessPath ap0, NodeEx midnode, Configuration conf, LocalCallContext localCC | + midnode = mid.getNodeEx() and + conf = mid.getConfiguration() and + cc = mid.getCallContext() and + sc = mid.getSummaryCtx() and + localCC = + getLocalCallContext(pragma[only_bind_into](pragma[only_bind_out](cc)), + midnode.getEnclosingCallable()) and + ap0 = mid.getAp() + | + localFlowBigStep(midnode, node, true, _, conf, localCC) and + ap = ap0 + or + localFlowBigStep(midnode, node, false, ap.getFront(), conf, localCC) and + ap0 instanceof AccessPathNil + ) + or + jumpStep(mid.getNodeEx(), node, mid.getConfiguration()) and + cc instanceof CallContextAny and + sc instanceof SummaryCtxNone and + ap = mid.getAp() + or + additionalJumpStep(mid.getNodeEx(), node, mid.getConfiguration()) and + cc instanceof CallContextAny and + sc instanceof SummaryCtxNone and + mid.getAp() instanceof AccessPathNil and + ap = TAccessPathNil(node.getDataFlowType()) + or + exists(TypedContent tc | pathStoreStep(mid, node, ap.pop(tc), tc, cc)) and + sc = mid.getSummaryCtx() + or + exists(TypedContent tc | pathReadStep(mid, node, ap.push(tc), tc, cc)) and + sc = mid.getSummaryCtx() + or + pathIntoCallable(mid, node, _, cc, sc, _, _) and ap = mid.getAp() + or + pathOutOfCallable(mid, node, cc) and ap = mid.getAp() and sc instanceof SummaryCtxNone + or + pathThroughCallable(mid, node, cc, ap) and sc = mid.getSummaryCtx() +} + +pragma[nomagic] +private predicate pathReadStep( + PathNodeMid mid, NodeEx node, AccessPath ap0, TypedContent tc, CallContext cc +) { + ap0 = mid.getAp() and + tc = ap0.getHead() and + Stage4::readStepCand(mid.getNodeEx(), tc.getContent(), node, mid.getConfiguration()) and + cc = mid.getCallContext() +} + +pragma[nomagic] +private predicate pathStoreStep( + PathNodeMid mid, NodeEx node, AccessPath ap0, TypedContent tc, CallContext cc +) { + ap0 = mid.getAp() and + Stage4::storeStepCand(mid.getNodeEx(), _, tc, node, _, mid.getConfiguration()) and + cc = mid.getCallContext() +} + +private predicate pathOutOfCallable0( + PathNodeMid mid, ReturnPosition pos, CallContext innercc, AccessPathApprox apa, + Configuration config +) { + pos = mid.getNodeEx().(RetNodeEx).getReturnPosition() and + innercc = mid.getCallContext() and + innercc instanceof CallContextNoCall and + apa = mid.getAp().getApprox() and + config = mid.getConfiguration() +} + +pragma[nomagic] +private predicate pathOutOfCallable1( + PathNodeMid mid, DataFlowCall call, ReturnKindExt kind, CallContext cc, AccessPathApprox apa, + Configuration config +) { + exists(ReturnPosition pos, DataFlowCallable c, CallContext innercc | + pathOutOfCallable0(mid, pos, innercc, apa, config) and + c = pos.getCallable() and + kind = pos.getKind() and + resolveReturn(innercc, c, call) + | + if reducedViableImplInReturn(c, call) then cc = TReturn(c, call) else cc = TAnyCallContext() + ) +} + +pragma[noinline] +private NodeEx getAnOutNodeFlow( + ReturnKindExt kind, DataFlowCall call, AccessPathApprox apa, Configuration config +) { + result.asNode() = kind.getAnOutNode(call) and + Stage4::revFlow(result, _, _, apa, config) +} + +/** + * Holds if data may flow from `mid` to `out`. The last step of this path + * is a return from a callable and is recorded by `cc`, if needed. + */ +pragma[noinline] +private predicate pathOutOfCallable(PathNodeMid mid, NodeEx out, CallContext cc) { + exists(ReturnKindExt kind, DataFlowCall call, AccessPathApprox apa, Configuration config | + pathOutOfCallable1(mid, call, kind, cc, apa, config) and + out = getAnOutNodeFlow(kind, call, apa, config) + ) +} + +/** + * Holds if data may flow from `mid` to the `i`th argument of `call` in `cc`. + */ +pragma[noinline] +private predicate pathIntoArg( + PathNodeMid mid, int i, CallContext cc, DataFlowCall call, AccessPath ap, AccessPathApprox apa, + Configuration config +) { + exists(ArgNode arg | + arg = mid.getNodeEx().asNode() and + cc = mid.getCallContext() and + arg.argumentOf(call, i) and + ap = mid.getAp() and + apa = ap.getApprox() and + config = mid.getConfiguration() + ) +} + +pragma[nomagic] +private predicate parameterCand( + DataFlowCallable callable, int i, AccessPathApprox apa, Configuration config +) { + exists(ParamNodeEx p | + Stage4::revFlow(p, _, _, apa, config) and + p.isParameterOf(callable, i) + ) +} + +pragma[nomagic] +private predicate pathIntoCallable0( + PathNodeMid mid, DataFlowCallable callable, int i, CallContext outercc, DataFlowCall call, + AccessPath ap, Configuration config +) { + exists(AccessPathApprox apa | + pathIntoArg(mid, pragma[only_bind_into](i), outercc, call, ap, pragma[only_bind_into](apa), + pragma[only_bind_into](config)) and + callable = resolveCall(call, outercc) and + parameterCand(callable, pragma[only_bind_into](i), pragma[only_bind_into](apa), + pragma[only_bind_into](config)) + ) +} + +/** + * Holds if data may flow from `mid` to `p` through `call`. The contexts + * before and after entering the callable are `outercc` and `innercc`, + * respectively. + */ +pragma[nomagic] +private predicate pathIntoCallable( + PathNodeMid mid, ParamNodeEx p, CallContext outercc, CallContextCall innercc, SummaryCtx sc, + DataFlowCall call, Configuration config +) { + exists(int i, DataFlowCallable callable, AccessPath ap | + pathIntoCallable0(mid, callable, i, outercc, call, ap, config) and + p.isParameterOf(callable, i) and + ( + sc = TSummaryCtxSome(p, ap) + or + not exists(TSummaryCtxSome(p, ap)) and + sc = TSummaryCtxNone() and + // When the call contexts of source and sink needs to match then there's + // never any reason to enter a callable except to find a summary. See also + // the comment in `PathNodeMid::isAtSink`. + not config.getAFeature() instanceof FeatureEqualSourceSinkCallContext + ) + | + if recordDataFlowCallSite(call, callable) + then innercc = TSpecificCall(call) + else innercc = TSomeCall() + ) +} + +/** Holds if data may flow from a parameter given by `sc` to a return of kind `kind`. */ +pragma[nomagic] +private predicate paramFlowsThrough( + ReturnKindExt kind, CallContextCall cc, SummaryCtxSome sc, AccessPath ap, AccessPathApprox apa, + Configuration config +) { + exists(PathNodeMid mid, RetNodeEx ret, int pos | + mid.getNodeEx() = ret and + kind = ret.getKind() and + cc = mid.getCallContext() and + sc = mid.getSummaryCtx() and + config = mid.getConfiguration() and + ap = mid.getAp() and + apa = ap.getApprox() and + pos = sc.getParameterPos() and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = pos + or + sc.getParamNode().allowParameterReturnInSelf() + ) + ) +} + +pragma[nomagic] +private predicate pathThroughCallable0( + DataFlowCall call, PathNodeMid mid, ReturnKindExt kind, CallContext cc, AccessPath ap, + AccessPathApprox apa, Configuration config +) { + exists(CallContext innercc, SummaryCtx sc | + pathIntoCallable(mid, _, cc, innercc, sc, call, config) and + paramFlowsThrough(kind, innercc, sc, ap, apa, config) + ) +} + +/** + * Holds if data may flow from `mid` through a callable to the node `out`. + * The context `cc` is restored to its value prior to entering the callable. + */ +pragma[noinline] +private predicate pathThroughCallable(PathNodeMid mid, NodeEx out, CallContext cc, AccessPath ap) { + exists(DataFlowCall call, ReturnKindExt kind, AccessPathApprox apa, Configuration config | + pathThroughCallable0(call, mid, kind, cc, ap, apa, config) and + out = getAnOutNodeFlow(kind, call, apa, config) + ) +} + +private module Subpaths { + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple and `ret` is determined by + * `kind`, `sc`, `apout`, and `innercc`. + */ + pragma[nomagic] + private predicate subpaths01( + PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, + NodeEx out, AccessPath apout + ) { + exists(Configuration config | + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and + pathIntoCallable(arg, par, _, innercc, sc, _, config) and + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and + not arg.isHidden() + ) + } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple and `ret` is determined by + * `kind`, `sc`, `apout`, and `innercc`. + */ + pragma[nomagic] + private predicate subpaths02( + PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, + NodeEx out, AccessPath apout + ) { + subpaths01(arg, par, sc, innercc, kind, out, apout) and + out.asNode() = kind.getAnOutNode(_) + } + + pragma[nomagic] + private Configuration getPathNodeConf(PathNode n) { result = n.getConfiguration() } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple. + */ + pragma[nomagic] + private predicate subpaths03( + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, AccessPath apout + ) { + exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | + subpaths02(arg, par, sc, innercc, kind, out, apout) and + ret.getNodeEx() = retnode and + kind = retnode.getKind() and + innercc = ret.getCallContext() and + sc = ret.getSummaryCtx() and + ret.getConfiguration() = unbindConf(getPathNodeConf(arg)) and + apout = ret.getAp() + ) + } + + private PathNodeImpl localStepToHidden(PathNodeImpl n) { + n.getASuccessorImpl() = result and + result.isHidden() and + exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | + localFlowBigStep(n1, n2, _, _, _, _) or + store(n1, _, n2, _, _) or + read(n1, _, n2, _) + ) + } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through + * a subpath between `par` and `ret` with the connecting edges `arg -> par` and + * `ret -> out` is summarized as the edge `arg -> out`. + */ + predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNodeMid out) { + exists(ParamNodeEx p, NodeEx o, AccessPath apout | + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and + subpaths03(arg, p, localStepToHidden*(ret), o, apout) and + not ret.isHidden() and + par.getNodeEx() = p and + out.getNodeEx() = o and + out.getAp() = apout + ) + } + + /** + * Holds if `n` can reach a return node in a summarized subpath. + */ + predicate retReach(PathNode n) { + subpaths(_, _, n, _) + or + exists(PathNode mid | + retReach(mid) and + n.getASuccessor() = mid and + not subpaths(_, mid, _, _) + ) + } +} + +/** + * Holds if data can flow (inter-procedurally) from `source` to `sink`. + * + * Will only have results if `configuration` has non-empty sources and + * sinks. + */ +private predicate flowsTo( + PathNode flowsource, PathNodeSink flowsink, Node source, Node sink, Configuration configuration +) { + flowsource.isSource() and + flowsource.getConfiguration() = configuration and + flowsource.(PathNodeImpl).getNodeEx().asNode() = source and + (flowsource = flowsink or pathSuccPlus(flowsource, flowsink)) and + flowsink.getNodeEx().asNode() = sink +} + +/** + * Holds if data can flow (inter-procedurally) from `source` to `sink`. + * + * Will only have results if `configuration` has non-empty sources and + * sinks. + */ +predicate flowsTo(Node source, Node sink, Configuration configuration) { + flowsTo(_, _, source, sink, configuration) +} + +private predicate finalStats(boolean fwd, int nodes, int fields, int conscand, int tuples) { + fwd = true and + nodes = count(NodeEx n0 | exists(PathNodeImpl pn | pn.getNodeEx() = n0)) and + fields = count(TypedContent f0 | exists(PathNodeMid pn | pn.getAp().getHead() = f0)) and + conscand = count(AccessPath ap | exists(PathNodeMid pn | pn.getAp() = ap)) and + tuples = count(PathNode pn) + or + fwd = false and + nodes = count(NodeEx n0 | exists(PathNodeImpl pn | pn.getNodeEx() = n0 and reach(pn))) and + fields = count(TypedContent f0 | exists(PathNodeMid pn | pn.getAp().getHead() = f0 and reach(pn))) and + conscand = count(AccessPath ap | exists(PathNodeMid pn | pn.getAp() = ap and reach(pn))) and + tuples = count(PathNode pn | reach(pn)) +} + +/** + * INTERNAL: Only for debugging. + * + * Calculates per-stage metrics for data flow. + */ +predicate stageStats( + int n, string stage, int nodes, int fields, int conscand, int tuples, Configuration config +) { + stage = "1 Fwd" and n = 10 and Stage1::stats(true, nodes, fields, conscand, tuples, config) + or + stage = "1 Rev" and n = 15 and Stage1::stats(false, nodes, fields, conscand, tuples, config) + or + stage = "2 Fwd" and n = 20 and Stage2::stats(true, nodes, fields, conscand, tuples, config) + or + stage = "2 Rev" and n = 25 and Stage2::stats(false, nodes, fields, conscand, tuples, config) + or + stage = "3 Fwd" and n = 30 and Stage3::stats(true, nodes, fields, conscand, tuples, config) + or + stage = "3 Rev" and n = 35 and Stage3::stats(false, nodes, fields, conscand, tuples, config) + or + stage = "4 Fwd" and n = 40 and Stage4::stats(true, nodes, fields, conscand, tuples, config) + or + stage = "4 Rev" and n = 45 and Stage4::stats(false, nodes, fields, conscand, tuples, config) + or + stage = "5 Fwd" and n = 50 and finalStats(true, nodes, fields, conscand, tuples) + or + stage = "5 Rev" and n = 55 and finalStats(false, nodes, fields, conscand, tuples) +} + +private module FlowExploration { + private predicate callableStep(DataFlowCallable c1, DataFlowCallable c2, Configuration config) { + exists(NodeEx node1, NodeEx node2 | + jumpStep(node1, node2, config) + or + additionalJumpStep(node1, node2, config) + or + // flow into callable + viableParamArgEx(_, node2, node1) + or + // flow out of a callable + viableReturnPosOutEx(_, node1.(RetNodeEx).getReturnPosition(), node2) + | + c1 = node1.getEnclosingCallable() and + c2 = node2.getEnclosingCallable() and + c1 != c2 + ) + } + + private predicate interestingCallableSrc(DataFlowCallable c, Configuration config) { + exists(Node n | config.isSource(n) and c = getNodeEnclosingCallable(n)) + or + exists(DataFlowCallable mid | + interestingCallableSrc(mid, config) and callableStep(mid, c, config) + ) + } + + private predicate interestingCallableSink(DataFlowCallable c, Configuration config) { + exists(Node n | config.isSink(n) and c = getNodeEnclosingCallable(n)) + or + exists(DataFlowCallable mid | + interestingCallableSink(mid, config) and callableStep(c, mid, config) + ) + } + + private newtype TCallableExt = + TCallable(DataFlowCallable c, Configuration config) { + interestingCallableSrc(c, config) or + interestingCallableSink(c, config) + } or + TCallableSrc() or + TCallableSink() + + private predicate callableExtSrc(TCallableSrc src) { any() } + + private predicate callableExtSink(TCallableSink sink) { any() } + + private predicate callableExtStepFwd(TCallableExt ce1, TCallableExt ce2) { + exists(DataFlowCallable c1, DataFlowCallable c2, Configuration config | + callableStep(c1, c2, config) and + ce1 = TCallable(c1, pragma[only_bind_into](config)) and + ce2 = TCallable(c2, pragma[only_bind_into](config)) + ) + or + exists(Node n, Configuration config | + ce1 = TCallableSrc() and + config.isSource(n) and + ce2 = TCallable(getNodeEnclosingCallable(n), config) + ) + or + exists(Node n, Configuration config | + ce2 = TCallableSink() and + config.isSink(n) and + ce1 = TCallable(getNodeEnclosingCallable(n), config) + ) + } + + private predicate callableExtStepRev(TCallableExt ce1, TCallableExt ce2) { + callableExtStepFwd(ce2, ce1) + } + + private int distSrcExt(TCallableExt c) = + shortestDistances(callableExtSrc/1, callableExtStepFwd/2)(_, c, result) + + private int distSinkExt(TCallableExt c) = + shortestDistances(callableExtSink/1, callableExtStepRev/2)(_, c, result) + + private int distSrc(DataFlowCallable c, Configuration config) { + result = distSrcExt(TCallable(c, config)) - 1 + } + + private int distSink(DataFlowCallable c, Configuration config) { + result = distSinkExt(TCallable(c, config)) - 1 + } + + private newtype TPartialAccessPath = + TPartialNil(DataFlowType t) or + TPartialCons(TypedContent tc, int len) { len in [1 .. accessPathLimit()] } + + /** + * Conceptually a list of `TypedContent`s followed by a `Type`, but only the first + * element of the list and its length are tracked. If data flows from a source to + * a given node with a given `AccessPath`, this indicates the sequence of + * dereference operations needed to get from the value in the node to the + * tracked object. The final type indicates the type of the tracked object. + */ + private class PartialAccessPath extends TPartialAccessPath { + abstract string toString(); + + TypedContent getHead() { this = TPartialCons(result, _) } + + int len() { + this = TPartialNil(_) and result = 0 + or + this = TPartialCons(_, result) + } + + DataFlowType getType() { + this = TPartialNil(result) + or + exists(TypedContent head | this = TPartialCons(head, _) | result = head.getContainerType()) + } + } + + private class PartialAccessPathNil extends PartialAccessPath, TPartialNil { + override string toString() { + exists(DataFlowType t | this = TPartialNil(t) | result = concat(": " + ppReprType(t))) + } + } + + private class PartialAccessPathCons extends PartialAccessPath, TPartialCons { + override string toString() { + exists(TypedContent tc, int len | this = TPartialCons(tc, len) | + if len = 1 + then result = "[" + tc.toString() + "]" + else result = "[" + tc.toString() + ", ... (" + len.toString() + ")]" + ) + } + } + + private newtype TRevPartialAccessPath = + TRevPartialNil() or + TRevPartialCons(Content c, int len) { len in [1 .. accessPathLimit()] } + + /** + * Conceptually a list of `Content`s, but only the first + * element of the list and its length are tracked. + */ + private class RevPartialAccessPath extends TRevPartialAccessPath { + abstract string toString(); + + Content getHead() { this = TRevPartialCons(result, _) } + + int len() { + this = TRevPartialNil() and result = 0 + or + this = TRevPartialCons(_, result) + } + } + + private class RevPartialAccessPathNil extends RevPartialAccessPath, TRevPartialNil { + override string toString() { result = "" } + } + + private class RevPartialAccessPathCons extends RevPartialAccessPath, TRevPartialCons { + override string toString() { + exists(Content c, int len | this = TRevPartialCons(c, len) | + if len = 1 + then result = "[" + c.toString() + "]" + else result = "[" + c.toString() + ", ... (" + len.toString() + ")]" + ) + } + } + + private newtype TSummaryCtx1 = + TSummaryCtx1None() or + TSummaryCtx1Param(ParamNodeEx p) + + private newtype TSummaryCtx2 = + TSummaryCtx2None() or + TSummaryCtx2Some(PartialAccessPath ap) + + private newtype TRevSummaryCtx1 = + TRevSummaryCtx1None() or + TRevSummaryCtx1Some(ReturnPosition pos) + + private newtype TRevSummaryCtx2 = + TRevSummaryCtx2None() or + TRevSummaryCtx2Some(RevPartialAccessPath ap) + + private newtype TPartialPathNode = + TPartialPathNodeFwd( + NodeEx node, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, PartialAccessPath ap, + Configuration config + ) { + sourceNode(node, config) and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + ap = TPartialNil(node.getDataFlowType()) and + not fullBarrier(node, config) and + exists(config.explorationLimit()) + or + partialPathNodeMk0(node, cc, sc1, sc2, ap, config) and + distSrc(node.getEnclosingCallable(), config) <= config.explorationLimit() + } or + TPartialPathNodeRev( + NodeEx node, TRevSummaryCtx1 sc1, TRevSummaryCtx2 sc2, RevPartialAccessPath ap, + Configuration config + ) { + sinkNode(node, config) and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + ap = TRevPartialNil() and + not fullBarrier(node, config) and + exists(config.explorationLimit()) + or + exists(PartialPathNodeRev mid | + revPartialPathStep(mid, node, sc1, sc2, ap, config) and + not clearsContentCached(node.asNode(), ap.getHead()) and + not fullBarrier(node, config) and + distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() + ) + } + + pragma[nomagic] + private predicate partialPathNodeMk0( + NodeEx node, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, PartialAccessPath ap, + Configuration config + ) { + exists(PartialPathNodeFwd mid | + partialPathStep(mid, node, cc, sc1, sc2, ap, config) and + not fullBarrier(node, config) and + not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + if node.asNode() instanceof CastingNode + then compatibleTypes(node.getDataFlowType(), ap.getType()) + else any() + ) + } + + /** + * A `Node` augmented with a call context, an access path, and a configuration. + */ + class PartialPathNode extends TPartialPathNode { + /** Gets a textual representation of this element. */ + string toString() { result = this.getNodeEx().toString() + this.ppAp() } + + /** + * Gets a textual representation of this element, including a textual + * representation of the call context. + */ + string toStringWithContext() { + result = this.getNodeEx().toString() + this.ppAp() + this.ppCtx() + } + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getNodeEx().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + + /** Gets the underlying `Node`. */ + final Node getNode() { this.getNodeEx().projectToNode() = result } + + private NodeEx getNodeEx() { + result = this.(PartialPathNodeFwd).getNodeEx() or + result = this.(PartialPathNodeRev).getNodeEx() + } + + /** Gets the associated configuration. */ + Configuration getConfiguration() { none() } + + /** Gets a successor of this node, if any. */ + PartialPathNode getASuccessor() { none() } + + /** + * Gets the approximate distance to the nearest source measured in number + * of interprocedural steps. + */ + int getSourceDistance() { + result = distSrc(this.getNodeEx().getEnclosingCallable(), this.getConfiguration()) + } + + /** + * Gets the approximate distance to the nearest sink measured in number + * of interprocedural steps. + */ + int getSinkDistance() { + result = distSink(this.getNodeEx().getEnclosingCallable(), this.getConfiguration()) + } + + private string ppAp() { + exists(string s | + s = this.(PartialPathNodeFwd).getAp().toString() or + s = this.(PartialPathNodeRev).getAp().toString() + | + if s = "" then result = "" else result = " " + s + ) + } + + private string ppCtx() { + result = " <" + this.(PartialPathNodeFwd).getCallContext().toString() + ">" + } + + /** Holds if this is a source in a forward-flow path. */ + predicate isFwdSource() { this.(PartialPathNodeFwd).isSource() } + + /** Holds if this is a sink in a reverse-flow path. */ + predicate isRevSink() { this.(PartialPathNodeRev).isSink() } + } + + /** + * Provides the query predicates needed to include a graph in a path-problem query. + */ + module PartialPathGraph { + /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ + query predicate edges(PartialPathNode a, PartialPathNode b) { a.getASuccessor() = b } + } + + private class PartialPathNodeFwd extends PartialPathNode, TPartialPathNodeFwd { + NodeEx node; + CallContext cc; + TSummaryCtx1 sc1; + TSummaryCtx2 sc2; + PartialAccessPath ap; + Configuration config; + + PartialPathNodeFwd() { this = TPartialPathNodeFwd(node, cc, sc1, sc2, ap, config) } + + NodeEx getNodeEx() { result = node } + + CallContext getCallContext() { result = cc } + + TSummaryCtx1 getSummaryCtx1() { result = sc1 } + + TSummaryCtx2 getSummaryCtx2() { result = sc2 } + + PartialAccessPath getAp() { result = ap } + + override Configuration getConfiguration() { result = config } + + override PartialPathNodeFwd getASuccessor() { + partialPathStep(this, result.getNodeEx(), result.getCallContext(), result.getSummaryCtx1(), + result.getSummaryCtx2(), result.getAp(), result.getConfiguration()) + } + + predicate isSource() { + sourceNode(node, config) and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + ap instanceof TPartialNil + } + } + + private class PartialPathNodeRev extends PartialPathNode, TPartialPathNodeRev { + NodeEx node; + TRevSummaryCtx1 sc1; + TRevSummaryCtx2 sc2; + RevPartialAccessPath ap; + Configuration config; + + PartialPathNodeRev() { this = TPartialPathNodeRev(node, sc1, sc2, ap, config) } + + NodeEx getNodeEx() { result = node } + + TRevSummaryCtx1 getSummaryCtx1() { result = sc1 } + + TRevSummaryCtx2 getSummaryCtx2() { result = sc2 } + + RevPartialAccessPath getAp() { result = ap } + + override Configuration getConfiguration() { result = config } + + override PartialPathNodeRev getASuccessor() { + revPartialPathStep(result, this.getNodeEx(), this.getSummaryCtx1(), this.getSummaryCtx2(), + this.getAp(), this.getConfiguration()) + } + + predicate isSink() { + sinkNode(node, config) and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + ap = TRevPartialNil() + } + } + + private predicate partialPathStep( + PartialPathNodeFwd mid, NodeEx node, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, + PartialAccessPath ap, Configuration config + ) { + not isUnreachableInCallCached(node.asNode(), cc.(CallContextSpecificCall).getCall()) and + ( + localFlowStep(mid.getNodeEx(), node, config) and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + ap = mid.getAp() and + config = mid.getConfiguration() + or + additionalLocalFlowStep(mid.getNodeEx(), node, config) and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + mid.getAp() instanceof PartialAccessPathNil and + ap = TPartialNil(node.getDataFlowType()) and + config = mid.getConfiguration() + ) + or + jumpStep(mid.getNodeEx(), node, config) and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + ap = mid.getAp() and + config = mid.getConfiguration() + or + additionalJumpStep(mid.getNodeEx(), node, config) and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + mid.getAp() instanceof PartialAccessPathNil and + ap = TPartialNil(node.getDataFlowType()) and + config = mid.getConfiguration() + or + partialPathStoreStep(mid, _, _, node, ap) and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + config = mid.getConfiguration() + or + exists(PartialAccessPath ap0, TypedContent tc | + partialPathReadStep(mid, ap0, tc, node, cc, config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + apConsFwd(ap, tc, ap0, config) + ) + or + partialPathIntoCallable(mid, node, _, cc, sc1, sc2, _, ap, config) + or + partialPathOutOfCallable(mid, node, cc, ap, config) and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() + or + partialPathThroughCallable(mid, node, cc, ap, config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() + } + + bindingset[result, i] + private int unbindInt(int i) { i <= result and i >= result } + + pragma[inline] + private predicate partialPathStoreStep( + PartialPathNodeFwd mid, PartialAccessPath ap1, TypedContent tc, NodeEx node, + PartialAccessPath ap2 + ) { + exists(NodeEx midNode, DataFlowType contentType | + midNode = mid.getNodeEx() and + ap1 = mid.getAp() and + store(midNode, tc, node, contentType, mid.getConfiguration()) and + ap2.getHead() = tc and + ap2.len() = unbindInt(ap1.len() + 1) and + compatibleTypes(ap1.getType(), contentType) + ) + } + + pragma[nomagic] + private predicate apConsFwd( + PartialAccessPath ap1, TypedContent tc, PartialAccessPath ap2, Configuration config + ) { + exists(PartialPathNodeFwd mid | + partialPathStoreStep(mid, ap1, tc, _, ap2) and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate partialPathReadStep( + PartialPathNodeFwd mid, PartialAccessPath ap, TypedContent tc, NodeEx node, CallContext cc, + Configuration config + ) { + exists(NodeEx midNode | + midNode = mid.getNodeEx() and + ap = mid.getAp() and + read(midNode, tc.getContent(), node, pragma[only_bind_into](config)) and + ap.getHead() = tc and + pragma[only_bind_into](config) = mid.getConfiguration() and + cc = mid.getCallContext() + ) + } + + private predicate partialPathOutOfCallable0( + PartialPathNodeFwd mid, ReturnPosition pos, CallContext innercc, PartialAccessPath ap, + Configuration config + ) { + pos = mid.getNodeEx().(RetNodeEx).getReturnPosition() and + innercc = mid.getCallContext() and + innercc instanceof CallContextNoCall and + ap = mid.getAp() and + config = mid.getConfiguration() + } + + pragma[nomagic] + private predicate partialPathOutOfCallable1( + PartialPathNodeFwd mid, DataFlowCall call, ReturnKindExt kind, CallContext cc, + PartialAccessPath ap, Configuration config + ) { + exists(ReturnPosition pos, DataFlowCallable c, CallContext innercc | + partialPathOutOfCallable0(mid, pos, innercc, ap, config) and + c = pos.getCallable() and + kind = pos.getKind() and + resolveReturn(innercc, c, call) + | + if reducedViableImplInReturn(c, call) then cc = TReturn(c, call) else cc = TAnyCallContext() + ) + } + + private predicate partialPathOutOfCallable( + PartialPathNodeFwd mid, NodeEx out, CallContext cc, PartialAccessPath ap, Configuration config + ) { + exists(ReturnKindExt kind, DataFlowCall call | + partialPathOutOfCallable1(mid, call, kind, cc, ap, config) + | + out.asNode() = kind.getAnOutNode(call) + ) + } + + pragma[noinline] + private predicate partialPathIntoArg( + PartialPathNodeFwd mid, int i, CallContext cc, DataFlowCall call, PartialAccessPath ap, + Configuration config + ) { + exists(ArgNode arg | + arg = mid.getNodeEx().asNode() and + cc = mid.getCallContext() and + arg.argumentOf(call, i) and + ap = mid.getAp() and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate partialPathIntoCallable0( + PartialPathNodeFwd mid, DataFlowCallable callable, int i, CallContext outercc, + DataFlowCall call, PartialAccessPath ap, Configuration config + ) { + partialPathIntoArg(mid, i, outercc, call, ap, config) and + callable = resolveCall(call, outercc) + } + + private predicate partialPathIntoCallable( + PartialPathNodeFwd mid, ParamNodeEx p, CallContext outercc, CallContextCall innercc, + TSummaryCtx1 sc1, TSummaryCtx2 sc2, DataFlowCall call, PartialAccessPath ap, + Configuration config + ) { + exists(int i, DataFlowCallable callable | + partialPathIntoCallable0(mid, callable, i, outercc, call, ap, config) and + p.isParameterOf(callable, i) and + sc1 = TSummaryCtx1Param(p) and + sc2 = TSummaryCtx2Some(ap) + | + if recordDataFlowCallSite(call, callable) + then innercc = TSpecificCall(call) + else innercc = TSomeCall() + ) + } + + pragma[nomagic] + private predicate paramFlowsThroughInPartialPath( + ReturnKindExt kind, CallContextCall cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, + PartialAccessPath ap, Configuration config + ) { + exists(PartialPathNodeFwd mid, RetNodeEx ret | + mid.getNodeEx() = ret and + kind = ret.getKind() and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + config = mid.getConfiguration() and + ap = mid.getAp() + ) + } + + pragma[noinline] + private predicate partialPathThroughCallable0( + DataFlowCall call, PartialPathNodeFwd mid, ReturnKindExt kind, CallContext cc, + PartialAccessPath ap, Configuration config + ) { + exists(CallContext innercc, TSummaryCtx1 sc1, TSummaryCtx2 sc2 | + partialPathIntoCallable(mid, _, cc, innercc, sc1, sc2, call, _, config) and + paramFlowsThroughInPartialPath(kind, innercc, sc1, sc2, ap, config) + ) + } + + private predicate partialPathThroughCallable( + PartialPathNodeFwd mid, NodeEx out, CallContext cc, PartialAccessPath ap, Configuration config + ) { + exists(DataFlowCall call, ReturnKindExt kind | + partialPathThroughCallable0(call, mid, kind, cc, ap, config) and + out.asNode() = kind.getAnOutNode(call) + ) + } + + private predicate revPartialPathStep( + PartialPathNodeRev mid, NodeEx node, TRevSummaryCtx1 sc1, TRevSummaryCtx2 sc2, + RevPartialAccessPath ap, Configuration config + ) { + localFlowStep(node, mid.getNodeEx(), config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + ap = mid.getAp() and + config = mid.getConfiguration() + or + additionalLocalFlowStep(node, mid.getNodeEx(), config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + mid.getAp() instanceof RevPartialAccessPathNil and + ap = TRevPartialNil() and + config = mid.getConfiguration() + or + jumpStep(node, mid.getNodeEx(), config) and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + ap = mid.getAp() and + config = mid.getConfiguration() + or + additionalJumpStep(node, mid.getNodeEx(), config) and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + mid.getAp() instanceof RevPartialAccessPathNil and + ap = TRevPartialNil() and + config = mid.getConfiguration() + or + revPartialPathReadStep(mid, _, _, node, ap) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + config = mid.getConfiguration() + or + exists(RevPartialAccessPath ap0, Content c | + revPartialPathStoreStep(mid, ap0, c, node, config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + apConsRev(ap, c, ap0, config) + ) + or + exists(ParamNodeEx p | + mid.getNodeEx() = p and + viableParamArgEx(_, p, node) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + ap = mid.getAp() and + config = mid.getConfiguration() + ) + or + exists(ReturnPosition pos | + revPartialPathIntoReturn(mid, pos, sc1, sc2, _, ap, config) and + pos = getReturnPosition(node.asNode()) + ) + or + revPartialPathThroughCallable(mid, node, ap, config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() + } + + pragma[inline] + private predicate revPartialPathReadStep( + PartialPathNodeRev mid, RevPartialAccessPath ap1, Content c, NodeEx node, + RevPartialAccessPath ap2 + ) { + exists(NodeEx midNode | + midNode = mid.getNodeEx() and + ap1 = mid.getAp() and + read(node, c, midNode, mid.getConfiguration()) and + ap2.getHead() = c and + ap2.len() = unbindInt(ap1.len() + 1) + ) + } + + pragma[nomagic] + private predicate apConsRev( + RevPartialAccessPath ap1, Content c, RevPartialAccessPath ap2, Configuration config + ) { + exists(PartialPathNodeRev mid | + revPartialPathReadStep(mid, ap1, c, _, ap2) and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate revPartialPathStoreStep( + PartialPathNodeRev mid, RevPartialAccessPath ap, Content c, NodeEx node, Configuration config + ) { + exists(NodeEx midNode, TypedContent tc | + midNode = mid.getNodeEx() and + ap = mid.getAp() and + store(node, tc, midNode, _, config) and + ap.getHead() = c and + config = mid.getConfiguration() and + tc.getContent() = c + ) + } + + pragma[nomagic] + private predicate revPartialPathIntoReturn( + PartialPathNodeRev mid, ReturnPosition pos, TRevSummaryCtx1Some sc1, TRevSummaryCtx2Some sc2, + DataFlowCall call, RevPartialAccessPath ap, Configuration config + ) { + exists(NodeEx out | + mid.getNodeEx() = out and + viableReturnPosOutEx(call, pos, out) and + sc1 = TRevSummaryCtx1Some(pos) and + sc2 = TRevSummaryCtx2Some(ap) and + ap = mid.getAp() and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate revPartialPathFlowsThrough( + int pos, TRevSummaryCtx1Some sc1, TRevSummaryCtx2Some sc2, RevPartialAccessPath ap, + Configuration config + ) { + exists(PartialPathNodeRev mid, ParamNodeEx p | + mid.getNodeEx() = p and + p.getPosition() = pos and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + ap = mid.getAp() and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate revPartialPathThroughCallable0( + DataFlowCall call, PartialPathNodeRev mid, int pos, RevPartialAccessPath ap, + Configuration config + ) { + exists(TRevSummaryCtx1Some sc1, TRevSummaryCtx2Some sc2 | + revPartialPathIntoReturn(mid, _, sc1, sc2, call, _, config) and + revPartialPathFlowsThrough(pos, sc1, sc2, ap, config) + ) + } + + pragma[nomagic] + private predicate revPartialPathThroughCallable( + PartialPathNodeRev mid, ArgNodeEx node, RevPartialAccessPath ap, Configuration config + ) { + exists(DataFlowCall call, int pos | + revPartialPathThroughCallable0(call, mid, pos, ap, config) and + node.asNode().(ArgNode).argumentOf(call, pos) + ) + } +} + +import FlowExploration + +private predicate partialFlow( + PartialPathNode source, PartialPathNode node, Configuration configuration +) { + source.getConfiguration() = configuration and + source.isFwdSource() and + node = source.getASuccessor+() +} + +private predicate revPartialFlow( + PartialPathNode node, PartialPathNode sink, Configuration configuration +) { + sink.getConfiguration() = configuration and + sink.isRevSink() and + node.getASuccessor+() = sink +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll new file mode 100644 index 00000000000..42d7e89f20b --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll @@ -0,0 +1,4687 @@ +/** + * Provides an implementation of global (interprocedural) data flow. This file + * re-exports the local (intraprocedural) data flow analysis from + * `DataFlowImplSpecific::Public` and adds a global analysis, mainly exposed + * through the `Configuration` class. This file exists in several identical + * copies, allowing queries to use multiple `Configuration` classes that depend + * on each other without introducing mutual recursion among those configurations. + */ + +private import DataFlowImplCommon +private import DataFlowImplSpecific::Private +import DataFlowImplSpecific::Public +import DataFlowImplCommonPublic + +/** + * A configuration of interprocedural data flow analysis. This defines + * sources, sinks, and any other configurable aspect of the analysis. Each + * use of the global data flow library must define its own unique extension + * of this abstract class. To create a configuration, extend this class with + * a subclass whose characteristic predicate is a unique singleton string. + * For example, write + * + * ```ql + * class MyAnalysisConfiguration extends DataFlow::Configuration { + * MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" } + * // Override `isSource` and `isSink`. + * // Optionally override `isBarrier`. + * // Optionally override `isAdditionalFlowStep`. + * } + * ``` + * Conceptually, this defines a graph where the nodes are `DataFlow::Node`s and + * the edges are those data-flow steps that preserve the value of the node + * along with any additional edges defined by `isAdditionalFlowStep`. + * Specifying nodes in `isBarrier` will remove those nodes from the graph, and + * specifying nodes in `isBarrierIn` and/or `isBarrierOut` will remove in-going + * and/or out-going edges from those nodes, respectively. + * + * Then, to query whether there is flow between some `source` and `sink`, + * write + * + * ```ql + * exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink)) + * ``` + * + * Multiple configurations can coexist, but two classes extending + * `DataFlow::Configuration` should never depend on each other. One of them + * should instead depend on a `DataFlow2::Configuration`, a + * `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. + */ +abstract class Configuration extends string { + bindingset[this] + Configuration() { any() } + + /** + * Holds if `source` is a relevant data flow source. + */ + abstract predicate isSource(Node source); + + /** + * Holds if `sink` is a relevant data flow sink. + */ + abstract predicate isSink(Node sink); + + /** + * Holds if data flow through `node` is prohibited. This completely removes + * `node` from the data flow graph. + */ + predicate isBarrier(Node node) { none() } + + /** Holds if data flow into `node` is prohibited. */ + predicate isBarrierIn(Node node) { none() } + + /** Holds if data flow out of `node` is prohibited. */ + predicate isBarrierOut(Node node) { none() } + + /** Holds if data flow through nodes guarded by `guard` is prohibited. */ + predicate isBarrierGuard(BarrierGuard guard) { none() } + + /** + * Holds if the additional flow step from `node1` to `node2` must be taken + * into account in the analysis. + */ + predicate isAdditionalFlowStep(Node node1, Node node2) { none() } + + /** + * Holds if an arbitrary number of implicit read steps of content `c` may be + * taken at `node`. + */ + predicate allowImplicitRead(Node node, Content c) { none() } + + /** + * Gets the virtual dispatch branching limit when calculating field flow. + * This can be overridden to a smaller value to improve performance (a + * value of 0 disables field flow), or a larger value to get more results. + */ + int fieldFlowBranchLimit() { result = 2 } + + /** + * Gets a data flow configuration feature to add restrictions to the set of + * valid flow paths. + * + * - `FeatureHasSourceCallContext`: + * Assume that sources have some existing call context to disallow + * conflicting return-flow directly following the source. + * - `FeatureHasSinkCallContext`: + * Assume that sinks have some existing call context to disallow + * conflicting argument-to-parameter flow directly preceding the sink. + * - `FeatureEqualSourceSinkCallContext`: + * Implies both of the above and additionally ensures that the entire flow + * path preserves the call context. + */ + FlowFeature getAFeature() { none() } + + /** + * Holds if data may flow from `source` to `sink` for this configuration. + */ + predicate hasFlow(Node source, Node sink) { flowsTo(source, sink, this) } + + /** + * Holds if data may flow from `source` to `sink` for this configuration. + * + * The corresponding paths are generated from the end-points and the graph + * included in the module `PathGraph`. + */ + predicate hasFlowPath(PathNode source, PathNode sink) { flowsTo(source, sink, _, _, this) } + + /** + * Holds if data may flow from some source to `sink` for this configuration. + */ + predicate hasFlowTo(Node sink) { this.hasFlow(_, sink) } + + /** + * Holds if data may flow from some source to `sink` for this configuration. + */ + predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) } + + /** + * Gets the exploration limit for `hasPartialFlow` and `hasPartialFlowRev` + * measured in approximate number of interprocedural steps. + */ + int explorationLimit() { none() } + + /** + * Holds if there is a partial data flow path from `source` to `node`. The + * approximate distance between `node` and the closest source is `dist` and + * is restricted to be less than or equal to `explorationLimit()`. This + * predicate completely disregards sink definitions. + * + * This predicate is intended for data-flow exploration and debugging and may + * perform poorly if the number of sources is too big and/or the exploration + * limit is set too high without using barriers. + * + * This predicate is disabled (has no results) by default. Override + * `explorationLimit()` with a suitable number to enable this predicate. + * + * To use this in a `path-problem` query, import the module `PartialPathGraph`. + */ + final predicate hasPartialFlow(PartialPathNode source, PartialPathNode node, int dist) { + partialFlow(source, node, this) and + dist = node.getSourceDistance() + } + + /** + * Holds if there is a partial data flow path from `node` to `sink`. The + * approximate distance between `node` and the closest sink is `dist` and + * is restricted to be less than or equal to `explorationLimit()`. This + * predicate completely disregards source definitions. + * + * This predicate is intended for data-flow exploration and debugging and may + * perform poorly if the number of sinks is too big and/or the exploration + * limit is set too high without using barriers. + * + * This predicate is disabled (has no results) by default. Override + * `explorationLimit()` with a suitable number to enable this predicate. + * + * To use this in a `path-problem` query, import the module `PartialPathGraph`. + * + * Note that reverse flow has slightly lower precision than the corresponding + * forward flow, as reverse flow disregards type pruning among other features. + */ + final predicate hasPartialFlowRev(PartialPathNode node, PartialPathNode sink, int dist) { + revPartialFlow(node, sink, this) and + dist = node.getSinkDistance() + } +} + +/** + * This class exists to prevent mutual recursion between the user-overridden + * member predicates of `Configuration` and the rest of the data-flow library. + * Good performance cannot be guaranteed in the presence of such recursion, so + * it should be replaced by using more than one copy of the data flow library. + */ +abstract private class ConfigurationRecursionPrevention extends Configuration { + bindingset[this] + ConfigurationRecursionPrevention() { any() } + + override predicate hasFlow(Node source, Node sink) { + strictcount(Node n | this.isSource(n)) < 0 + or + strictcount(Node n | this.isSink(n)) < 0 + or + strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0 + or + super.hasFlow(source, sink) + } +} + +private newtype TNodeEx = + TNodeNormal(Node n) or + TNodeImplicitRead(Node n, boolean hasRead) { + any(Configuration c).allowImplicitRead(n, _) and hasRead = [false, true] + } + +private class NodeEx extends TNodeEx { + string toString() { + result = this.asNode().toString() + or + exists(Node n | this.isImplicitReadNode(n, _) | result = n.toString() + " [Ext]") + } + + Node asNode() { this = TNodeNormal(result) } + + predicate isImplicitReadNode(Node n, boolean hasRead) { this = TNodeImplicitRead(n, hasRead) } + + Node projectToNode() { this = TNodeNormal(result) or this = TNodeImplicitRead(result, _) } + + pragma[nomagic] + private DataFlowCallable getEnclosingCallable0() { + nodeEnclosingCallable(this.projectToNode(), result) + } + + pragma[inline] + DataFlowCallable getEnclosingCallable() { + pragma[only_bind_out](this).getEnclosingCallable0() = pragma[only_bind_into](result) + } + + pragma[nomagic] + private DataFlowType getDataFlowType0() { nodeDataFlowType(this.asNode(), result) } + + pragma[inline] + DataFlowType getDataFlowType() { + pragma[only_bind_out](this).getDataFlowType0() = pragma[only_bind_into](result) + } + + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.projectToNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +private class ArgNodeEx extends NodeEx { + ArgNodeEx() { this.asNode() instanceof ArgNode } +} + +private class ParamNodeEx extends NodeEx { + ParamNodeEx() { this.asNode() instanceof ParamNode } + + predicate isParameterOf(DataFlowCallable c, int i) { + this.asNode().(ParamNode).isParameterOf(c, i) + } + + int getPosition() { this.isParameterOf(_, result) } + + predicate allowParameterReturnInSelf() { allowParameterReturnInSelfCached(this.asNode()) } +} + +private class RetNodeEx extends NodeEx { + RetNodeEx() { this.asNode() instanceof ReturnNodeExt } + + ReturnPosition getReturnPosition() { result = getReturnPosition(this.asNode()) } + + ReturnKindExt getKind() { result = this.asNode().(ReturnNodeExt).getKind() } +} + +private predicate inBarrier(NodeEx node, Configuration config) { + exists(Node n | + node.asNode() = n and + config.isBarrierIn(n) and + config.isSource(n) + ) +} + +private predicate outBarrier(NodeEx node, Configuration config) { + exists(Node n | + node.asNode() = n and + config.isBarrierOut(n) and + config.isSink(n) + ) +} + +pragma[nomagic] +private predicate fullBarrier(NodeEx node, Configuration config) { + exists(Node n | node.asNode() = n | + config.isBarrier(n) + or + config.isBarrierIn(n) and + not config.isSource(n) + or + config.isBarrierOut(n) and + not config.isSink(n) + or + exists(BarrierGuard g | + config.isBarrierGuard(g) and + n = g.getAGuardedNode() + ) + ) +} + +pragma[nomagic] +private predicate sourceNode(NodeEx node, Configuration config) { + config.isSource(node.asNode()) and + not fullBarrier(node, config) +} + +pragma[nomagic] +private predicate sinkNode(NodeEx node, Configuration config) { config.isSink(node.asNode()) } + +/** Provides the relevant barriers for a step from `node1` to `node2`. */ +pragma[inline] +private predicate stepFilter(NodeEx node1, NodeEx node2, Configuration config) { + not outBarrier(node1, config) and + not inBarrier(node2, config) and + not fullBarrier(node1, config) and + not fullBarrier(node2, config) +} + +/** + * Holds if data can flow in one local step from `node1` to `node2`. + */ +private predicate localFlowStep(NodeEx node1, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + simpleLocalFlowStepExt(n1, n2) and + stepFilter(node1, node2, config) + ) + or + exists(Node n | + config.allowImplicitRead(n, _) and + node1.asNode() = n and + node2.isImplicitReadNode(n, false) and + not fullBarrier(node1, config) + ) +} + +/** + * Holds if the additional step from `node1` to `node2` does not jump between callables. + */ +private predicate additionalLocalFlowStep(NodeEx node1, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + config.isAdditionalFlowStep(n1, n2) and + getNodeEnclosingCallable(n1) = getNodeEnclosingCallable(n2) and + stepFilter(node1, node2, config) + ) + or + exists(Node n | + config.allowImplicitRead(n, _) and + node1.isImplicitReadNode(n, true) and + node2.asNode() = n and + not fullBarrier(node2, config) + ) +} + +/** + * Holds if data can flow from `node1` to `node2` in a way that discards call contexts. + */ +private predicate jumpStep(NodeEx node1, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + jumpStepCached(n1, n2) and + stepFilter(node1, node2, config) and + not config.getAFeature() instanceof FeatureEqualSourceSinkCallContext + ) +} + +/** + * Holds if the additional step from `node1` to `node2` jumps between callables. + */ +private predicate additionalJumpStep(NodeEx node1, NodeEx node2, Configuration config) { + exists(Node n1, Node n2 | + node1.asNode() = n1 and + node2.asNode() = n2 and + config.isAdditionalFlowStep(n1, n2) and + getNodeEnclosingCallable(n1) != getNodeEnclosingCallable(n2) and + stepFilter(node1, node2, config) and + not config.getAFeature() instanceof FeatureEqualSourceSinkCallContext + ) +} + +private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { + read(node1.asNode(), c, node2.asNode()) and + stepFilter(node1, node2, config) + or + exists(Node n | + node2.isImplicitReadNode(n, true) and + node1.isImplicitReadNode(n, _) and + config.allowImplicitRead(n, c) + ) +} + +private predicate store( + NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config +) { + store(node1.asNode(), tc, node2.asNode(), contentType) and + read(_, tc.getContent(), _, config) and + stepFilter(node1, node2, config) +} + +pragma[nomagic] +private predicate viableReturnPosOutEx(DataFlowCall call, ReturnPosition pos, NodeEx out) { + viableReturnPosOut(call, pos, out.asNode()) +} + +pragma[nomagic] +private predicate viableParamArgEx(DataFlowCall call, ParamNodeEx p, ArgNodeEx arg) { + viableParamArg(call, p.asNode(), arg.asNode()) +} + +/** + * Holds if field flow should be used for the given configuration. + */ +private predicate useFieldFlow(Configuration config) { config.fieldFlowBranchLimit() >= 1 } + +private predicate hasSourceCallCtx(Configuration config) { + exists(FlowFeature feature | feature = config.getAFeature() | + feature instanceof FeatureHasSourceCallContext or + feature instanceof FeatureEqualSourceSinkCallContext + ) +} + +private predicate hasSinkCallCtx(Configuration config) { + exists(FlowFeature feature | feature = config.getAFeature() | + feature instanceof FeatureHasSinkCallContext or + feature instanceof FeatureEqualSourceSinkCallContext + ) +} + +private module Stage1 { + class ApApprox = Unit; + + class Ap = Unit; + + class ApOption = Unit; + + class Cc = boolean; + + /* Begin: Stage 1 logic. */ + /** + * Holds if `node` is reachable from a source in the configuration `config`. + * + * The Boolean `cc` records whether the node is reached through an + * argument in a call. + */ + predicate fwdFlow(NodeEx node, Cc cc, Configuration config) { + sourceNode(node, config) and + if hasSourceCallCtx(config) then cc = true else cc = false + or + exists(NodeEx mid | + fwdFlow(mid, cc, config) and + localFlowStep(mid, node, config) + ) + or + exists(NodeEx mid | + fwdFlow(mid, cc, config) and + additionalLocalFlowStep(mid, node, config) + ) + or + exists(NodeEx mid | + fwdFlow(mid, _, config) and + jumpStep(mid, node, config) and + cc = false + ) + or + exists(NodeEx mid | + fwdFlow(mid, _, config) and + additionalJumpStep(mid, node, config) and + cc = false + ) + or + // store + exists(NodeEx mid | + useFieldFlow(config) and + fwdFlow(mid, cc, config) and + store(mid, _, node, _, config) + ) + or + // read + exists(Content c | + fwdFlowRead(c, node, cc, config) and + fwdFlowConsCand(c, config) + ) + or + // flow into a callable + exists(NodeEx arg | + fwdFlow(arg, _, config) and + viableParamArgEx(_, node, arg) and + cc = true and + not fullBarrier(node, config) + ) + or + // flow out of a callable + exists(DataFlowCall call | + fwdFlowOut(call, node, false, config) and + cc = false + or + fwdFlowOutFromArg(call, node, config) and + fwdFlowIsEntered(call, cc, config) + ) + } + + private predicate fwdFlow(NodeEx node, Configuration config) { fwdFlow(node, _, config) } + + pragma[nomagic] + private predicate fwdFlowRead(Content c, NodeEx node, Cc cc, Configuration config) { + exists(NodeEx mid | + fwdFlow(mid, cc, config) and + read(mid, c, node, config) + ) + } + + /** + * Holds if `c` is the target of a store in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowConsCand(Content c, Configuration config) { + exists(NodeEx mid, NodeEx node, TypedContent tc | + not fullBarrier(node, config) and + useFieldFlow(config) and + fwdFlow(mid, _, config) and + store(mid, tc, node, _, config) and + c = tc.getContent() + ) + } + + pragma[nomagic] + private predicate fwdFlowReturnPosition(ReturnPosition pos, Cc cc, Configuration config) { + exists(RetNodeEx ret | + fwdFlow(ret, cc, config) and + ret.getReturnPosition() = pos + ) + } + + pragma[nomagic] + private predicate fwdFlowOut(DataFlowCall call, NodeEx out, Cc cc, Configuration config) { + exists(ReturnPosition pos | + fwdFlowReturnPosition(pos, cc, config) and + viableReturnPosOutEx(call, pos, out) and + not fullBarrier(out, config) + ) + } + + pragma[nomagic] + private predicate fwdFlowOutFromArg(DataFlowCall call, NodeEx out, Configuration config) { + fwdFlowOut(call, out, true, config) + } + + /** + * Holds if an argument to `call` is reached in the flow covered by `fwdFlow`. + */ + pragma[nomagic] + private predicate fwdFlowIsEntered(DataFlowCall call, Cc cc, Configuration config) { + exists(ArgNodeEx arg | + fwdFlow(arg, cc, config) and + viableParamArgEx(call, _, arg) + ) + } + + /** + * Holds if `node` is part of a path from a source to a sink in the + * configuration `config`. + * + * The Boolean `toReturn` records whether the node must be returned from + * the enclosing callable in order to reach a sink. + */ + pragma[nomagic] + predicate revFlow(NodeEx node, boolean toReturn, Configuration config) { + revFlow0(node, toReturn, config) and + fwdFlow(node, config) + } + + pragma[nomagic] + private predicate revFlow0(NodeEx node, boolean toReturn, Configuration config) { + fwdFlow(node, config) and + sinkNode(node, config) and + if hasSinkCallCtx(config) then toReturn = true else toReturn = false + or + exists(NodeEx mid | + localFlowStep(node, mid, config) and + revFlow(mid, toReturn, config) + ) + or + exists(NodeEx mid | + additionalLocalFlowStep(node, mid, config) and + revFlow(mid, toReturn, config) + ) + or + exists(NodeEx mid | + jumpStep(node, mid, config) and + revFlow(mid, _, config) and + toReturn = false + ) + or + exists(NodeEx mid | + additionalJumpStep(node, mid, config) and + revFlow(mid, _, config) and + toReturn = false + ) + or + // store + exists(Content c | + revFlowStore(c, node, toReturn, config) and + revFlowConsCand(c, config) + ) + or + // read + exists(NodeEx mid, Content c | + read(node, c, mid, config) and + fwdFlowConsCand(c, pragma[only_bind_into](config)) and + revFlow(mid, toReturn, pragma[only_bind_into](config)) + ) + or + // flow into a callable + exists(DataFlowCall call | + revFlowIn(call, node, false, config) and + toReturn = false + or + revFlowInToReturn(call, node, config) and + revFlowIsReturned(call, toReturn, config) + ) + or + // flow out of a callable + exists(ReturnPosition pos | + revFlowOut(pos, config) and + node.(RetNodeEx).getReturnPosition() = pos and + toReturn = true + ) + } + + /** + * Holds if `c` is the target of a read in the flow covered by `revFlow`. + */ + pragma[nomagic] + private predicate revFlowConsCand(Content c, Configuration config) { + exists(NodeEx mid, NodeEx node | + fwdFlow(node, pragma[only_bind_into](config)) and + read(node, c, mid, config) and + fwdFlowConsCand(c, pragma[only_bind_into](config)) and + revFlow(pragma[only_bind_into](mid), _, pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate revFlowStore(Content c, NodeEx node, boolean toReturn, Configuration config) { + exists(NodeEx mid, TypedContent tc | + revFlow(mid, toReturn, pragma[only_bind_into](config)) and + fwdFlowConsCand(c, pragma[only_bind_into](config)) and + store(node, tc, mid, _, config) and + c = tc.getContent() + ) + } + + /** + * Holds if `c` is the target of both a read and a store in the flow covered + * by `revFlow`. + */ + private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + revFlowConsCand(c, conf) and + revFlowStore(c, _, _, conf) + } + + pragma[nomagic] + predicate viableReturnPosOutNodeCandFwd1( + DataFlowCall call, ReturnPosition pos, NodeEx out, Configuration config + ) { + fwdFlowReturnPosition(pos, _, config) and + viableReturnPosOutEx(call, pos, out) + } + + pragma[nomagic] + private predicate revFlowOut(ReturnPosition pos, Configuration config) { + exists(DataFlowCall call, NodeEx out | + revFlow(out, _, config) and + viableReturnPosOutNodeCandFwd1(call, pos, out, config) + ) + } + + pragma[nomagic] + predicate viableParamArgNodeCandFwd1( + DataFlowCall call, ParamNodeEx p, ArgNodeEx arg, Configuration config + ) { + viableParamArgEx(call, p, arg) and + fwdFlow(arg, config) + } + + pragma[nomagic] + private predicate revFlowIn( + DataFlowCall call, ArgNodeEx arg, boolean toReturn, Configuration config + ) { + exists(ParamNodeEx p | + revFlow(p, toReturn, config) and + viableParamArgNodeCandFwd1(call, p, arg, config) + ) + } + + pragma[nomagic] + private predicate revFlowInToReturn(DataFlowCall call, ArgNodeEx arg, Configuration config) { + revFlowIn(call, arg, true, config) + } + + /** + * Holds if an output from `call` is reached in the flow covered by `revFlow` + * and data might flow through the target callable resulting in reverse flow + * reaching an argument of `call`. + */ + pragma[nomagic] + private predicate revFlowIsReturned(DataFlowCall call, boolean toReturn, Configuration config) { + exists(NodeEx out | + revFlow(out, toReturn, config) and + fwdFlowOutFromArg(call, out, config) + ) + } + + pragma[nomagic] + predicate storeStepCand( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, DataFlowType contentType, + Configuration config + ) { + exists(Content c | + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + revFlow(node2, pragma[only_bind_into](config)) and + store(node1, tc, node2, contentType, config) and + c = tc.getContent() and + exists(ap1) + ) + } + + pragma[nomagic] + predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + revFlow(n2, pragma[only_bind_into](config)) and + read(n1, c, n2, pragma[only_bind_into](config)) + } + + pragma[nomagic] + predicate revFlow(NodeEx node, Configuration config) { revFlow(node, _, config) } + + predicate revFlow(NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config) { + revFlow(node, toReturn, config) and exists(returnAp) and exists(ap) + } + + private predicate throughFlowNodeCand(NodeEx node, Configuration config) { + revFlow(node, true, config) and + fwdFlow(node, true, config) and + not inBarrier(node, config) and + not outBarrier(node, config) + } + + /** Holds if flow may return from `callable`. */ + pragma[nomagic] + private predicate returnFlowCallableNodeCand( + DataFlowCallable callable, ReturnKindExt kind, Configuration config + ) { + exists(RetNodeEx ret | + throughFlowNodeCand(ret, config) and + callable = ret.getEnclosingCallable() and + kind = ret.getKind() + ) + } + + /** + * Holds if flow may enter through `p` and reach a return node making `p` a + * candidate for the origin of a summary. + */ + pragma[nomagic] + predicate parameterMayFlowThrough(ParamNodeEx p, DataFlowCallable c, Ap ap, Configuration config) { + exists(ReturnKindExt kind | + throughFlowNodeCand(p, config) and + returnFlowCallableNodeCand(c, kind, config) and + p.getEnclosingCallable() = c and + exists(ap) and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = p.getPosition() + or + p.allowParameterReturnInSelf() + ) + ) + } + + pragma[nomagic] + predicate callMayFlowThroughRev(DataFlowCall call, Configuration config) { + exists(ArgNodeEx arg, boolean toReturn | + revFlow(arg, toReturn, config) and + revFlowInToReturn(call, arg, config) and + revFlowIsReturned(call, toReturn, config) + ) + } + + predicate stats(boolean fwd, int nodes, int fields, int conscand, int tuples, Configuration config) { + fwd = true and + nodes = count(NodeEx node | fwdFlow(node, config)) and + fields = count(Content f0 | fwdFlowConsCand(f0, config)) and + conscand = -1 and + tuples = count(NodeEx n, boolean b | fwdFlow(n, b, config)) + or + fwd = false and + nodes = count(NodeEx node | revFlow(node, _, config)) and + fields = count(Content f0 | revFlowConsCand(f0, config)) and + conscand = -1 and + tuples = count(NodeEx n, boolean b | revFlow(n, b, config)) + } + /* End: Stage 1 logic. */ +} + +pragma[noinline] +private predicate localFlowStepNodeCand1(NodeEx node1, NodeEx node2, Configuration config) { + Stage1::revFlow(node2, config) and + localFlowStep(node1, node2, config) +} + +pragma[noinline] +private predicate additionalLocalFlowStepNodeCand1(NodeEx node1, NodeEx node2, Configuration config) { + Stage1::revFlow(node2, config) and + additionalLocalFlowStep(node1, node2, config) +} + +pragma[nomagic] +private predicate viableReturnPosOutNodeCand1( + DataFlowCall call, ReturnPosition pos, NodeEx out, Configuration config +) { + Stage1::revFlow(out, config) and + Stage1::viableReturnPosOutNodeCandFwd1(call, pos, out, config) +} + +/** + * Holds if data can flow out of `call` from `ret` to `out`, either + * through a `ReturnNode` or through an argument that has been mutated, and + * that this step is part of a path from a source to a sink. + */ +pragma[nomagic] +private predicate flowOutOfCallNodeCand1( + DataFlowCall call, RetNodeEx ret, NodeEx out, Configuration config +) { + viableReturnPosOutNodeCand1(call, ret.getReturnPosition(), out, config) and + Stage1::revFlow(ret, config) and + not outBarrier(ret, config) and + not inBarrier(out, config) +} + +pragma[nomagic] +private predicate viableParamArgNodeCand1( + DataFlowCall call, ParamNodeEx p, ArgNodeEx arg, Configuration config +) { + Stage1::viableParamArgNodeCandFwd1(call, p, arg, config) and + Stage1::revFlow(arg, config) +} + +/** + * Holds if data can flow into `call` and that this step is part of a + * path from a source to a sink. + */ +pragma[nomagic] +private predicate flowIntoCallNodeCand1( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, Configuration config +) { + viableParamArgNodeCand1(call, p, arg, config) and + Stage1::revFlow(p, config) and + not outBarrier(arg, config) and + not inBarrier(p, config) +} + +/** + * Gets the amount of forward branching on the origin of a cross-call path + * edge in the graph of paths between sources and sinks that ignores call + * contexts. + */ +private int branch(NodeEx n1, Configuration conf) { + result = + strictcount(NodeEx n | + flowOutOfCallNodeCand1(_, n1, n, conf) or flowIntoCallNodeCand1(_, n1, n, conf) + ) +} + +/** + * Gets the amount of backward branching on the target of a cross-call path + * edge in the graph of paths between sources and sinks that ignores call + * contexts. + */ +private int join(NodeEx n2, Configuration conf) { + result = + strictcount(NodeEx n | + flowOutOfCallNodeCand1(_, n, n2, conf) or flowIntoCallNodeCand1(_, n, n2, conf) + ) +} + +/** + * Holds if data can flow out of `call` from `ret` to `out`, either + * through a `ReturnNode` or through an argument that has been mutated, and + * that this step is part of a path from a source to a sink. The + * `allowsFieldFlow` flag indicates whether the branching is within the limit + * specified by the configuration. + */ +pragma[nomagic] +private predicate flowOutOfCallNodeCand1( + DataFlowCall call, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, Configuration config +) { + flowOutOfCallNodeCand1(call, ret, out, config) and + exists(int b, int j | + b = branch(ret, config) and + j = join(out, config) and + if b.minimum(j) <= config.fieldFlowBranchLimit() + then allowsFieldFlow = true + else allowsFieldFlow = false + ) +} + +/** + * Holds if data can flow into `call` and that this step is part of a + * path from a source to a sink. The `allowsFieldFlow` flag indicates whether + * the branching is within the limit specified by the configuration. + */ +pragma[nomagic] +private predicate flowIntoCallNodeCand1( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, Configuration config +) { + flowIntoCallNodeCand1(call, arg, p, config) and + exists(int b, int j | + b = branch(arg, config) and + j = join(p, config) and + if b.minimum(j) <= config.fieldFlowBranchLimit() + then allowsFieldFlow = true + else allowsFieldFlow = false + ) +} + +private module Stage2 { + module PrevStage = Stage1; + + class ApApprox = PrevStage::Ap; + + class Ap = boolean; + + class ApNil extends Ap { + ApNil() { this = false } + } + + bindingset[result, ap] + private ApApprox getApprox(Ap ap) { any() } + + private ApNil getApNil(NodeEx node) { PrevStage::revFlow(node, _) and exists(result) } + + bindingset[tc, tail] + private Ap apCons(TypedContent tc, Ap tail) { result = true and exists(tc) and exists(tail) } + + pragma[inline] + private Content getHeadContent(Ap ap) { exists(result) and ap = true } + + class ApOption = BooleanOption; + + ApOption apNone() { result = TBooleanNone() } + + ApOption apSome(Ap ap) { result = TBooleanSome(ap) } + + class Cc = CallContext; + + class CcCall = CallContextCall; + + class CcNoCall = CallContextNoCall; + + Cc ccNone() { result instanceof CallContextAny } + + CcCall ccSomeCall() { result instanceof CallContextSomeCall } + + private class LocalCc = Unit; + + bindingset[call, c, outercc] + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSiteDispatch(call, c) + then result = TSpecificCall(call) + else result = TSomeCall() + } + + bindingset[call, c, innercc] + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } + + bindingset[node, cc, config] + private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } + + private predicate localStep( + NodeEx node1, NodeEx node2, boolean preservesValue, ApNil ap, Configuration config, LocalCc lcc + ) { + ( + preservesValue = true and + localFlowStepNodeCand1(node1, node2, config) + or + preservesValue = false and + additionalLocalFlowStepNodeCand1(node1, node2, config) + ) and + exists(ap) and + exists(lcc) + } + + private predicate flowOutOfCall = flowOutOfCallNodeCand1/5; + + private predicate flowIntoCall = flowIntoCallNodeCand1/5; + + bindingset[node, ap] + private predicate filter(NodeEx node, Ap ap) { any() } + + bindingset[ap, contentType] + private predicate typecheckStore(Ap ap, DataFlowType contentType) { any() } + + /* Begin: Stage 2 logic. */ + private predicate flowCand(NodeEx node, ApApprox apa, Configuration config) { + PrevStage::revFlow(node, _, _, apa, config) + } + + bindingset[result, apa] + private ApApprox unbindApa(ApApprox apa) { + exists(ApApprox apa0 | + apa = pragma[only_bind_into](apa0) and result = pragma[only_bind_into](apa0) + ) + } + + pragma[nomagic] + private predicate flowThroughOutOfCall( + DataFlowCall call, CcCall ccc, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, + Configuration config + ) { + flowOutOfCall(call, ret, out, allowsFieldFlow, pragma[only_bind_into](config)) and + PrevStage::callMayFlowThroughRev(call, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(_, ret.getEnclosingCallable(), _, + pragma[only_bind_into](config)) and + ccc.matchesCall(call) + } + + /** + * Holds if `node` is reachable with access path `ap` from a source in the + * configuration `config`. + * + * The call context `cc` records whether the node is reached through an + * argument in a call, and if so, `argAp` records the access path of that + * argument. + */ + pragma[nomagic] + predicate fwdFlow(NodeEx node, Cc cc, ApOption argAp, Ap ap, Configuration config) { + fwdFlow0(node, cc, argAp, ap, config) and + flowCand(node, unbindApa(getApprox(ap)), config) and + filter(node, ap) + } + + pragma[nomagic] + private predicate fwdFlow0(NodeEx node, Cc cc, ApOption argAp, Ap ap, Configuration config) { + flowCand(node, _, config) and + sourceNode(node, config) and + (if hasSourceCallCtx(config) then cc = ccSomeCall() else cc = ccNone()) and + argAp = apNone() and + ap = getApNil(node) + or + exists(NodeEx mid, Ap ap0, LocalCc localCc | + fwdFlow(mid, cc, argAp, ap0, config) and + localCc = getLocalCc(mid, cc, config) + | + localStep(mid, node, true, _, config, localCc) and + ap = ap0 + or + localStep(mid, node, false, ap, config, localCc) and + ap0 instanceof ApNil + ) + or + exists(NodeEx mid | + fwdFlow(mid, _, _, ap, pragma[only_bind_into](config)) and + flowCand(node, _, pragma[only_bind_into](config)) and + jumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(mid, _, _, nil, pragma[only_bind_into](config)) and + flowCand(node, _, pragma[only_bind_into](config)) and + additionalJumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() and + ap = getApNil(node) + ) + or + // store + exists(TypedContent tc, Ap ap0 | + fwdFlowStore(_, ap0, tc, node, cc, argAp, config) and + ap = apCons(tc, ap0) + ) + or + // read + exists(Ap ap0, Content c | + fwdFlowRead(ap0, c, _, node, cc, argAp, config) and + fwdFlowConsCand(ap0, c, ap, config) + ) + or + // flow into a callable + exists(ApApprox apa | + fwdFlowIn(_, node, _, cc, _, ap, config) and + apa = getApprox(ap) and + if PrevStage::parameterMayFlowThrough(node, _, apa, config) + then argAp = apSome(ap) + else argAp = apNone() + ) + or + // flow out of a callable + fwdFlowOutNotFromArg(node, cc, argAp, ap, config) + or + exists(DataFlowCall call, Ap argAp0 | + fwdFlowOutFromArg(call, node, argAp0, ap, config) and + fwdFlowIsEntered(call, cc, argAp, argAp0, config) + ) + } + + pragma[nomagic] + private predicate fwdFlowStore( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Cc cc, ApOption argAp, Configuration config + ) { + exists(DataFlowType contentType | + fwdFlow(node1, cc, argAp, ap1, config) and + PrevStage::storeStepCand(node1, unbindApa(getApprox(ap1)), tc, node2, contentType, config) and + typecheckStore(ap1, contentType) + ) + } + + /** + * Holds if forward flow with access path `tail` reaches a store of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate fwdFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(TypedContent tc | + fwdFlowStore(_, tail, tc, _, _, _, config) and + tc.getContent() = c and + cons = apCons(tc, tail) + ) + } + + pragma[nomagic] + private predicate fwdFlowRead( + Ap ap, Content c, NodeEx node1, NodeEx node2, Cc cc, ApOption argAp, Configuration config + ) { + fwdFlow(node1, cc, argAp, ap, config) and + PrevStage::readStepCand(node1, c, node2, config) and + getHeadContent(ap) = c + } + + pragma[nomagic] + private predicate fwdFlowIn( + DataFlowCall call, ParamNodeEx p, Cc outercc, Cc innercc, ApOption argAp, Ap ap, + Configuration config + ) { + exists(ArgNodeEx arg, boolean allowsFieldFlow | + fwdFlow(arg, outercc, argAp, ap, config) and + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + innercc = getCallContextCall(call, p.getEnclosingCallable(), outercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutNotFromArg( + NodeEx out, Cc ccOut, ApOption argAp, Ap ap, Configuration config + ) { + exists( + DataFlowCall call, RetNodeEx ret, boolean allowsFieldFlow, CcNoCall innercc, + DataFlowCallable inner + | + fwdFlow(ret, innercc, argAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + inner = ret.getEnclosingCallable() and + ccOut = getCallContextReturn(inner, call, innercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutFromArg( + DataFlowCall call, NodeEx out, Ap argAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, boolean allowsFieldFlow, CcCall ccc | + fwdFlow(ret, ccc, apSome(argAp), ap, config) and + flowThroughOutOfCall(call, ccc, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an argument to `call` is reached in the flow covered by `fwdFlow` + * and data might flow through the target callable and back out at `call`. + */ + pragma[nomagic] + private predicate fwdFlowIsEntered( + DataFlowCall call, Cc cc, ApOption argAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p | + fwdFlowIn(call, p, cc, _, argAp, ap, config) and + PrevStage::parameterMayFlowThrough(p, _, unbindApa(getApprox(ap)), config) + ) + } + + pragma[nomagic] + private predicate storeStepFwd( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Ap ap2, Configuration config + ) { + fwdFlowStore(node1, ap1, tc, node2, _, _, config) and + ap2 = apCons(tc, ap1) and + fwdFlowRead(ap2, tc.getContent(), _, _, _, _, config) + } + + private predicate readStepFwd( + NodeEx n1, Ap ap1, Content c, NodeEx n2, Ap ap2, Configuration config + ) { + fwdFlowRead(ap1, c, n1, n2, _, _, config) and + fwdFlowConsCand(ap1, c, ap2, config) + } + + pragma[nomagic] + private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { + exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | + fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, + pragma[only_bind_into](config)) and + fwdFlowOutFromArg(call, out, argAp0, ap, config) and + fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc), + pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0), + pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate flowThroughIntoCall( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, Configuration config + ) { + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + fwdFlow(arg, _, _, _, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(p, _, _, pragma[only_bind_into](config)) and + callMayFlowThroughFwd(call, pragma[only_bind_into](config)) + } + + pragma[nomagic] + private predicate returnNodeMayFlowThrough(RetNodeEx ret, Ap ap, Configuration config) { + fwdFlow(ret, any(CcCall ccc), apSome(_), ap, config) + } + + /** + * Holds if `node` with access path `ap` is part of a path from a source to a + * sink in the configuration `config`. + * + * The Boolean `toReturn` records whether the node must be returned from the + * enclosing callable in order to reach a sink, and if so, `returnAp` records + * the access path of the returned value. + */ + pragma[nomagic] + predicate revFlow(NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config) { + revFlow0(node, toReturn, returnAp, ap, config) and + fwdFlow(node, _, _, ap, config) + } + + pragma[nomagic] + private predicate revFlow0( + NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + fwdFlow(node, _, _, ap, config) and + sinkNode(node, config) and + (if hasSinkCallCtx(config) then toReturn = true else toReturn = false) and + returnAp = apNone() and + ap instanceof ApNil + or + exists(NodeEx mid | + localStep(node, mid, true, _, config, _) and + revFlow(mid, toReturn, returnAp, ap, config) + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, ap, pragma[only_bind_into](config)) and + localStep(node, mid, false, _, config, _) and + revFlow(mid, toReturn, returnAp, nil, pragma[only_bind_into](config)) and + ap instanceof ApNil + ) + or + exists(NodeEx mid | + jumpStep(node, mid, config) and + revFlow(mid, _, _, ap, config) and + toReturn = false and + returnAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, ap, pragma[only_bind_into](config)) and + additionalJumpStep(node, mid, config) and + revFlow(pragma[only_bind_into](mid), _, _, nil, pragma[only_bind_into](config)) and + toReturn = false and + returnAp = apNone() and + ap instanceof ApNil + ) + or + // store + exists(Ap ap0, Content c | + revFlowStore(ap0, c, ap, node, _, _, toReturn, returnAp, config) and + revFlowConsCand(ap0, c, ap, config) + ) + or + // read + exists(NodeEx mid, Ap ap0 | + revFlow(mid, toReturn, returnAp, ap0, config) and + readStepFwd(node, ap, _, mid, ap0, config) + ) + or + // flow into a callable + revFlowInNotToReturn(node, returnAp, ap, config) and + toReturn = false + or + exists(DataFlowCall call, Ap returnAp0 | + revFlowInToReturn(call, node, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + or + // flow out of a callable + revFlowOut(_, node, _, _, ap, config) and + toReturn = true and + if returnNodeMayFlowThrough(node, ap, config) + then returnAp = apSome(ap) + else returnAp = apNone() + } + + pragma[nomagic] + private predicate revFlowStore( + Ap ap0, Content c, Ap ap, NodeEx node, TypedContent tc, NodeEx mid, boolean toReturn, + ApOption returnAp, Configuration config + ) { + revFlow(mid, toReturn, returnAp, ap0, config) and + storeStepFwd(node, ap, tc, mid, ap0, config) and + tc.getContent() = c + } + + /** + * Holds if reverse flow with access path `tail` reaches a read of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate revFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(NodeEx mid, Ap tail0 | + revFlow(mid, _, _, tail, config) and + tail = pragma[only_bind_into](tail0) and + readStepFwd(_, cons, c, mid, tail0, config) + ) + } + + pragma[nomagic] + private predicate revFlowOut( + DataFlowCall call, RetNodeEx ret, boolean toReturn, ApOption returnAp, Ap ap, + Configuration config + ) { + exists(NodeEx out, boolean allowsFieldFlow | + revFlow(out, toReturn, returnAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInNotToReturn( + ArgNodeEx arg, ApOption returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, false, returnAp, ap, config) and + flowIntoCall(_, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInToReturn( + DataFlowCall call, ArgNodeEx arg, Ap returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, true, apSome(returnAp), ap, config) and + flowThroughIntoCall(call, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an output from `call` is reached in the flow covered by `revFlow` + * and data might flow through the target callable resulting in reverse flow + * reaching an argument of `call`. + */ + pragma[nomagic] + private predicate revFlowIsReturned( + DataFlowCall call, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, CcCall ccc | + revFlowOut(call, ret, toReturn, returnAp, ap, config) and + fwdFlow(ret, ccc, apSome(_), ap, config) and + ccc.matchesCall(call) + ) + } + + pragma[nomagic] + predicate storeStepCand( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, DataFlowType contentType, + Configuration config + ) { + exists(Ap ap2, Content c | + store(node1, tc, node2, contentType, config) and + revFlowStore(ap2, c, ap1, node1, tc, node2, _, _, config) and + revFlowConsCand(ap2, c, ap1, config) + ) + } + + predicate readStepCand(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(Ap ap1, Ap ap2 | + revFlow(node2, _, _, pragma[only_bind_into](ap2), pragma[only_bind_into](config)) and + readStepFwd(node1, ap1, c, node2, ap2, config) and + revFlowStore(ap1, c, pragma[only_bind_into](ap2), _, _, _, _, _, + pragma[only_bind_into](config)) + ) + } + + predicate revFlow(NodeEx node, Configuration config) { revFlow(node, _, _, _, config) } + + private predicate fwdConsCand(TypedContent tc, Ap ap, Configuration config) { + storeStepFwd(_, ap, tc, _, _, config) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + storeStepCand(_, ap, tc, _, _, config) + } + + pragma[noinline] + private predicate parameterFlow( + ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config + ) { + revFlow(p, true, apSome(ap0), ap, config) and + c = p.getEnclosingCallable() + } + + predicate parameterMayFlowThrough(ParamNodeEx p, DataFlowCallable c, Ap ap, Configuration config) { + exists(RetNodeEx ret, Ap ap0, ReturnKindExt kind, int pos | + parameterFlow(p, ap, ap0, c, config) and + c = ret.getEnclosingCallable() and + revFlow(pragma[only_bind_into](ret), true, apSome(_), pragma[only_bind_into](ap0), + pragma[only_bind_into](config)) and + fwdFlow(ret, any(CcCall ccc), apSome(ap), ap0, config) and + kind = ret.getKind() and + p.getPosition() = pos and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = pos + or + p.allowParameterReturnInSelf() + ) + ) + } + + pragma[nomagic] + predicate callMayFlowThroughRev(DataFlowCall call, Configuration config) { + exists(Ap returnAp0, ArgNodeEx arg, boolean toReturn, ApOption returnAp, Ap ap | + revFlow(arg, toReturn, returnAp, ap, config) and + revFlowInToReturn(call, arg, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + } + + predicate stats(boolean fwd, int nodes, int fields, int conscand, int tuples, Configuration config) { + fwd = true and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, config)) and + fields = count(TypedContent f0 | fwdConsCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | fwdConsCand(f0, ap, config)) and + tuples = count(NodeEx n, Cc cc, ApOption argAp, Ap ap | fwdFlow(n, cc, argAp, ap, config)) + or + fwd = false and + nodes = count(NodeEx node | revFlow(node, _, _, _, config)) and + fields = count(TypedContent f0 | consCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | consCand(f0, ap, config)) and + tuples = count(NodeEx n, boolean b, ApOption retAp, Ap ap | revFlow(n, b, retAp, ap, config)) + } + /* End: Stage 2 logic. */ +} + +pragma[nomagic] +private predicate flowOutOfCallNodeCand2( + DataFlowCall call, RetNodeEx node1, NodeEx node2, boolean allowsFieldFlow, Configuration config +) { + flowOutOfCallNodeCand1(call, node1, node2, allowsFieldFlow, config) and + Stage2::revFlow(node2, pragma[only_bind_into](config)) and + Stage2::revFlow(node1, pragma[only_bind_into](config)) +} + +pragma[nomagic] +private predicate flowIntoCallNodeCand2( + DataFlowCall call, ArgNodeEx node1, ParamNodeEx node2, boolean allowsFieldFlow, + Configuration config +) { + flowIntoCallNodeCand1(call, node1, node2, allowsFieldFlow, config) and + Stage2::revFlow(node2, pragma[only_bind_into](config)) and + Stage2::revFlow(node1, pragma[only_bind_into](config)) +} + +private module LocalFlowBigStep { + /** + * A node where some checking is required, and hence the big-step relation + * is not allowed to step over. + */ + private class FlowCheckNode extends NodeEx { + FlowCheckNode() { + castNode(this.asNode()) or + clearsContentCached(this.asNode(), _) + } + } + + /** + * Holds if `node` can be the first node in a maximal subsequence of local + * flow steps in a dataflow path. + */ + predicate localFlowEntry(NodeEx node, Configuration config) { + Stage2::revFlow(node, config) and + ( + sourceNode(node, config) or + jumpStep(_, node, config) or + additionalJumpStep(_, node, config) or + node instanceof ParamNodeEx or + node.asNode() instanceof OutNodeExt or + store(_, _, node, _, config) or + read(_, _, node, config) or + node instanceof FlowCheckNode + ) + } + + /** + * Holds if `node` can be the last node in a maximal subsequence of local + * flow steps in a dataflow path. + */ + private predicate localFlowExit(NodeEx node, Configuration config) { + exists(NodeEx next | Stage2::revFlow(next, config) | + jumpStep(node, next, config) or + additionalJumpStep(node, next, config) or + flowIntoCallNodeCand1(_, node, next, config) or + flowOutOfCallNodeCand1(_, node, next, config) or + store(node, _, next, _, config) or + read(node, _, next, config) + ) + or + node instanceof FlowCheckNode + or + sinkNode(node, config) + } + + pragma[noinline] + private predicate additionalLocalFlowStepNodeCand2( + NodeEx node1, NodeEx node2, Configuration config + ) { + additionalLocalFlowStepNodeCand1(node1, node2, config) and + Stage2::revFlow(node1, _, _, false, pragma[only_bind_into](config)) and + Stage2::revFlow(node2, _, _, false, pragma[only_bind_into](config)) + } + + /** + * Holds if the local path from `node1` to `node2` is a prefix of a maximal + * subsequence of local flow steps in a dataflow path. + * + * This is the transitive closure of `[additional]localFlowStep` beginning + * at `localFlowEntry`. + */ + pragma[nomagic] + private predicate localFlowStepPlus( + NodeEx node1, NodeEx node2, boolean preservesValue, DataFlowType t, Configuration config, + LocalCallContext cc + ) { + not isUnreachableInCallCached(node2.asNode(), cc.(LocalCallContextSpecificCall).getCall()) and + ( + localFlowEntry(node1, pragma[only_bind_into](config)) and + ( + localFlowStepNodeCand1(node1, node2, config) and + preservesValue = true and + t = node1.getDataFlowType() // irrelevant dummy value + or + additionalLocalFlowStepNodeCand2(node1, node2, config) and + preservesValue = false and + t = node2.getDataFlowType() + ) and + node1 != node2 and + cc.relevantFor(node1.getEnclosingCallable()) and + not isUnreachableInCallCached(node1.asNode(), cc.(LocalCallContextSpecificCall).getCall()) and + Stage2::revFlow(node2, pragma[only_bind_into](config)) + or + exists(NodeEx mid | + localFlowStepPlus(node1, mid, preservesValue, t, pragma[only_bind_into](config), cc) and + localFlowStepNodeCand1(mid, node2, config) and + not mid instanceof FlowCheckNode and + Stage2::revFlow(node2, pragma[only_bind_into](config)) + ) + or + exists(NodeEx mid | + localFlowStepPlus(node1, mid, _, _, pragma[only_bind_into](config), cc) and + additionalLocalFlowStepNodeCand2(mid, node2, config) and + not mid instanceof FlowCheckNode and + preservesValue = false and + t = node2.getDataFlowType() and + Stage2::revFlow(node2, pragma[only_bind_into](config)) + ) + ) + } + + /** + * Holds if `node1` can step to `node2` in one or more local steps and this + * path can occur as a maximal subsequence of local steps in a dataflow path. + */ + pragma[nomagic] + predicate localFlowBigStep( + NodeEx node1, NodeEx node2, boolean preservesValue, AccessPathFrontNil apf, + Configuration config, LocalCallContext callContext + ) { + localFlowStepPlus(node1, node2, preservesValue, apf.getType(), config, callContext) and + localFlowExit(node2, config) + } +} + +private import LocalFlowBigStep + +private module Stage3 { + module PrevStage = Stage2; + + class ApApprox = PrevStage::Ap; + + class Ap = AccessPathFront; + + class ApNil = AccessPathFrontNil; + + private ApApprox getApprox(Ap ap) { result = ap.toBoolNonEmpty() } + + private ApNil getApNil(NodeEx node) { + PrevStage::revFlow(node, _) and result = TFrontNil(node.getDataFlowType()) + } + + bindingset[tc, tail] + private Ap apCons(TypedContent tc, Ap tail) { result.getHead() = tc and exists(tail) } + + pragma[noinline] + private Content getHeadContent(Ap ap) { result = ap.getHead().getContent() } + + class ApOption = AccessPathFrontOption; + + ApOption apNone() { result = TAccessPathFrontNone() } + + ApOption apSome(Ap ap) { result = TAccessPathFrontSome(ap) } + + class Cc = boolean; + + class CcCall extends Cc { + CcCall() { this = true } + + /** Holds if this call context may be `call`. */ + predicate matchesCall(DataFlowCall call) { any() } + } + + class CcNoCall extends Cc { + CcNoCall() { this = false } + } + + Cc ccNone() { result = false } + + CcCall ccSomeCall() { result = true } + + private class LocalCc = Unit; + + bindingset[call, c, outercc] + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { any() } + + bindingset[call, c, innercc] + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { any() } + + bindingset[node, cc, config] + private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { any() } + + private predicate localStep( + NodeEx node1, NodeEx node2, boolean preservesValue, ApNil ap, Configuration config, LocalCc lcc + ) { + localFlowBigStep(node1, node2, preservesValue, ap, config, _) and exists(lcc) + } + + private predicate flowOutOfCall = flowOutOfCallNodeCand2/5; + + private predicate flowIntoCall = flowIntoCallNodeCand2/5; + + pragma[nomagic] + private predicate clear(NodeEx node, Ap ap) { ap.isClearedAt(node.asNode()) } + + pragma[nomagic] + private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } + + bindingset[node, ap] + private predicate filter(NodeEx node, Ap ap) { + not clear(node, ap) and + if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + } + + bindingset[ap, contentType] + private predicate typecheckStore(Ap ap, DataFlowType contentType) { + // We need to typecheck stores here, since reverse flow through a getter + // might have a different type here compared to inside the getter. + compatibleTypes(ap.getType(), contentType) + } + + /* Begin: Stage 3 logic. */ + private predicate flowCand(NodeEx node, ApApprox apa, Configuration config) { + PrevStage::revFlow(node, _, _, apa, config) + } + + bindingset[result, apa] + private ApApprox unbindApa(ApApprox apa) { + exists(ApApprox apa0 | + apa = pragma[only_bind_into](apa0) and result = pragma[only_bind_into](apa0) + ) + } + + pragma[nomagic] + private predicate flowThroughOutOfCall( + DataFlowCall call, CcCall ccc, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, + Configuration config + ) { + flowOutOfCall(call, ret, out, allowsFieldFlow, pragma[only_bind_into](config)) and + PrevStage::callMayFlowThroughRev(call, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(_, ret.getEnclosingCallable(), _, + pragma[only_bind_into](config)) and + ccc.matchesCall(call) + } + + /** + * Holds if `node` is reachable with access path `ap` from a source in the + * configuration `config`. + * + * The call context `cc` records whether the node is reached through an + * argument in a call, and if so, `argAp` records the access path of that + * argument. + */ + pragma[nomagic] + predicate fwdFlow(NodeEx node, Cc cc, ApOption argAp, Ap ap, Configuration config) { + fwdFlow0(node, cc, argAp, ap, config) and + flowCand(node, unbindApa(getApprox(ap)), config) and + filter(node, ap) + } + + pragma[nomagic] + private predicate fwdFlow0(NodeEx node, Cc cc, ApOption argAp, Ap ap, Configuration config) { + flowCand(node, _, config) and + sourceNode(node, config) and + (if hasSourceCallCtx(config) then cc = ccSomeCall() else cc = ccNone()) and + argAp = apNone() and + ap = getApNil(node) + or + exists(NodeEx mid, Ap ap0, LocalCc localCc | + fwdFlow(mid, cc, argAp, ap0, config) and + localCc = getLocalCc(mid, cc, config) + | + localStep(mid, node, true, _, config, localCc) and + ap = ap0 + or + localStep(mid, node, false, ap, config, localCc) and + ap0 instanceof ApNil + ) + or + exists(NodeEx mid | + fwdFlow(mid, _, _, ap, pragma[only_bind_into](config)) and + flowCand(node, _, pragma[only_bind_into](config)) and + jumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(mid, _, _, nil, pragma[only_bind_into](config)) and + flowCand(node, _, pragma[only_bind_into](config)) and + additionalJumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() and + ap = getApNil(node) + ) + or + // store + exists(TypedContent tc, Ap ap0 | + fwdFlowStore(_, ap0, tc, node, cc, argAp, config) and + ap = apCons(tc, ap0) + ) + or + // read + exists(Ap ap0, Content c | + fwdFlowRead(ap0, c, _, node, cc, argAp, config) and + fwdFlowConsCand(ap0, c, ap, config) + ) + or + // flow into a callable + exists(ApApprox apa | + fwdFlowIn(_, node, _, cc, _, ap, config) and + apa = getApprox(ap) and + if PrevStage::parameterMayFlowThrough(node, _, apa, config) + then argAp = apSome(ap) + else argAp = apNone() + ) + or + // flow out of a callable + fwdFlowOutNotFromArg(node, cc, argAp, ap, config) + or + exists(DataFlowCall call, Ap argAp0 | + fwdFlowOutFromArg(call, node, argAp0, ap, config) and + fwdFlowIsEntered(call, cc, argAp, argAp0, config) + ) + } + + pragma[nomagic] + private predicate fwdFlowStore( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Cc cc, ApOption argAp, Configuration config + ) { + exists(DataFlowType contentType | + fwdFlow(node1, cc, argAp, ap1, config) and + PrevStage::storeStepCand(node1, unbindApa(getApprox(ap1)), tc, node2, contentType, config) and + typecheckStore(ap1, contentType) + ) + } + + /** + * Holds if forward flow with access path `tail` reaches a store of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate fwdFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(TypedContent tc | + fwdFlowStore(_, tail, tc, _, _, _, config) and + tc.getContent() = c and + cons = apCons(tc, tail) + ) + } + + pragma[nomagic] + private predicate fwdFlowRead( + Ap ap, Content c, NodeEx node1, NodeEx node2, Cc cc, ApOption argAp, Configuration config + ) { + fwdFlow(node1, cc, argAp, ap, config) and + PrevStage::readStepCand(node1, c, node2, config) and + getHeadContent(ap) = c + } + + pragma[nomagic] + private predicate fwdFlowIn( + DataFlowCall call, ParamNodeEx p, Cc outercc, Cc innercc, ApOption argAp, Ap ap, + Configuration config + ) { + exists(ArgNodeEx arg, boolean allowsFieldFlow | + fwdFlow(arg, outercc, argAp, ap, config) and + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + innercc = getCallContextCall(call, p.getEnclosingCallable(), outercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutNotFromArg( + NodeEx out, Cc ccOut, ApOption argAp, Ap ap, Configuration config + ) { + exists( + DataFlowCall call, RetNodeEx ret, boolean allowsFieldFlow, CcNoCall innercc, + DataFlowCallable inner + | + fwdFlow(ret, innercc, argAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + inner = ret.getEnclosingCallable() and + ccOut = getCallContextReturn(inner, call, innercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutFromArg( + DataFlowCall call, NodeEx out, Ap argAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, boolean allowsFieldFlow, CcCall ccc | + fwdFlow(ret, ccc, apSome(argAp), ap, config) and + flowThroughOutOfCall(call, ccc, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an argument to `call` is reached in the flow covered by `fwdFlow` + * and data might flow through the target callable and back out at `call`. + */ + pragma[nomagic] + private predicate fwdFlowIsEntered( + DataFlowCall call, Cc cc, ApOption argAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p | + fwdFlowIn(call, p, cc, _, argAp, ap, config) and + PrevStage::parameterMayFlowThrough(p, _, unbindApa(getApprox(ap)), config) + ) + } + + pragma[nomagic] + private predicate storeStepFwd( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Ap ap2, Configuration config + ) { + fwdFlowStore(node1, ap1, tc, node2, _, _, config) and + ap2 = apCons(tc, ap1) and + fwdFlowRead(ap2, tc.getContent(), _, _, _, _, config) + } + + private predicate readStepFwd( + NodeEx n1, Ap ap1, Content c, NodeEx n2, Ap ap2, Configuration config + ) { + fwdFlowRead(ap1, c, n1, n2, _, _, config) and + fwdFlowConsCand(ap1, c, ap2, config) + } + + pragma[nomagic] + private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { + exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | + fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, + pragma[only_bind_into](config)) and + fwdFlowOutFromArg(call, out, argAp0, ap, config) and + fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc), + pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0), + pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate flowThroughIntoCall( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, Configuration config + ) { + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + fwdFlow(arg, _, _, _, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(p, _, _, pragma[only_bind_into](config)) and + callMayFlowThroughFwd(call, pragma[only_bind_into](config)) + } + + pragma[nomagic] + private predicate returnNodeMayFlowThrough(RetNodeEx ret, Ap ap, Configuration config) { + fwdFlow(ret, any(CcCall ccc), apSome(_), ap, config) + } + + /** + * Holds if `node` with access path `ap` is part of a path from a source to a + * sink in the configuration `config`. + * + * The Boolean `toReturn` records whether the node must be returned from the + * enclosing callable in order to reach a sink, and if so, `returnAp` records + * the access path of the returned value. + */ + pragma[nomagic] + predicate revFlow(NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config) { + revFlow0(node, toReturn, returnAp, ap, config) and + fwdFlow(node, _, _, ap, config) + } + + pragma[nomagic] + private predicate revFlow0( + NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + fwdFlow(node, _, _, ap, config) and + sinkNode(node, config) and + (if hasSinkCallCtx(config) then toReturn = true else toReturn = false) and + returnAp = apNone() and + ap instanceof ApNil + or + exists(NodeEx mid | + localStep(node, mid, true, _, config, _) and + revFlow(mid, toReturn, returnAp, ap, config) + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, ap, pragma[only_bind_into](config)) and + localStep(node, mid, false, _, config, _) and + revFlow(mid, toReturn, returnAp, nil, pragma[only_bind_into](config)) and + ap instanceof ApNil + ) + or + exists(NodeEx mid | + jumpStep(node, mid, config) and + revFlow(mid, _, _, ap, config) and + toReturn = false and + returnAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, ap, pragma[only_bind_into](config)) and + additionalJumpStep(node, mid, config) and + revFlow(pragma[only_bind_into](mid), _, _, nil, pragma[only_bind_into](config)) and + toReturn = false and + returnAp = apNone() and + ap instanceof ApNil + ) + or + // store + exists(Ap ap0, Content c | + revFlowStore(ap0, c, ap, node, _, _, toReturn, returnAp, config) and + revFlowConsCand(ap0, c, ap, config) + ) + or + // read + exists(NodeEx mid, Ap ap0 | + revFlow(mid, toReturn, returnAp, ap0, config) and + readStepFwd(node, ap, _, mid, ap0, config) + ) + or + // flow into a callable + revFlowInNotToReturn(node, returnAp, ap, config) and + toReturn = false + or + exists(DataFlowCall call, Ap returnAp0 | + revFlowInToReturn(call, node, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + or + // flow out of a callable + revFlowOut(_, node, _, _, ap, config) and + toReturn = true and + if returnNodeMayFlowThrough(node, ap, config) + then returnAp = apSome(ap) + else returnAp = apNone() + } + + pragma[nomagic] + private predicate revFlowStore( + Ap ap0, Content c, Ap ap, NodeEx node, TypedContent tc, NodeEx mid, boolean toReturn, + ApOption returnAp, Configuration config + ) { + revFlow(mid, toReturn, returnAp, ap0, config) and + storeStepFwd(node, ap, tc, mid, ap0, config) and + tc.getContent() = c + } + + /** + * Holds if reverse flow with access path `tail` reaches a read of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate revFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(NodeEx mid, Ap tail0 | + revFlow(mid, _, _, tail, config) and + tail = pragma[only_bind_into](tail0) and + readStepFwd(_, cons, c, mid, tail0, config) + ) + } + + pragma[nomagic] + private predicate revFlowOut( + DataFlowCall call, RetNodeEx ret, boolean toReturn, ApOption returnAp, Ap ap, + Configuration config + ) { + exists(NodeEx out, boolean allowsFieldFlow | + revFlow(out, toReturn, returnAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInNotToReturn( + ArgNodeEx arg, ApOption returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, false, returnAp, ap, config) and + flowIntoCall(_, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInToReturn( + DataFlowCall call, ArgNodeEx arg, Ap returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, true, apSome(returnAp), ap, config) and + flowThroughIntoCall(call, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an output from `call` is reached in the flow covered by `revFlow` + * and data might flow through the target callable resulting in reverse flow + * reaching an argument of `call`. + */ + pragma[nomagic] + private predicate revFlowIsReturned( + DataFlowCall call, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, CcCall ccc | + revFlowOut(call, ret, toReturn, returnAp, ap, config) and + fwdFlow(ret, ccc, apSome(_), ap, config) and + ccc.matchesCall(call) + ) + } + + pragma[nomagic] + predicate storeStepCand( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, DataFlowType contentType, + Configuration config + ) { + exists(Ap ap2, Content c | + store(node1, tc, node2, contentType, config) and + revFlowStore(ap2, c, ap1, node1, tc, node2, _, _, config) and + revFlowConsCand(ap2, c, ap1, config) + ) + } + + predicate readStepCand(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(Ap ap1, Ap ap2 | + revFlow(node2, _, _, pragma[only_bind_into](ap2), pragma[only_bind_into](config)) and + readStepFwd(node1, ap1, c, node2, ap2, config) and + revFlowStore(ap1, c, pragma[only_bind_into](ap2), _, _, _, _, _, + pragma[only_bind_into](config)) + ) + } + + predicate revFlow(NodeEx node, Configuration config) { revFlow(node, _, _, _, config) } + + private predicate fwdConsCand(TypedContent tc, Ap ap, Configuration config) { + storeStepFwd(_, ap, tc, _, _, config) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + storeStepCand(_, ap, tc, _, _, config) + } + + pragma[noinline] + private predicate parameterFlow( + ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config + ) { + revFlow(p, true, apSome(ap0), ap, config) and + c = p.getEnclosingCallable() + } + + predicate parameterMayFlowThrough(ParamNodeEx p, DataFlowCallable c, Ap ap, Configuration config) { + exists(RetNodeEx ret, Ap ap0, ReturnKindExt kind, int pos | + parameterFlow(p, ap, ap0, c, config) and + c = ret.getEnclosingCallable() and + revFlow(pragma[only_bind_into](ret), true, apSome(_), pragma[only_bind_into](ap0), + pragma[only_bind_into](config)) and + fwdFlow(ret, any(CcCall ccc), apSome(ap), ap0, config) and + kind = ret.getKind() and + p.getPosition() = pos and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = pos + or + p.allowParameterReturnInSelf() + ) + ) + } + + pragma[nomagic] + predicate callMayFlowThroughRev(DataFlowCall call, Configuration config) { + exists(Ap returnAp0, ArgNodeEx arg, boolean toReturn, ApOption returnAp, Ap ap | + revFlow(arg, toReturn, returnAp, ap, config) and + revFlowInToReturn(call, arg, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + } + + predicate stats(boolean fwd, int nodes, int fields, int conscand, int tuples, Configuration config) { + fwd = true and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, config)) and + fields = count(TypedContent f0 | fwdConsCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | fwdConsCand(f0, ap, config)) and + tuples = count(NodeEx n, Cc cc, ApOption argAp, Ap ap | fwdFlow(n, cc, argAp, ap, config)) + or + fwd = false and + nodes = count(NodeEx node | revFlow(node, _, _, _, config)) and + fields = count(TypedContent f0 | consCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | consCand(f0, ap, config)) and + tuples = count(NodeEx n, boolean b, ApOption retAp, Ap ap | revFlow(n, b, retAp, ap, config)) + } + /* End: Stage 3 logic. */ +} + +/** + * Holds if `argApf` is recorded as the summary context for flow reaching `node` + * and remains relevant for the following pruning stage. + */ +private predicate flowCandSummaryCtx(NodeEx node, AccessPathFront argApf, Configuration config) { + exists(AccessPathFront apf | + Stage3::revFlow(node, true, _, apf, config) and + Stage3::fwdFlow(node, any(Stage3::CcCall ccc), TAccessPathFrontSome(argApf), apf, config) + ) +} + +/** + * Holds if a length 2 access path approximation with the head `tc` is expected + * to be expensive. + */ +private predicate expensiveLen2unfolding(TypedContent tc, Configuration config) { + exists(int tails, int nodes, int apLimit, int tupleLimit | + tails = strictcount(AccessPathFront apf | Stage3::consCand(tc, apf, config)) and + nodes = + strictcount(NodeEx n | + Stage3::revFlow(n, _, _, any(AccessPathFrontHead apf | apf.getHead() = tc), config) + or + flowCandSummaryCtx(n, any(AccessPathFrontHead apf | apf.getHead() = tc), config) + ) and + accessPathApproxCostLimits(apLimit, tupleLimit) and + apLimit < tails and + tupleLimit < (tails - 1) * nodes and + not tc.forceHighPrecision() + ) +} + +private newtype TAccessPathApprox = + TNil(DataFlowType t) or + TConsNil(TypedContent tc, DataFlowType t) { + Stage3::consCand(tc, TFrontNil(t), _) and + not expensiveLen2unfolding(tc, _) + } or + TConsCons(TypedContent tc1, TypedContent tc2, int len) { + Stage3::consCand(tc1, TFrontHead(tc2), _) and + len in [2 .. accessPathLimit()] and + not expensiveLen2unfolding(tc1, _) + } or + TCons1(TypedContent tc, int len) { + len in [1 .. accessPathLimit()] and + expensiveLen2unfolding(tc, _) + } + +/** + * Conceptually a list of `TypedContent`s followed by a `DataFlowType`, but only + * the first two elements of the list and its length are tracked. If data flows + * from a source to a given node with a given `AccessPathApprox`, this indicates + * the sequence of dereference operations needed to get from the value in the node + * to the tracked object. The final type indicates the type of the tracked object. + */ +abstract private class AccessPathApprox extends TAccessPathApprox { + abstract string toString(); + + abstract TypedContent getHead(); + + abstract int len(); + + abstract DataFlowType getType(); + + abstract AccessPathFront getFront(); + + /** Gets the access path obtained by popping `head` from this path, if any. */ + abstract AccessPathApprox pop(TypedContent head); +} + +private class AccessPathApproxNil extends AccessPathApprox, TNil { + private DataFlowType t; + + AccessPathApproxNil() { this = TNil(t) } + + override string toString() { result = concat(": " + ppReprType(t)) } + + override TypedContent getHead() { none() } + + override int len() { result = 0 } + + override DataFlowType getType() { result = t } + + override AccessPathFront getFront() { result = TFrontNil(t) } + + override AccessPathApprox pop(TypedContent head) { none() } +} + +abstract private class AccessPathApproxCons extends AccessPathApprox { } + +private class AccessPathApproxConsNil extends AccessPathApproxCons, TConsNil { + private TypedContent tc; + private DataFlowType t; + + AccessPathApproxConsNil() { this = TConsNil(tc, t) } + + override string toString() { + // The `concat` becomes "" if `ppReprType` has no result. + result = "[" + tc.toString() + "]" + concat(" : " + ppReprType(t)) + } + + override TypedContent getHead() { result = tc } + + override int len() { result = 1 } + + override DataFlowType getType() { result = tc.getContainerType() } + + override AccessPathFront getFront() { result = TFrontHead(tc) } + + override AccessPathApprox pop(TypedContent head) { head = tc and result = TNil(t) } +} + +private class AccessPathApproxConsCons extends AccessPathApproxCons, TConsCons { + private TypedContent tc1; + private TypedContent tc2; + private int len; + + AccessPathApproxConsCons() { this = TConsCons(tc1, tc2, len) } + + override string toString() { + if len = 2 + then result = "[" + tc1.toString() + ", " + tc2.toString() + "]" + else result = "[" + tc1.toString() + ", " + tc2.toString() + ", ... (" + len.toString() + ")]" + } + + override TypedContent getHead() { result = tc1 } + + override int len() { result = len } + + override DataFlowType getType() { result = tc1.getContainerType() } + + override AccessPathFront getFront() { result = TFrontHead(tc1) } + + override AccessPathApprox pop(TypedContent head) { + head = tc1 and + ( + result = TConsCons(tc2, _, len - 1) + or + len = 2 and + result = TConsNil(tc2, _) + or + result = TCons1(tc2, len - 1) + ) + } +} + +private class AccessPathApproxCons1 extends AccessPathApproxCons, TCons1 { + private TypedContent tc; + private int len; + + AccessPathApproxCons1() { this = TCons1(tc, len) } + + override string toString() { + if len = 1 + then result = "[" + tc.toString() + "]" + else result = "[" + tc.toString() + ", ... (" + len.toString() + ")]" + } + + override TypedContent getHead() { result = tc } + + override int len() { result = len } + + override DataFlowType getType() { result = tc.getContainerType() } + + override AccessPathFront getFront() { result = TFrontHead(tc) } + + override AccessPathApprox pop(TypedContent head) { + head = tc and + ( + exists(TypedContent tc2 | Stage3::consCand(tc, TFrontHead(tc2), _) | + result = TConsCons(tc2, _, len - 1) + or + len = 2 and + result = TConsNil(tc2, _) + or + result = TCons1(tc2, len - 1) + ) + or + exists(DataFlowType t | + len = 1 and + Stage3::consCand(tc, TFrontNil(t), _) and + result = TNil(t) + ) + ) + } +} + +/** Gets the access path obtained by popping `tc` from `ap`, if any. */ +private AccessPathApprox pop(TypedContent tc, AccessPathApprox apa) { result = apa.pop(tc) } + +/** Gets the access path obtained by pushing `tc` onto `ap`. */ +private AccessPathApprox push(TypedContent tc, AccessPathApprox apa) { apa = pop(tc, result) } + +private newtype TAccessPathApproxOption = + TAccessPathApproxNone() or + TAccessPathApproxSome(AccessPathApprox apa) + +private class AccessPathApproxOption extends TAccessPathApproxOption { + string toString() { + this = TAccessPathApproxNone() and result = "" + or + this = TAccessPathApproxSome(any(AccessPathApprox apa | result = apa.toString())) + } +} + +private module Stage4 { + module PrevStage = Stage3; + + class ApApprox = PrevStage::Ap; + + class Ap = AccessPathApprox; + + class ApNil = AccessPathApproxNil; + + private ApApprox getApprox(Ap ap) { result = ap.getFront() } + + private ApNil getApNil(NodeEx node) { + PrevStage::revFlow(node, _) and result = TNil(node.getDataFlowType()) + } + + bindingset[tc, tail] + private Ap apCons(TypedContent tc, Ap tail) { result = push(tc, tail) } + + pragma[noinline] + private Content getHeadContent(Ap ap) { result = ap.getHead().getContent() } + + class ApOption = AccessPathApproxOption; + + ApOption apNone() { result = TAccessPathApproxNone() } + + ApOption apSome(Ap ap) { result = TAccessPathApproxSome(ap) } + + class Cc = CallContext; + + class CcCall = CallContextCall; + + class CcNoCall = CallContextNoCall; + + Cc ccNone() { result instanceof CallContextAny } + + CcCall ccSomeCall() { result instanceof CallContextSomeCall } + + private class LocalCc = LocalCallContext; + + bindingset[call, c, outercc] + private CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c, Cc outercc) { + checkCallContextCall(outercc, call, c) and + if recordDataFlowCallSite(call, c) then result = TSpecificCall(call) else result = TSomeCall() + } + + bindingset[call, c, innercc] + private CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call, Cc innercc) { + checkCallContextReturn(innercc, c, call) and + if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + } + + bindingset[node, cc, config] + private LocalCc getLocalCc(NodeEx node, Cc cc, Configuration config) { + localFlowEntry(node, config) and + result = + getLocalCallContext(pragma[only_bind_into](pragma[only_bind_out](cc)), + node.getEnclosingCallable()) + } + + private predicate localStep( + NodeEx node1, NodeEx node2, boolean preservesValue, ApNil ap, Configuration config, LocalCc lcc + ) { + localFlowBigStep(node1, node2, preservesValue, ap.getFront(), config, lcc) + } + + pragma[nomagic] + private predicate flowOutOfCall( + DataFlowCall call, RetNodeEx node1, NodeEx node2, boolean allowsFieldFlow, Configuration config + ) { + flowOutOfCallNodeCand2(call, node1, node2, allowsFieldFlow, config) and + PrevStage::revFlow(node2, _, _, _, pragma[only_bind_into](config)) and + PrevStage::revFlow(node1, _, _, _, pragma[only_bind_into](config)) + } + + pragma[nomagic] + private predicate flowIntoCall( + DataFlowCall call, ArgNodeEx node1, ParamNodeEx node2, boolean allowsFieldFlow, + Configuration config + ) { + flowIntoCallNodeCand2(call, node1, node2, allowsFieldFlow, config) and + PrevStage::revFlow(node2, _, _, _, pragma[only_bind_into](config)) and + PrevStage::revFlow(node1, _, _, _, pragma[only_bind_into](config)) + } + + bindingset[node, ap] + private predicate filter(NodeEx node, Ap ap) { any() } + + // Type checking is not necessary here as it has already been done in stage 3. + bindingset[ap, contentType] + private predicate typecheckStore(Ap ap, DataFlowType contentType) { any() } + + /* Begin: Stage 4 logic. */ + private predicate flowCand(NodeEx node, ApApprox apa, Configuration config) { + PrevStage::revFlow(node, _, _, apa, config) + } + + bindingset[result, apa] + private ApApprox unbindApa(ApApprox apa) { + exists(ApApprox apa0 | + apa = pragma[only_bind_into](apa0) and result = pragma[only_bind_into](apa0) + ) + } + + pragma[nomagic] + private predicate flowThroughOutOfCall( + DataFlowCall call, CcCall ccc, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, + Configuration config + ) { + flowOutOfCall(call, ret, out, allowsFieldFlow, pragma[only_bind_into](config)) and + PrevStage::callMayFlowThroughRev(call, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(_, ret.getEnclosingCallable(), _, + pragma[only_bind_into](config)) and + ccc.matchesCall(call) + } + + /** + * Holds if `node` is reachable with access path `ap` from a source in the + * configuration `config`. + * + * The call context `cc` records whether the node is reached through an + * argument in a call, and if so, `argAp` records the access path of that + * argument. + */ + pragma[nomagic] + predicate fwdFlow(NodeEx node, Cc cc, ApOption argAp, Ap ap, Configuration config) { + fwdFlow0(node, cc, argAp, ap, config) and + flowCand(node, unbindApa(getApprox(ap)), config) and + filter(node, ap) + } + + pragma[nomagic] + private predicate fwdFlow0(NodeEx node, Cc cc, ApOption argAp, Ap ap, Configuration config) { + flowCand(node, _, config) and + sourceNode(node, config) and + (if hasSourceCallCtx(config) then cc = ccSomeCall() else cc = ccNone()) and + argAp = apNone() and + ap = getApNil(node) + or + exists(NodeEx mid, Ap ap0, LocalCc localCc | + fwdFlow(mid, cc, argAp, ap0, config) and + localCc = getLocalCc(mid, cc, config) + | + localStep(mid, node, true, _, config, localCc) and + ap = ap0 + or + localStep(mid, node, false, ap, config, localCc) and + ap0 instanceof ApNil + ) + or + exists(NodeEx mid | + fwdFlow(mid, _, _, ap, pragma[only_bind_into](config)) and + flowCand(node, _, pragma[only_bind_into](config)) and + jumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(mid, _, _, nil, pragma[only_bind_into](config)) and + flowCand(node, _, pragma[only_bind_into](config)) and + additionalJumpStep(mid, node, config) and + cc = ccNone() and + argAp = apNone() and + ap = getApNil(node) + ) + or + // store + exists(TypedContent tc, Ap ap0 | + fwdFlowStore(_, ap0, tc, node, cc, argAp, config) and + ap = apCons(tc, ap0) + ) + or + // read + exists(Ap ap0, Content c | + fwdFlowRead(ap0, c, _, node, cc, argAp, config) and + fwdFlowConsCand(ap0, c, ap, config) + ) + or + // flow into a callable + exists(ApApprox apa | + fwdFlowIn(_, node, _, cc, _, ap, config) and + apa = getApprox(ap) and + if PrevStage::parameterMayFlowThrough(node, _, apa, config) + then argAp = apSome(ap) + else argAp = apNone() + ) + or + // flow out of a callable + fwdFlowOutNotFromArg(node, cc, argAp, ap, config) + or + exists(DataFlowCall call, Ap argAp0 | + fwdFlowOutFromArg(call, node, argAp0, ap, config) and + fwdFlowIsEntered(call, cc, argAp, argAp0, config) + ) + } + + pragma[nomagic] + private predicate fwdFlowStore( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Cc cc, ApOption argAp, Configuration config + ) { + exists(DataFlowType contentType | + fwdFlow(node1, cc, argAp, ap1, config) and + PrevStage::storeStepCand(node1, unbindApa(getApprox(ap1)), tc, node2, contentType, config) and + typecheckStore(ap1, contentType) + ) + } + + /** + * Holds if forward flow with access path `tail` reaches a store of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate fwdFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(TypedContent tc | + fwdFlowStore(_, tail, tc, _, _, _, config) and + tc.getContent() = c and + cons = apCons(tc, tail) + ) + } + + pragma[nomagic] + private predicate fwdFlowRead( + Ap ap, Content c, NodeEx node1, NodeEx node2, Cc cc, ApOption argAp, Configuration config + ) { + fwdFlow(node1, cc, argAp, ap, config) and + PrevStage::readStepCand(node1, c, node2, config) and + getHeadContent(ap) = c + } + + pragma[nomagic] + private predicate fwdFlowIn( + DataFlowCall call, ParamNodeEx p, Cc outercc, Cc innercc, ApOption argAp, Ap ap, + Configuration config + ) { + exists(ArgNodeEx arg, boolean allowsFieldFlow | + fwdFlow(arg, outercc, argAp, ap, config) and + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + innercc = getCallContextCall(call, p.getEnclosingCallable(), outercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutNotFromArg( + NodeEx out, Cc ccOut, ApOption argAp, Ap ap, Configuration config + ) { + exists( + DataFlowCall call, RetNodeEx ret, boolean allowsFieldFlow, CcNoCall innercc, + DataFlowCallable inner + | + fwdFlow(ret, innercc, argAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + inner = ret.getEnclosingCallable() and + ccOut = getCallContextReturn(inner, call, innercc) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate fwdFlowOutFromArg( + DataFlowCall call, NodeEx out, Ap argAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, boolean allowsFieldFlow, CcCall ccc | + fwdFlow(ret, ccc, apSome(argAp), ap, config) and + flowThroughOutOfCall(call, ccc, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an argument to `call` is reached in the flow covered by `fwdFlow` + * and data might flow through the target callable and back out at `call`. + */ + pragma[nomagic] + private predicate fwdFlowIsEntered( + DataFlowCall call, Cc cc, ApOption argAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p | + fwdFlowIn(call, p, cc, _, argAp, ap, config) and + PrevStage::parameterMayFlowThrough(p, _, unbindApa(getApprox(ap)), config) + ) + } + + pragma[nomagic] + private predicate storeStepFwd( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, Ap ap2, Configuration config + ) { + fwdFlowStore(node1, ap1, tc, node2, _, _, config) and + ap2 = apCons(tc, ap1) and + fwdFlowRead(ap2, tc.getContent(), _, _, _, _, config) + } + + private predicate readStepFwd( + NodeEx n1, Ap ap1, Content c, NodeEx n2, Ap ap2, Configuration config + ) { + fwdFlowRead(ap1, c, n1, n2, _, _, config) and + fwdFlowConsCand(ap1, c, ap2, config) + } + + pragma[nomagic] + private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) { + exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap | + fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap, + pragma[only_bind_into](config)) and + fwdFlowOutFromArg(call, out, argAp0, ap, config) and + fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc), + pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0), + pragma[only_bind_into](config)) + ) + } + + pragma[nomagic] + private predicate flowThroughIntoCall( + DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, Configuration config + ) { + flowIntoCall(call, arg, p, allowsFieldFlow, config) and + fwdFlow(arg, _, _, _, pragma[only_bind_into](config)) and + PrevStage::parameterMayFlowThrough(p, _, _, pragma[only_bind_into](config)) and + callMayFlowThroughFwd(call, pragma[only_bind_into](config)) + } + + pragma[nomagic] + private predicate returnNodeMayFlowThrough(RetNodeEx ret, Ap ap, Configuration config) { + fwdFlow(ret, any(CcCall ccc), apSome(_), ap, config) + } + + /** + * Holds if `node` with access path `ap` is part of a path from a source to a + * sink in the configuration `config`. + * + * The Boolean `toReturn` records whether the node must be returned from the + * enclosing callable in order to reach a sink, and if so, `returnAp` records + * the access path of the returned value. + */ + pragma[nomagic] + predicate revFlow(NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config) { + revFlow0(node, toReturn, returnAp, ap, config) and + fwdFlow(node, _, _, ap, config) + } + + pragma[nomagic] + private predicate revFlow0( + NodeEx node, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + fwdFlow(node, _, _, ap, config) and + sinkNode(node, config) and + (if hasSinkCallCtx(config) then toReturn = true else toReturn = false) and + returnAp = apNone() and + ap instanceof ApNil + or + exists(NodeEx mid | + localStep(node, mid, true, _, config, _) and + revFlow(mid, toReturn, returnAp, ap, config) + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, ap, pragma[only_bind_into](config)) and + localStep(node, mid, false, _, config, _) and + revFlow(mid, toReturn, returnAp, nil, pragma[only_bind_into](config)) and + ap instanceof ApNil + ) + or + exists(NodeEx mid | + jumpStep(node, mid, config) and + revFlow(mid, _, _, ap, config) and + toReturn = false and + returnAp = apNone() + ) + or + exists(NodeEx mid, ApNil nil | + fwdFlow(node, _, _, ap, pragma[only_bind_into](config)) and + additionalJumpStep(node, mid, config) and + revFlow(pragma[only_bind_into](mid), _, _, nil, pragma[only_bind_into](config)) and + toReturn = false and + returnAp = apNone() and + ap instanceof ApNil + ) + or + // store + exists(Ap ap0, Content c | + revFlowStore(ap0, c, ap, node, _, _, toReturn, returnAp, config) and + revFlowConsCand(ap0, c, ap, config) + ) + or + // read + exists(NodeEx mid, Ap ap0 | + revFlow(mid, toReturn, returnAp, ap0, config) and + readStepFwd(node, ap, _, mid, ap0, config) + ) + or + // flow into a callable + revFlowInNotToReturn(node, returnAp, ap, config) and + toReturn = false + or + exists(DataFlowCall call, Ap returnAp0 | + revFlowInToReturn(call, node, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + or + // flow out of a callable + revFlowOut(_, node, _, _, ap, config) and + toReturn = true and + if returnNodeMayFlowThrough(node, ap, config) + then returnAp = apSome(ap) + else returnAp = apNone() + } + + pragma[nomagic] + private predicate revFlowStore( + Ap ap0, Content c, Ap ap, NodeEx node, TypedContent tc, NodeEx mid, boolean toReturn, + ApOption returnAp, Configuration config + ) { + revFlow(mid, toReturn, returnAp, ap0, config) and + storeStepFwd(node, ap, tc, mid, ap0, config) and + tc.getContent() = c + } + + /** + * Holds if reverse flow with access path `tail` reaches a read of `c` + * resulting in access path `cons`. + */ + pragma[nomagic] + private predicate revFlowConsCand(Ap cons, Content c, Ap tail, Configuration config) { + exists(NodeEx mid, Ap tail0 | + revFlow(mid, _, _, tail, config) and + tail = pragma[only_bind_into](tail0) and + readStepFwd(_, cons, c, mid, tail0, config) + ) + } + + pragma[nomagic] + private predicate revFlowOut( + DataFlowCall call, RetNodeEx ret, boolean toReturn, ApOption returnAp, Ap ap, + Configuration config + ) { + exists(NodeEx out, boolean allowsFieldFlow | + revFlow(out, toReturn, returnAp, ap, config) and + flowOutOfCall(call, ret, out, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInNotToReturn( + ArgNodeEx arg, ApOption returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, false, returnAp, ap, config) and + flowIntoCall(_, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + pragma[nomagic] + private predicate revFlowInToReturn( + DataFlowCall call, ArgNodeEx arg, Ap returnAp, Ap ap, Configuration config + ) { + exists(ParamNodeEx p, boolean allowsFieldFlow | + revFlow(p, true, apSome(returnAp), ap, config) and + flowThroughIntoCall(call, arg, p, allowsFieldFlow, config) and + if allowsFieldFlow = false then ap instanceof ApNil else any() + ) + } + + /** + * Holds if an output from `call` is reached in the flow covered by `revFlow` + * and data might flow through the target callable resulting in reverse flow + * reaching an argument of `call`. + */ + pragma[nomagic] + private predicate revFlowIsReturned( + DataFlowCall call, boolean toReturn, ApOption returnAp, Ap ap, Configuration config + ) { + exists(RetNodeEx ret, CcCall ccc | + revFlowOut(call, ret, toReturn, returnAp, ap, config) and + fwdFlow(ret, ccc, apSome(_), ap, config) and + ccc.matchesCall(call) + ) + } + + pragma[nomagic] + predicate storeStepCand( + NodeEx node1, Ap ap1, TypedContent tc, NodeEx node2, DataFlowType contentType, + Configuration config + ) { + exists(Ap ap2, Content c | + store(node1, tc, node2, contentType, config) and + revFlowStore(ap2, c, ap1, node1, tc, node2, _, _, config) and + revFlowConsCand(ap2, c, ap1, config) + ) + } + + predicate readStepCand(NodeEx node1, Content c, NodeEx node2, Configuration config) { + exists(Ap ap1, Ap ap2 | + revFlow(node2, _, _, pragma[only_bind_into](ap2), pragma[only_bind_into](config)) and + readStepFwd(node1, ap1, c, node2, ap2, config) and + revFlowStore(ap1, c, pragma[only_bind_into](ap2), _, _, _, _, _, + pragma[only_bind_into](config)) + ) + } + + predicate revFlow(NodeEx node, Configuration config) { revFlow(node, _, _, _, config) } + + private predicate fwdConsCand(TypedContent tc, Ap ap, Configuration config) { + storeStepFwd(_, ap, tc, _, _, config) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + storeStepCand(_, ap, tc, _, _, config) + } + + pragma[noinline] + private predicate parameterFlow( + ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config + ) { + revFlow(p, true, apSome(ap0), ap, config) and + c = p.getEnclosingCallable() + } + + predicate parameterMayFlowThrough(ParamNodeEx p, DataFlowCallable c, Ap ap, Configuration config) { + exists(RetNodeEx ret, Ap ap0, ReturnKindExt kind, int pos | + parameterFlow(p, ap, ap0, c, config) and + c = ret.getEnclosingCallable() and + revFlow(pragma[only_bind_into](ret), true, apSome(_), pragma[only_bind_into](ap0), + pragma[only_bind_into](config)) and + fwdFlow(ret, any(CcCall ccc), apSome(ap), ap0, config) and + kind = ret.getKind() and + p.getPosition() = pos and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = pos + or + p.allowParameterReturnInSelf() + ) + ) + } + + pragma[nomagic] + predicate callMayFlowThroughRev(DataFlowCall call, Configuration config) { + exists(Ap returnAp0, ArgNodeEx arg, boolean toReturn, ApOption returnAp, Ap ap | + revFlow(arg, toReturn, returnAp, ap, config) and + revFlowInToReturn(call, arg, returnAp0, ap, config) and + revFlowIsReturned(call, toReturn, returnAp, returnAp0, config) + ) + } + + predicate stats(boolean fwd, int nodes, int fields, int conscand, int tuples, Configuration config) { + fwd = true and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, config)) and + fields = count(TypedContent f0 | fwdConsCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | fwdConsCand(f0, ap, config)) and + tuples = count(NodeEx n, Cc cc, ApOption argAp, Ap ap | fwdFlow(n, cc, argAp, ap, config)) + or + fwd = false and + nodes = count(NodeEx node | revFlow(node, _, _, _, config)) and + fields = count(TypedContent f0 | consCand(f0, _, config)) and + conscand = count(TypedContent f0, Ap ap | consCand(f0, ap, config)) and + tuples = count(NodeEx n, boolean b, ApOption retAp, Ap ap | revFlow(n, b, retAp, ap, config)) + } + /* End: Stage 4 logic. */ +} + +bindingset[conf, result] +private Configuration unbindConf(Configuration conf) { + exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) +} + +private predicate nodeMayUseSummary(NodeEx n, AccessPathApprox apa, Configuration config) { + exists(DataFlowCallable c, AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + Stage4::revFlow(n, true, _, apa0, config) and + Stage4::fwdFlow(n, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and + n.getEnclosingCallable() = c + ) +} + +private newtype TSummaryCtx = + TSummaryCtxNone() or + TSummaryCtxSome(ParamNodeEx p, AccessPath ap) { + Stage4::parameterMayFlowThrough(p, _, ap.getApprox(), _) + } + +/** + * A context for generating flow summaries. This represents flow entry through + * a specific parameter with an access path of a specific shape. + * + * Summaries are only created for parameters that may flow through. + */ +abstract private class SummaryCtx extends TSummaryCtx { + abstract string toString(); +} + +/** A summary context from which no flow summary can be generated. */ +private class SummaryCtxNone extends SummaryCtx, TSummaryCtxNone { + override string toString() { result = "" } +} + +/** A summary context from which a flow summary can be generated. */ +private class SummaryCtxSome extends SummaryCtx, TSummaryCtxSome { + private ParamNodeEx p; + private AccessPath ap; + + SummaryCtxSome() { this = TSummaryCtxSome(p, ap) } + + int getParameterPos() { p.isParameterOf(_, result) } + + ParamNodeEx getParamNode() { result = p } + + override string toString() { result = p + ": " + ap } + + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + p.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +/** + * Gets the number of length 2 access path approximations that correspond to `apa`. + */ +private int count1to2unfold(AccessPathApproxCons1 apa, Configuration config) { + exists(TypedContent tc, int len | + tc = apa.getHead() and + len = apa.len() and + result = + strictcount(AccessPathFront apf | + Stage4::consCand(tc, any(AccessPathApprox ap | ap.getFront() = apf and ap.len() = len - 1), + config) + ) + ) +} + +private int countNodesUsingAccessPath(AccessPathApprox apa, Configuration config) { + result = + strictcount(NodeEx n | + Stage4::revFlow(n, _, _, apa, config) or nodeMayUseSummary(n, apa, config) + ) +} + +/** + * Holds if a length 2 access path approximation matching `apa` is expected + * to be expensive. + */ +private predicate expensiveLen1to2unfolding(AccessPathApproxCons1 apa, Configuration config) { + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = count1to2unfold(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + apLimit < aps and + tupleLimit < (aps - 1) * nodes + ) +} + +private AccessPathApprox getATail(AccessPathApprox apa, Configuration config) { + exists(TypedContent head | + apa.pop(head) = result and + Stage4::consCand(head, result, config) + ) +} + +/** + * Holds with `unfold = false` if a precise head-tail representation of `apa` is + * expected to be expensive. Holds with `unfold = true` otherwise. + */ +private predicate evalUnfold(AccessPathApprox apa, boolean unfold, Configuration config) { + if apa.getHead().forceHighPrecision() + then unfold = true + else + exists(int aps, int nodes, int apLimit, int tupleLimit | + aps = countPotentialAps(apa, config) and + nodes = countNodesUsingAccessPath(apa, config) and + accessPathCostLimits(apLimit, tupleLimit) and + if apLimit < aps and tupleLimit < (aps - 1) * nodes then unfold = false else unfold = true + ) +} + +/** + * Gets the number of `AccessPath`s that correspond to `apa`. + */ +private int countAps(AccessPathApprox apa, Configuration config) { + evalUnfold(apa, false, config) and + result = 1 and + (not apa instanceof AccessPathApproxCons1 or expensiveLen1to2unfolding(apa, config)) + or + evalUnfold(apa, false, config) and + result = count1to2unfold(apa, config) and + not expensiveLen1to2unfolding(apa, config) + or + evalUnfold(apa, true, config) and + result = countPotentialAps(apa, config) +} + +/** + * Gets the number of `AccessPath`s that would correspond to `apa` assuming + * that it is expanded to a precise head-tail representation. + */ +language[monotonicAggregates] +private int countPotentialAps(AccessPathApprox apa, Configuration config) { + apa instanceof AccessPathApproxNil and result = 1 + or + result = strictsum(AccessPathApprox tail | tail = getATail(apa, config) | countAps(tail, config)) +} + +private newtype TAccessPath = + TAccessPathNil(DataFlowType t) or + TAccessPathCons(TypedContent head, AccessPath tail) { + exists(AccessPathApproxCons apa | + not evalUnfold(apa, false, _) and + head = apa.getHead() and + tail.getApprox() = getATail(apa, _) + ) + } or + TAccessPathCons2(TypedContent head1, TypedContent head2, int len) { + exists(AccessPathApproxCons apa | + evalUnfold(apa, false, _) and + not expensiveLen1to2unfolding(apa, _) and + apa.len() = len and + head1 = apa.getHead() and + head2 = getATail(apa, _).getHead() + ) + } or + TAccessPathCons1(TypedContent head, int len) { + exists(AccessPathApproxCons apa | + evalUnfold(apa, false, _) and + expensiveLen1to2unfolding(apa, _) and + apa.len() = len and + head = apa.getHead() + ) + } + +private newtype TPathNode = + TPathNodeMid(NodeEx node, CallContext cc, SummaryCtx sc, AccessPath ap, Configuration config) { + // A PathNode is introduced by a source ... + Stage4::revFlow(node, config) and + sourceNode(node, config) and + ( + if hasSourceCallCtx(config) + then cc instanceof CallContextSomeCall + else cc instanceof CallContextAny + ) and + sc instanceof SummaryCtxNone and + ap = TAccessPathNil(node.getDataFlowType()) + or + // ... or a step from an existing PathNode to another node. + exists(PathNodeMid mid | + pathStep(mid, node, cc, sc, ap) and + pragma[only_bind_into](config) = mid.getConfiguration() and + Stage4::revFlow(node, _, _, ap.getApprox(), pragma[only_bind_into](config)) + ) + } or + TPathNodeSink(NodeEx node, Configuration config) { + exists(PathNodeMid sink | + sink.isAtSink() and + node = sink.getNodeEx() and + config = sink.getConfiguration() + ) + } + +/** + * A list of `TypedContent`s followed by a `DataFlowType`. If data flows from a + * source to a given node with a given `AccessPath`, this indicates the sequence + * of dereference operations needed to get from the value in the node to the + * tracked object. The final type indicates the type of the tracked object. + */ +abstract private class AccessPath extends TAccessPath { + /** Gets the head of this access path, if any. */ + abstract TypedContent getHead(); + + /** Gets the tail of this access path, if any. */ + abstract AccessPath getTail(); + + /** Gets the front of this access path. */ + abstract AccessPathFront getFront(); + + /** Gets the approximation of this access path. */ + abstract AccessPathApprox getApprox(); + + /** Gets the length of this access path. */ + abstract int length(); + + /** Gets a textual representation of this access path. */ + abstract string toString(); + + /** Gets the access path obtained by popping `tc` from this access path, if any. */ + final AccessPath pop(TypedContent tc) { + result = this.getTail() and + tc = this.getHead() + } + + /** Gets the access path obtained by pushing `tc` onto this access path. */ + final AccessPath push(TypedContent tc) { this = result.pop(tc) } +} + +private class AccessPathNil extends AccessPath, TAccessPathNil { + private DataFlowType t; + + AccessPathNil() { this = TAccessPathNil(t) } + + DataFlowType getType() { result = t } + + override TypedContent getHead() { none() } + + override AccessPath getTail() { none() } + + override AccessPathFrontNil getFront() { result = TFrontNil(t) } + + override AccessPathApproxNil getApprox() { result = TNil(t) } + + override int length() { result = 0 } + + override string toString() { result = concat(": " + ppReprType(t)) } +} + +private class AccessPathCons extends AccessPath, TAccessPathCons { + private TypedContent head; + private AccessPath tail; + + AccessPathCons() { this = TAccessPathCons(head, tail) } + + override TypedContent getHead() { result = head } + + override AccessPath getTail() { result = tail } + + override AccessPathFrontHead getFront() { result = TFrontHead(head) } + + override AccessPathApproxCons getApprox() { + result = TConsNil(head, tail.(AccessPathNil).getType()) + or + result = TConsCons(head, tail.getHead(), this.length()) + or + result = TCons1(head, this.length()) + } + + override int length() { result = 1 + tail.length() } + + private string toStringImpl(boolean needsSuffix) { + exists(DataFlowType t | + tail = TAccessPathNil(t) and + needsSuffix = false and + result = head.toString() + "]" + concat(" : " + ppReprType(t)) + ) + or + result = head + ", " + tail.(AccessPathCons).toStringImpl(needsSuffix) + or + exists(TypedContent tc2, TypedContent tc3, int len | tail = TAccessPathCons2(tc2, tc3, len) | + result = head + ", " + tc2 + ", " + tc3 + ", ... (" and len > 2 and needsSuffix = true + or + result = head + ", " + tc2 + ", " + tc3 + "]" and len = 2 and needsSuffix = false + ) + or + exists(TypedContent tc2, int len | tail = TAccessPathCons1(tc2, len) | + result = head + ", " + tc2 + ", ... (" and len > 1 and needsSuffix = true + or + result = head + ", " + tc2 + "]" and len = 1 and needsSuffix = false + ) + } + + override string toString() { + result = "[" + this.toStringImpl(true) + this.length().toString() + ")]" + or + result = "[" + this.toStringImpl(false) + } +} + +private class AccessPathCons2 extends AccessPath, TAccessPathCons2 { + private TypedContent head1; + private TypedContent head2; + private int len; + + AccessPathCons2() { this = TAccessPathCons2(head1, head2, len) } + + override TypedContent getHead() { result = head1 } + + override AccessPath getTail() { + Stage4::consCand(head1, result.getApprox(), _) and + result.getHead() = head2 and + result.length() = len - 1 + } + + override AccessPathFrontHead getFront() { result = TFrontHead(head1) } + + override AccessPathApproxCons getApprox() { + result = TConsCons(head1, head2, len) or + result = TCons1(head1, len) + } + + override int length() { result = len } + + override string toString() { + if len = 2 + then result = "[" + head1.toString() + ", " + head2.toString() + "]" + else + result = "[" + head1.toString() + ", " + head2.toString() + ", ... (" + len.toString() + ")]" + } +} + +private class AccessPathCons1 extends AccessPath, TAccessPathCons1 { + private TypedContent head; + private int len; + + AccessPathCons1() { this = TAccessPathCons1(head, len) } + + override TypedContent getHead() { result = head } + + override AccessPath getTail() { + Stage4::consCand(head, result.getApprox(), _) and result.length() = len - 1 + } + + override AccessPathFrontHead getFront() { result = TFrontHead(head) } + + override AccessPathApproxCons getApprox() { result = TCons1(head, len) } + + override int length() { result = len } + + override string toString() { + if len = 1 + then result = "[" + head.toString() + "]" + else result = "[" + head.toString() + ", ... (" + len.toString() + ")]" + } +} + +/** + * A `Node` augmented with a call context (except for sinks), an access path, and a configuration. + * Only those `PathNode`s that are reachable from a source are generated. + */ +class PathNode extends TPathNode { + /** Gets a textual representation of this element. */ + string toString() { none() } + + /** + * Gets a textual representation of this element, including a textual + * representation of the call context. + */ + string toStringWithContext() { none() } + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + none() + } + + /** Gets the underlying `Node`. */ + final Node getNode() { this.(PathNodeImpl).getNodeEx().projectToNode() = result } + + /** Gets the associated configuration. */ + Configuration getConfiguration() { none() } + + private PathNode getASuccessorIfHidden() { + this.(PathNodeImpl).isHidden() and + result = this.(PathNodeImpl).getASuccessorImpl() + } + + /** Gets a successor of this node, if any. */ + final PathNode getASuccessor() { + result = this.(PathNodeImpl).getASuccessorImpl().getASuccessorIfHidden*() and + not this.(PathNodeImpl).isHidden() and + not result.(PathNodeImpl).isHidden() + } + + /** Holds if this node is a source. */ + predicate isSource() { none() } +} + +abstract private class PathNodeImpl extends PathNode { + abstract PathNode getASuccessorImpl(); + + abstract NodeEx getNodeEx(); + + predicate isHidden() { + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + } + + private string ppAp() { + this instanceof PathNodeSink and result = "" + or + exists(string s | s = this.(PathNodeMid).getAp().toString() | + if s = "" then result = "" else result = " " + s + ) + } + + private string ppCtx() { + this instanceof PathNodeSink and result = "" + or + result = " <" + this.(PathNodeMid).getCallContext().toString() + ">" + } + + override string toString() { result = this.getNodeEx().toString() + this.ppAp() } + + override string toStringWithContext() { + result = this.getNodeEx().toString() + this.ppAp() + this.ppCtx() + } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getNodeEx().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +/** Holds if `n` can reach a sink. */ +private predicate directReach(PathNode n) { + n instanceof PathNodeSink or directReach(n.getASuccessor()) +} + +/** Holds if `n` can reach a sink or is used in a subpath. */ +private predicate reach(PathNode n) { directReach(n) or Subpaths::retReach(n) } + +/** Holds if `n1.getASuccessor() = n2` and `n2` can reach a sink. */ +private predicate pathSucc(PathNode n1, PathNode n2) { n1.getASuccessor() = n2 and directReach(n2) } + +private predicate pathSuccPlus(PathNode n1, PathNode n2) = fastTC(pathSucc/2)(n1, n2) + +/** + * Provides the query predicates needed to include a graph in a path-problem query. + */ +module PathGraph { + /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ + query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) } + + /** Holds if `n` is a node in the graph of data flow path explanations. */ + query predicate nodes(PathNode n, string key, string val) { + reach(n) and key = "semmle.label" and val = n.toString() + } + + query predicate subpaths = Subpaths::subpaths/4; +} + +/** + * An intermediate flow graph node. This is a triple consisting of a `Node`, + * a `CallContext`, and a `Configuration`. + */ +private class PathNodeMid extends PathNodeImpl, TPathNodeMid { + NodeEx node; + CallContext cc; + SummaryCtx sc; + AccessPath ap; + Configuration config; + + PathNodeMid() { this = TPathNodeMid(node, cc, sc, ap, config) } + + override NodeEx getNodeEx() { result = node } + + CallContext getCallContext() { result = cc } + + SummaryCtx getSummaryCtx() { result = sc } + + AccessPath getAp() { result = ap } + + override Configuration getConfiguration() { result = config } + + private PathNodeMid getSuccMid() { + pathStep(this, result.getNodeEx(), result.getCallContext(), result.getSummaryCtx(), + result.getAp()) and + result.getConfiguration() = unbindConf(this.getConfiguration()) + } + + override PathNodeImpl getASuccessorImpl() { + // an intermediate step to another intermediate node + result = this.getSuccMid() + or + // a final step to a sink + result = this.getSuccMid().projectToSink() + } + + override predicate isSource() { + sourceNode(node, config) and + ( + if hasSourceCallCtx(config) + then cc instanceof CallContextSomeCall + else cc instanceof CallContextAny + ) and + sc instanceof SummaryCtxNone and + ap instanceof AccessPathNil + } + + predicate isAtSink() { + sinkNode(node, config) and + ap instanceof AccessPathNil and + if hasSinkCallCtx(config) + then + // For `FeatureHasSinkCallContext` the condition `cc instanceof CallContextNoCall` + // is exactly what we need to check. This also implies + // `sc instanceof SummaryCtxNone`. + // For `FeatureEqualSourceSinkCallContext` the initial call context was + // set to `CallContextSomeCall` and jumps are disallowed, so + // `cc instanceof CallContextNoCall` never holds. On the other hand, + // in this case there's never any need to enter a call except to identify + // a summary, so the condition in `pathIntoCallable` enforces this, which + // means that `sc instanceof SummaryCtxNone` holds if and only if we are + // in the call context of the source. + sc instanceof SummaryCtxNone or + cc instanceof CallContextNoCall + else any() + } + + PathNodeSink projectToSink() { + this.isAtSink() and + result.getNodeEx() = node and + result.getConfiguration() = unbindConf(config) + } +} + +/** + * A flow graph node corresponding to a sink. This is disjoint from the + * intermediate nodes in order to uniquely correspond to a given sink by + * excluding the `CallContext`. + */ +private class PathNodeSink extends PathNodeImpl, TPathNodeSink { + NodeEx node; + Configuration config; + + PathNodeSink() { this = TPathNodeSink(node, config) } + + override NodeEx getNodeEx() { result = node } + + override Configuration getConfiguration() { result = config } + + override PathNode getASuccessorImpl() { none() } + + override predicate isSource() { sourceNode(node, config) } +} + +/** + * Holds if data may flow from `mid` to `node`. The last step in or out of + * a callable is recorded by `cc`. + */ +private predicate pathStep( + PathNodeMid mid, NodeEx node, CallContext cc, SummaryCtx sc, AccessPath ap +) { + exists(AccessPath ap0, NodeEx midnode, Configuration conf, LocalCallContext localCC | + midnode = mid.getNodeEx() and + conf = mid.getConfiguration() and + cc = mid.getCallContext() and + sc = mid.getSummaryCtx() and + localCC = + getLocalCallContext(pragma[only_bind_into](pragma[only_bind_out](cc)), + midnode.getEnclosingCallable()) and + ap0 = mid.getAp() + | + localFlowBigStep(midnode, node, true, _, conf, localCC) and + ap = ap0 + or + localFlowBigStep(midnode, node, false, ap.getFront(), conf, localCC) and + ap0 instanceof AccessPathNil + ) + or + jumpStep(mid.getNodeEx(), node, mid.getConfiguration()) and + cc instanceof CallContextAny and + sc instanceof SummaryCtxNone and + ap = mid.getAp() + or + additionalJumpStep(mid.getNodeEx(), node, mid.getConfiguration()) and + cc instanceof CallContextAny and + sc instanceof SummaryCtxNone and + mid.getAp() instanceof AccessPathNil and + ap = TAccessPathNil(node.getDataFlowType()) + or + exists(TypedContent tc | pathStoreStep(mid, node, ap.pop(tc), tc, cc)) and + sc = mid.getSummaryCtx() + or + exists(TypedContent tc | pathReadStep(mid, node, ap.push(tc), tc, cc)) and + sc = mid.getSummaryCtx() + or + pathIntoCallable(mid, node, _, cc, sc, _, _) and ap = mid.getAp() + or + pathOutOfCallable(mid, node, cc) and ap = mid.getAp() and sc instanceof SummaryCtxNone + or + pathThroughCallable(mid, node, cc, ap) and sc = mid.getSummaryCtx() +} + +pragma[nomagic] +private predicate pathReadStep( + PathNodeMid mid, NodeEx node, AccessPath ap0, TypedContent tc, CallContext cc +) { + ap0 = mid.getAp() and + tc = ap0.getHead() and + Stage4::readStepCand(mid.getNodeEx(), tc.getContent(), node, mid.getConfiguration()) and + cc = mid.getCallContext() +} + +pragma[nomagic] +private predicate pathStoreStep( + PathNodeMid mid, NodeEx node, AccessPath ap0, TypedContent tc, CallContext cc +) { + ap0 = mid.getAp() and + Stage4::storeStepCand(mid.getNodeEx(), _, tc, node, _, mid.getConfiguration()) and + cc = mid.getCallContext() +} + +private predicate pathOutOfCallable0( + PathNodeMid mid, ReturnPosition pos, CallContext innercc, AccessPathApprox apa, + Configuration config +) { + pos = mid.getNodeEx().(RetNodeEx).getReturnPosition() and + innercc = mid.getCallContext() and + innercc instanceof CallContextNoCall and + apa = mid.getAp().getApprox() and + config = mid.getConfiguration() +} + +pragma[nomagic] +private predicate pathOutOfCallable1( + PathNodeMid mid, DataFlowCall call, ReturnKindExt kind, CallContext cc, AccessPathApprox apa, + Configuration config +) { + exists(ReturnPosition pos, DataFlowCallable c, CallContext innercc | + pathOutOfCallable0(mid, pos, innercc, apa, config) and + c = pos.getCallable() and + kind = pos.getKind() and + resolveReturn(innercc, c, call) + | + if reducedViableImplInReturn(c, call) then cc = TReturn(c, call) else cc = TAnyCallContext() + ) +} + +pragma[noinline] +private NodeEx getAnOutNodeFlow( + ReturnKindExt kind, DataFlowCall call, AccessPathApprox apa, Configuration config +) { + result.asNode() = kind.getAnOutNode(call) and + Stage4::revFlow(result, _, _, apa, config) +} + +/** + * Holds if data may flow from `mid` to `out`. The last step of this path + * is a return from a callable and is recorded by `cc`, if needed. + */ +pragma[noinline] +private predicate pathOutOfCallable(PathNodeMid mid, NodeEx out, CallContext cc) { + exists(ReturnKindExt kind, DataFlowCall call, AccessPathApprox apa, Configuration config | + pathOutOfCallable1(mid, call, kind, cc, apa, config) and + out = getAnOutNodeFlow(kind, call, apa, config) + ) +} + +/** + * Holds if data may flow from `mid` to the `i`th argument of `call` in `cc`. + */ +pragma[noinline] +private predicate pathIntoArg( + PathNodeMid mid, int i, CallContext cc, DataFlowCall call, AccessPath ap, AccessPathApprox apa, + Configuration config +) { + exists(ArgNode arg | + arg = mid.getNodeEx().asNode() and + cc = mid.getCallContext() and + arg.argumentOf(call, i) and + ap = mid.getAp() and + apa = ap.getApprox() and + config = mid.getConfiguration() + ) +} + +pragma[nomagic] +private predicate parameterCand( + DataFlowCallable callable, int i, AccessPathApprox apa, Configuration config +) { + exists(ParamNodeEx p | + Stage4::revFlow(p, _, _, apa, config) and + p.isParameterOf(callable, i) + ) +} + +pragma[nomagic] +private predicate pathIntoCallable0( + PathNodeMid mid, DataFlowCallable callable, int i, CallContext outercc, DataFlowCall call, + AccessPath ap, Configuration config +) { + exists(AccessPathApprox apa | + pathIntoArg(mid, pragma[only_bind_into](i), outercc, call, ap, pragma[only_bind_into](apa), + pragma[only_bind_into](config)) and + callable = resolveCall(call, outercc) and + parameterCand(callable, pragma[only_bind_into](i), pragma[only_bind_into](apa), + pragma[only_bind_into](config)) + ) +} + +/** + * Holds if data may flow from `mid` to `p` through `call`. The contexts + * before and after entering the callable are `outercc` and `innercc`, + * respectively. + */ +pragma[nomagic] +private predicate pathIntoCallable( + PathNodeMid mid, ParamNodeEx p, CallContext outercc, CallContextCall innercc, SummaryCtx sc, + DataFlowCall call, Configuration config +) { + exists(int i, DataFlowCallable callable, AccessPath ap | + pathIntoCallable0(mid, callable, i, outercc, call, ap, config) and + p.isParameterOf(callable, i) and + ( + sc = TSummaryCtxSome(p, ap) + or + not exists(TSummaryCtxSome(p, ap)) and + sc = TSummaryCtxNone() and + // When the call contexts of source and sink needs to match then there's + // never any reason to enter a callable except to find a summary. See also + // the comment in `PathNodeMid::isAtSink`. + not config.getAFeature() instanceof FeatureEqualSourceSinkCallContext + ) + | + if recordDataFlowCallSite(call, callable) + then innercc = TSpecificCall(call) + else innercc = TSomeCall() + ) +} + +/** Holds if data may flow from a parameter given by `sc` to a return of kind `kind`. */ +pragma[nomagic] +private predicate paramFlowsThrough( + ReturnKindExt kind, CallContextCall cc, SummaryCtxSome sc, AccessPath ap, AccessPathApprox apa, + Configuration config +) { + exists(PathNodeMid mid, RetNodeEx ret, int pos | + mid.getNodeEx() = ret and + kind = ret.getKind() and + cc = mid.getCallContext() and + sc = mid.getSummaryCtx() and + config = mid.getConfiguration() and + ap = mid.getAp() and + apa = ap.getApprox() and + pos = sc.getParameterPos() and + // we don't expect a parameter to return stored in itself, unless explicitly allowed + ( + not kind.(ParamUpdateReturnKind).getPosition() = pos + or + sc.getParamNode().allowParameterReturnInSelf() + ) + ) +} + +pragma[nomagic] +private predicate pathThroughCallable0( + DataFlowCall call, PathNodeMid mid, ReturnKindExt kind, CallContext cc, AccessPath ap, + AccessPathApprox apa, Configuration config +) { + exists(CallContext innercc, SummaryCtx sc | + pathIntoCallable(mid, _, cc, innercc, sc, call, config) and + paramFlowsThrough(kind, innercc, sc, ap, apa, config) + ) +} + +/** + * Holds if data may flow from `mid` through a callable to the node `out`. + * The context `cc` is restored to its value prior to entering the callable. + */ +pragma[noinline] +private predicate pathThroughCallable(PathNodeMid mid, NodeEx out, CallContext cc, AccessPath ap) { + exists(DataFlowCall call, ReturnKindExt kind, AccessPathApprox apa, Configuration config | + pathThroughCallable0(call, mid, kind, cc, ap, apa, config) and + out = getAnOutNodeFlow(kind, call, apa, config) + ) +} + +private module Subpaths { + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple and `ret` is determined by + * `kind`, `sc`, `apout`, and `innercc`. + */ + pragma[nomagic] + private predicate subpaths01( + PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, + NodeEx out, AccessPath apout + ) { + exists(Configuration config | + pathThroughCallable(arg, out, _, pragma[only_bind_into](apout)) and + pathIntoCallable(arg, par, _, innercc, sc, _, config) and + paramFlowsThrough(kind, innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and + not arg.isHidden() + ) + } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple and `ret` is determined by + * `kind`, `sc`, `apout`, and `innercc`. + */ + pragma[nomagic] + private predicate subpaths02( + PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, + NodeEx out, AccessPath apout + ) { + subpaths01(arg, par, sc, innercc, kind, out, apout) and + out.asNode() = kind.getAnOutNode(_) + } + + pragma[nomagic] + private Configuration getPathNodeConf(PathNode n) { result = n.getConfiguration() } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple. + */ + pragma[nomagic] + private predicate subpaths03( + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, AccessPath apout + ) { + exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | + subpaths02(arg, par, sc, innercc, kind, out, apout) and + ret.getNodeEx() = retnode and + kind = retnode.getKind() and + innercc = ret.getCallContext() and + sc = ret.getSummaryCtx() and + ret.getConfiguration() = unbindConf(getPathNodeConf(arg)) and + apout = ret.getAp() + ) + } + + private PathNodeImpl localStepToHidden(PathNodeImpl n) { + n.getASuccessorImpl() = result and + result.isHidden() and + exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | + localFlowBigStep(n1, n2, _, _, _, _) or + store(n1, _, n2, _, _) or + read(n1, _, n2, _) + ) + } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through + * a subpath between `par` and `ret` with the connecting edges `arg -> par` and + * `ret -> out` is summarized as the edge `arg -> out`. + */ + predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNodeMid out) { + exists(ParamNodeEx p, NodeEx o, AccessPath apout | + pragma[only_bind_into](arg).getASuccessor() = par and + pragma[only_bind_into](arg).getASuccessor() = out and + subpaths03(arg, p, localStepToHidden*(ret), o, apout) and + not ret.isHidden() and + par.getNodeEx() = p and + out.getNodeEx() = o and + out.getAp() = apout + ) + } + + /** + * Holds if `n` can reach a return node in a summarized subpath. + */ + predicate retReach(PathNode n) { + subpaths(_, _, n, _) + or + exists(PathNode mid | + retReach(mid) and + n.getASuccessor() = mid and + not subpaths(_, mid, _, _) + ) + } +} + +/** + * Holds if data can flow (inter-procedurally) from `source` to `sink`. + * + * Will only have results if `configuration` has non-empty sources and + * sinks. + */ +private predicate flowsTo( + PathNode flowsource, PathNodeSink flowsink, Node source, Node sink, Configuration configuration +) { + flowsource.isSource() and + flowsource.getConfiguration() = configuration and + flowsource.(PathNodeImpl).getNodeEx().asNode() = source and + (flowsource = flowsink or pathSuccPlus(flowsource, flowsink)) and + flowsink.getNodeEx().asNode() = sink +} + +/** + * Holds if data can flow (inter-procedurally) from `source` to `sink`. + * + * Will only have results if `configuration` has non-empty sources and + * sinks. + */ +predicate flowsTo(Node source, Node sink, Configuration configuration) { + flowsTo(_, _, source, sink, configuration) +} + +private predicate finalStats(boolean fwd, int nodes, int fields, int conscand, int tuples) { + fwd = true and + nodes = count(NodeEx n0 | exists(PathNodeImpl pn | pn.getNodeEx() = n0)) and + fields = count(TypedContent f0 | exists(PathNodeMid pn | pn.getAp().getHead() = f0)) and + conscand = count(AccessPath ap | exists(PathNodeMid pn | pn.getAp() = ap)) and + tuples = count(PathNode pn) + or + fwd = false and + nodes = count(NodeEx n0 | exists(PathNodeImpl pn | pn.getNodeEx() = n0 and reach(pn))) and + fields = count(TypedContent f0 | exists(PathNodeMid pn | pn.getAp().getHead() = f0 and reach(pn))) and + conscand = count(AccessPath ap | exists(PathNodeMid pn | pn.getAp() = ap and reach(pn))) and + tuples = count(PathNode pn | reach(pn)) +} + +/** + * INTERNAL: Only for debugging. + * + * Calculates per-stage metrics for data flow. + */ +predicate stageStats( + int n, string stage, int nodes, int fields, int conscand, int tuples, Configuration config +) { + stage = "1 Fwd" and n = 10 and Stage1::stats(true, nodes, fields, conscand, tuples, config) + or + stage = "1 Rev" and n = 15 and Stage1::stats(false, nodes, fields, conscand, tuples, config) + or + stage = "2 Fwd" and n = 20 and Stage2::stats(true, nodes, fields, conscand, tuples, config) + or + stage = "2 Rev" and n = 25 and Stage2::stats(false, nodes, fields, conscand, tuples, config) + or + stage = "3 Fwd" and n = 30 and Stage3::stats(true, nodes, fields, conscand, tuples, config) + or + stage = "3 Rev" and n = 35 and Stage3::stats(false, nodes, fields, conscand, tuples, config) + or + stage = "4 Fwd" and n = 40 and Stage4::stats(true, nodes, fields, conscand, tuples, config) + or + stage = "4 Rev" and n = 45 and Stage4::stats(false, nodes, fields, conscand, tuples, config) + or + stage = "5 Fwd" and n = 50 and finalStats(true, nodes, fields, conscand, tuples) + or + stage = "5 Rev" and n = 55 and finalStats(false, nodes, fields, conscand, tuples) +} + +private module FlowExploration { + private predicate callableStep(DataFlowCallable c1, DataFlowCallable c2, Configuration config) { + exists(NodeEx node1, NodeEx node2 | + jumpStep(node1, node2, config) + or + additionalJumpStep(node1, node2, config) + or + // flow into callable + viableParamArgEx(_, node2, node1) + or + // flow out of a callable + viableReturnPosOutEx(_, node1.(RetNodeEx).getReturnPosition(), node2) + | + c1 = node1.getEnclosingCallable() and + c2 = node2.getEnclosingCallable() and + c1 != c2 + ) + } + + private predicate interestingCallableSrc(DataFlowCallable c, Configuration config) { + exists(Node n | config.isSource(n) and c = getNodeEnclosingCallable(n)) + or + exists(DataFlowCallable mid | + interestingCallableSrc(mid, config) and callableStep(mid, c, config) + ) + } + + private predicate interestingCallableSink(DataFlowCallable c, Configuration config) { + exists(Node n | config.isSink(n) and c = getNodeEnclosingCallable(n)) + or + exists(DataFlowCallable mid | + interestingCallableSink(mid, config) and callableStep(c, mid, config) + ) + } + + private newtype TCallableExt = + TCallable(DataFlowCallable c, Configuration config) { + interestingCallableSrc(c, config) or + interestingCallableSink(c, config) + } or + TCallableSrc() or + TCallableSink() + + private predicate callableExtSrc(TCallableSrc src) { any() } + + private predicate callableExtSink(TCallableSink sink) { any() } + + private predicate callableExtStepFwd(TCallableExt ce1, TCallableExt ce2) { + exists(DataFlowCallable c1, DataFlowCallable c2, Configuration config | + callableStep(c1, c2, config) and + ce1 = TCallable(c1, pragma[only_bind_into](config)) and + ce2 = TCallable(c2, pragma[only_bind_into](config)) + ) + or + exists(Node n, Configuration config | + ce1 = TCallableSrc() and + config.isSource(n) and + ce2 = TCallable(getNodeEnclosingCallable(n), config) + ) + or + exists(Node n, Configuration config | + ce2 = TCallableSink() and + config.isSink(n) and + ce1 = TCallable(getNodeEnclosingCallable(n), config) + ) + } + + private predicate callableExtStepRev(TCallableExt ce1, TCallableExt ce2) { + callableExtStepFwd(ce2, ce1) + } + + private int distSrcExt(TCallableExt c) = + shortestDistances(callableExtSrc/1, callableExtStepFwd/2)(_, c, result) + + private int distSinkExt(TCallableExt c) = + shortestDistances(callableExtSink/1, callableExtStepRev/2)(_, c, result) + + private int distSrc(DataFlowCallable c, Configuration config) { + result = distSrcExt(TCallable(c, config)) - 1 + } + + private int distSink(DataFlowCallable c, Configuration config) { + result = distSinkExt(TCallable(c, config)) - 1 + } + + private newtype TPartialAccessPath = + TPartialNil(DataFlowType t) or + TPartialCons(TypedContent tc, int len) { len in [1 .. accessPathLimit()] } + + /** + * Conceptually a list of `TypedContent`s followed by a `Type`, but only the first + * element of the list and its length are tracked. If data flows from a source to + * a given node with a given `AccessPath`, this indicates the sequence of + * dereference operations needed to get from the value in the node to the + * tracked object. The final type indicates the type of the tracked object. + */ + private class PartialAccessPath extends TPartialAccessPath { + abstract string toString(); + + TypedContent getHead() { this = TPartialCons(result, _) } + + int len() { + this = TPartialNil(_) and result = 0 + or + this = TPartialCons(_, result) + } + + DataFlowType getType() { + this = TPartialNil(result) + or + exists(TypedContent head | this = TPartialCons(head, _) | result = head.getContainerType()) + } + } + + private class PartialAccessPathNil extends PartialAccessPath, TPartialNil { + override string toString() { + exists(DataFlowType t | this = TPartialNil(t) | result = concat(": " + ppReprType(t))) + } + } + + private class PartialAccessPathCons extends PartialAccessPath, TPartialCons { + override string toString() { + exists(TypedContent tc, int len | this = TPartialCons(tc, len) | + if len = 1 + then result = "[" + tc.toString() + "]" + else result = "[" + tc.toString() + ", ... (" + len.toString() + ")]" + ) + } + } + + private newtype TRevPartialAccessPath = + TRevPartialNil() or + TRevPartialCons(Content c, int len) { len in [1 .. accessPathLimit()] } + + /** + * Conceptually a list of `Content`s, but only the first + * element of the list and its length are tracked. + */ + private class RevPartialAccessPath extends TRevPartialAccessPath { + abstract string toString(); + + Content getHead() { this = TRevPartialCons(result, _) } + + int len() { + this = TRevPartialNil() and result = 0 + or + this = TRevPartialCons(_, result) + } + } + + private class RevPartialAccessPathNil extends RevPartialAccessPath, TRevPartialNil { + override string toString() { result = "" } + } + + private class RevPartialAccessPathCons extends RevPartialAccessPath, TRevPartialCons { + override string toString() { + exists(Content c, int len | this = TRevPartialCons(c, len) | + if len = 1 + then result = "[" + c.toString() + "]" + else result = "[" + c.toString() + ", ... (" + len.toString() + ")]" + ) + } + } + + private newtype TSummaryCtx1 = + TSummaryCtx1None() or + TSummaryCtx1Param(ParamNodeEx p) + + private newtype TSummaryCtx2 = + TSummaryCtx2None() or + TSummaryCtx2Some(PartialAccessPath ap) + + private newtype TRevSummaryCtx1 = + TRevSummaryCtx1None() or + TRevSummaryCtx1Some(ReturnPosition pos) + + private newtype TRevSummaryCtx2 = + TRevSummaryCtx2None() or + TRevSummaryCtx2Some(RevPartialAccessPath ap) + + private newtype TPartialPathNode = + TPartialPathNodeFwd( + NodeEx node, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, PartialAccessPath ap, + Configuration config + ) { + sourceNode(node, config) and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + ap = TPartialNil(node.getDataFlowType()) and + not fullBarrier(node, config) and + exists(config.explorationLimit()) + or + partialPathNodeMk0(node, cc, sc1, sc2, ap, config) and + distSrc(node.getEnclosingCallable(), config) <= config.explorationLimit() + } or + TPartialPathNodeRev( + NodeEx node, TRevSummaryCtx1 sc1, TRevSummaryCtx2 sc2, RevPartialAccessPath ap, + Configuration config + ) { + sinkNode(node, config) and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + ap = TRevPartialNil() and + not fullBarrier(node, config) and + exists(config.explorationLimit()) + or + exists(PartialPathNodeRev mid | + revPartialPathStep(mid, node, sc1, sc2, ap, config) and + not clearsContentCached(node.asNode(), ap.getHead()) and + not fullBarrier(node, config) and + distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() + ) + } + + pragma[nomagic] + private predicate partialPathNodeMk0( + NodeEx node, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, PartialAccessPath ap, + Configuration config + ) { + exists(PartialPathNodeFwd mid | + partialPathStep(mid, node, cc, sc1, sc2, ap, config) and + not fullBarrier(node, config) and + not clearsContentCached(node.asNode(), ap.getHead().getContent()) and + if node.asNode() instanceof CastingNode + then compatibleTypes(node.getDataFlowType(), ap.getType()) + else any() + ) + } + + /** + * A `Node` augmented with a call context, an access path, and a configuration. + */ + class PartialPathNode extends TPartialPathNode { + /** Gets a textual representation of this element. */ + string toString() { result = this.getNodeEx().toString() + this.ppAp() } + + /** + * Gets a textual representation of this element, including a textual + * representation of the call context. + */ + string toStringWithContext() { + result = this.getNodeEx().toString() + this.ppAp() + this.ppCtx() + } + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getNodeEx().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + + /** Gets the underlying `Node`. */ + final Node getNode() { this.getNodeEx().projectToNode() = result } + + private NodeEx getNodeEx() { + result = this.(PartialPathNodeFwd).getNodeEx() or + result = this.(PartialPathNodeRev).getNodeEx() + } + + /** Gets the associated configuration. */ + Configuration getConfiguration() { none() } + + /** Gets a successor of this node, if any. */ + PartialPathNode getASuccessor() { none() } + + /** + * Gets the approximate distance to the nearest source measured in number + * of interprocedural steps. + */ + int getSourceDistance() { + result = distSrc(this.getNodeEx().getEnclosingCallable(), this.getConfiguration()) + } + + /** + * Gets the approximate distance to the nearest sink measured in number + * of interprocedural steps. + */ + int getSinkDistance() { + result = distSink(this.getNodeEx().getEnclosingCallable(), this.getConfiguration()) + } + + private string ppAp() { + exists(string s | + s = this.(PartialPathNodeFwd).getAp().toString() or + s = this.(PartialPathNodeRev).getAp().toString() + | + if s = "" then result = "" else result = " " + s + ) + } + + private string ppCtx() { + result = " <" + this.(PartialPathNodeFwd).getCallContext().toString() + ">" + } + + /** Holds if this is a source in a forward-flow path. */ + predicate isFwdSource() { this.(PartialPathNodeFwd).isSource() } + + /** Holds if this is a sink in a reverse-flow path. */ + predicate isRevSink() { this.(PartialPathNodeRev).isSink() } + } + + /** + * Provides the query predicates needed to include a graph in a path-problem query. + */ + module PartialPathGraph { + /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ + query predicate edges(PartialPathNode a, PartialPathNode b) { a.getASuccessor() = b } + } + + private class PartialPathNodeFwd extends PartialPathNode, TPartialPathNodeFwd { + NodeEx node; + CallContext cc; + TSummaryCtx1 sc1; + TSummaryCtx2 sc2; + PartialAccessPath ap; + Configuration config; + + PartialPathNodeFwd() { this = TPartialPathNodeFwd(node, cc, sc1, sc2, ap, config) } + + NodeEx getNodeEx() { result = node } + + CallContext getCallContext() { result = cc } + + TSummaryCtx1 getSummaryCtx1() { result = sc1 } + + TSummaryCtx2 getSummaryCtx2() { result = sc2 } + + PartialAccessPath getAp() { result = ap } + + override Configuration getConfiguration() { result = config } + + override PartialPathNodeFwd getASuccessor() { + partialPathStep(this, result.getNodeEx(), result.getCallContext(), result.getSummaryCtx1(), + result.getSummaryCtx2(), result.getAp(), result.getConfiguration()) + } + + predicate isSource() { + sourceNode(node, config) and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + ap instanceof TPartialNil + } + } + + private class PartialPathNodeRev extends PartialPathNode, TPartialPathNodeRev { + NodeEx node; + TRevSummaryCtx1 sc1; + TRevSummaryCtx2 sc2; + RevPartialAccessPath ap; + Configuration config; + + PartialPathNodeRev() { this = TPartialPathNodeRev(node, sc1, sc2, ap, config) } + + NodeEx getNodeEx() { result = node } + + TRevSummaryCtx1 getSummaryCtx1() { result = sc1 } + + TRevSummaryCtx2 getSummaryCtx2() { result = sc2 } + + RevPartialAccessPath getAp() { result = ap } + + override Configuration getConfiguration() { result = config } + + override PartialPathNodeRev getASuccessor() { + revPartialPathStep(result, this.getNodeEx(), this.getSummaryCtx1(), this.getSummaryCtx2(), + this.getAp(), this.getConfiguration()) + } + + predicate isSink() { + sinkNode(node, config) and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + ap = TRevPartialNil() + } + } + + private predicate partialPathStep( + PartialPathNodeFwd mid, NodeEx node, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, + PartialAccessPath ap, Configuration config + ) { + not isUnreachableInCallCached(node.asNode(), cc.(CallContextSpecificCall).getCall()) and + ( + localFlowStep(mid.getNodeEx(), node, config) and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + ap = mid.getAp() and + config = mid.getConfiguration() + or + additionalLocalFlowStep(mid.getNodeEx(), node, config) and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + mid.getAp() instanceof PartialAccessPathNil and + ap = TPartialNil(node.getDataFlowType()) and + config = mid.getConfiguration() + ) + or + jumpStep(mid.getNodeEx(), node, config) and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + ap = mid.getAp() and + config = mid.getConfiguration() + or + additionalJumpStep(mid.getNodeEx(), node, config) and + cc instanceof CallContextAny and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() and + mid.getAp() instanceof PartialAccessPathNil and + ap = TPartialNil(node.getDataFlowType()) and + config = mid.getConfiguration() + or + partialPathStoreStep(mid, _, _, node, ap) and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + config = mid.getConfiguration() + or + exists(PartialAccessPath ap0, TypedContent tc | + partialPathReadStep(mid, ap0, tc, node, cc, config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + apConsFwd(ap, tc, ap0, config) + ) + or + partialPathIntoCallable(mid, node, _, cc, sc1, sc2, _, ap, config) + or + partialPathOutOfCallable(mid, node, cc, ap, config) and + sc1 = TSummaryCtx1None() and + sc2 = TSummaryCtx2None() + or + partialPathThroughCallable(mid, node, cc, ap, config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() + } + + bindingset[result, i] + private int unbindInt(int i) { i <= result and i >= result } + + pragma[inline] + private predicate partialPathStoreStep( + PartialPathNodeFwd mid, PartialAccessPath ap1, TypedContent tc, NodeEx node, + PartialAccessPath ap2 + ) { + exists(NodeEx midNode, DataFlowType contentType | + midNode = mid.getNodeEx() and + ap1 = mid.getAp() and + store(midNode, tc, node, contentType, mid.getConfiguration()) and + ap2.getHead() = tc and + ap2.len() = unbindInt(ap1.len() + 1) and + compatibleTypes(ap1.getType(), contentType) + ) + } + + pragma[nomagic] + private predicate apConsFwd( + PartialAccessPath ap1, TypedContent tc, PartialAccessPath ap2, Configuration config + ) { + exists(PartialPathNodeFwd mid | + partialPathStoreStep(mid, ap1, tc, _, ap2) and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate partialPathReadStep( + PartialPathNodeFwd mid, PartialAccessPath ap, TypedContent tc, NodeEx node, CallContext cc, + Configuration config + ) { + exists(NodeEx midNode | + midNode = mid.getNodeEx() and + ap = mid.getAp() and + read(midNode, tc.getContent(), node, pragma[only_bind_into](config)) and + ap.getHead() = tc and + pragma[only_bind_into](config) = mid.getConfiguration() and + cc = mid.getCallContext() + ) + } + + private predicate partialPathOutOfCallable0( + PartialPathNodeFwd mid, ReturnPosition pos, CallContext innercc, PartialAccessPath ap, + Configuration config + ) { + pos = mid.getNodeEx().(RetNodeEx).getReturnPosition() and + innercc = mid.getCallContext() and + innercc instanceof CallContextNoCall and + ap = mid.getAp() and + config = mid.getConfiguration() + } + + pragma[nomagic] + private predicate partialPathOutOfCallable1( + PartialPathNodeFwd mid, DataFlowCall call, ReturnKindExt kind, CallContext cc, + PartialAccessPath ap, Configuration config + ) { + exists(ReturnPosition pos, DataFlowCallable c, CallContext innercc | + partialPathOutOfCallable0(mid, pos, innercc, ap, config) and + c = pos.getCallable() and + kind = pos.getKind() and + resolveReturn(innercc, c, call) + | + if reducedViableImplInReturn(c, call) then cc = TReturn(c, call) else cc = TAnyCallContext() + ) + } + + private predicate partialPathOutOfCallable( + PartialPathNodeFwd mid, NodeEx out, CallContext cc, PartialAccessPath ap, Configuration config + ) { + exists(ReturnKindExt kind, DataFlowCall call | + partialPathOutOfCallable1(mid, call, kind, cc, ap, config) + | + out.asNode() = kind.getAnOutNode(call) + ) + } + + pragma[noinline] + private predicate partialPathIntoArg( + PartialPathNodeFwd mid, int i, CallContext cc, DataFlowCall call, PartialAccessPath ap, + Configuration config + ) { + exists(ArgNode arg | + arg = mid.getNodeEx().asNode() and + cc = mid.getCallContext() and + arg.argumentOf(call, i) and + ap = mid.getAp() and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate partialPathIntoCallable0( + PartialPathNodeFwd mid, DataFlowCallable callable, int i, CallContext outercc, + DataFlowCall call, PartialAccessPath ap, Configuration config + ) { + partialPathIntoArg(mid, i, outercc, call, ap, config) and + callable = resolveCall(call, outercc) + } + + private predicate partialPathIntoCallable( + PartialPathNodeFwd mid, ParamNodeEx p, CallContext outercc, CallContextCall innercc, + TSummaryCtx1 sc1, TSummaryCtx2 sc2, DataFlowCall call, PartialAccessPath ap, + Configuration config + ) { + exists(int i, DataFlowCallable callable | + partialPathIntoCallable0(mid, callable, i, outercc, call, ap, config) and + p.isParameterOf(callable, i) and + sc1 = TSummaryCtx1Param(p) and + sc2 = TSummaryCtx2Some(ap) + | + if recordDataFlowCallSite(call, callable) + then innercc = TSpecificCall(call) + else innercc = TSomeCall() + ) + } + + pragma[nomagic] + private predicate paramFlowsThroughInPartialPath( + ReturnKindExt kind, CallContextCall cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, + PartialAccessPath ap, Configuration config + ) { + exists(PartialPathNodeFwd mid, RetNodeEx ret | + mid.getNodeEx() = ret and + kind = ret.getKind() and + cc = mid.getCallContext() and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + config = mid.getConfiguration() and + ap = mid.getAp() + ) + } + + pragma[noinline] + private predicate partialPathThroughCallable0( + DataFlowCall call, PartialPathNodeFwd mid, ReturnKindExt kind, CallContext cc, + PartialAccessPath ap, Configuration config + ) { + exists(CallContext innercc, TSummaryCtx1 sc1, TSummaryCtx2 sc2 | + partialPathIntoCallable(mid, _, cc, innercc, sc1, sc2, call, _, config) and + paramFlowsThroughInPartialPath(kind, innercc, sc1, sc2, ap, config) + ) + } + + private predicate partialPathThroughCallable( + PartialPathNodeFwd mid, NodeEx out, CallContext cc, PartialAccessPath ap, Configuration config + ) { + exists(DataFlowCall call, ReturnKindExt kind | + partialPathThroughCallable0(call, mid, kind, cc, ap, config) and + out.asNode() = kind.getAnOutNode(call) + ) + } + + private predicate revPartialPathStep( + PartialPathNodeRev mid, NodeEx node, TRevSummaryCtx1 sc1, TRevSummaryCtx2 sc2, + RevPartialAccessPath ap, Configuration config + ) { + localFlowStep(node, mid.getNodeEx(), config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + ap = mid.getAp() and + config = mid.getConfiguration() + or + additionalLocalFlowStep(node, mid.getNodeEx(), config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + mid.getAp() instanceof RevPartialAccessPathNil and + ap = TRevPartialNil() and + config = mid.getConfiguration() + or + jumpStep(node, mid.getNodeEx(), config) and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + ap = mid.getAp() and + config = mid.getConfiguration() + or + additionalJumpStep(node, mid.getNodeEx(), config) and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + mid.getAp() instanceof RevPartialAccessPathNil and + ap = TRevPartialNil() and + config = mid.getConfiguration() + or + revPartialPathReadStep(mid, _, _, node, ap) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + config = mid.getConfiguration() + or + exists(RevPartialAccessPath ap0, Content c | + revPartialPathStoreStep(mid, ap0, c, node, config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + apConsRev(ap, c, ap0, config) + ) + or + exists(ParamNodeEx p | + mid.getNodeEx() = p and + viableParamArgEx(_, p, node) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + sc1 = TRevSummaryCtx1None() and + sc2 = TRevSummaryCtx2None() and + ap = mid.getAp() and + config = mid.getConfiguration() + ) + or + exists(ReturnPosition pos | + revPartialPathIntoReturn(mid, pos, sc1, sc2, _, ap, config) and + pos = getReturnPosition(node.asNode()) + ) + or + revPartialPathThroughCallable(mid, node, ap, config) and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() + } + + pragma[inline] + private predicate revPartialPathReadStep( + PartialPathNodeRev mid, RevPartialAccessPath ap1, Content c, NodeEx node, + RevPartialAccessPath ap2 + ) { + exists(NodeEx midNode | + midNode = mid.getNodeEx() and + ap1 = mid.getAp() and + read(node, c, midNode, mid.getConfiguration()) and + ap2.getHead() = c and + ap2.len() = unbindInt(ap1.len() + 1) + ) + } + + pragma[nomagic] + private predicate apConsRev( + RevPartialAccessPath ap1, Content c, RevPartialAccessPath ap2, Configuration config + ) { + exists(PartialPathNodeRev mid | + revPartialPathReadStep(mid, ap1, c, _, ap2) and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate revPartialPathStoreStep( + PartialPathNodeRev mid, RevPartialAccessPath ap, Content c, NodeEx node, Configuration config + ) { + exists(NodeEx midNode, TypedContent tc | + midNode = mid.getNodeEx() and + ap = mid.getAp() and + store(node, tc, midNode, _, config) and + ap.getHead() = c and + config = mid.getConfiguration() and + tc.getContent() = c + ) + } + + pragma[nomagic] + private predicate revPartialPathIntoReturn( + PartialPathNodeRev mid, ReturnPosition pos, TRevSummaryCtx1Some sc1, TRevSummaryCtx2Some sc2, + DataFlowCall call, RevPartialAccessPath ap, Configuration config + ) { + exists(NodeEx out | + mid.getNodeEx() = out and + viableReturnPosOutEx(call, pos, out) and + sc1 = TRevSummaryCtx1Some(pos) and + sc2 = TRevSummaryCtx2Some(ap) and + ap = mid.getAp() and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate revPartialPathFlowsThrough( + int pos, TRevSummaryCtx1Some sc1, TRevSummaryCtx2Some sc2, RevPartialAccessPath ap, + Configuration config + ) { + exists(PartialPathNodeRev mid, ParamNodeEx p | + mid.getNodeEx() = p and + p.getPosition() = pos and + sc1 = mid.getSummaryCtx1() and + sc2 = mid.getSummaryCtx2() and + ap = mid.getAp() and + config = mid.getConfiguration() + ) + } + + pragma[nomagic] + private predicate revPartialPathThroughCallable0( + DataFlowCall call, PartialPathNodeRev mid, int pos, RevPartialAccessPath ap, + Configuration config + ) { + exists(TRevSummaryCtx1Some sc1, TRevSummaryCtx2Some sc2 | + revPartialPathIntoReturn(mid, _, sc1, sc2, call, _, config) and + revPartialPathFlowsThrough(pos, sc1, sc2, ap, config) + ) + } + + pragma[nomagic] + private predicate revPartialPathThroughCallable( + PartialPathNodeRev mid, ArgNodeEx node, RevPartialAccessPath ap, Configuration config + ) { + exists(DataFlowCall call, int pos | + revPartialPathThroughCallable0(call, mid, pos, ap, config) and + node.asNode().(ArgNode).argumentOf(call, pos) + ) + } +} + +import FlowExploration + +private predicate partialFlow( + PartialPathNode source, PartialPathNode node, Configuration configuration +) { + source.getConfiguration() = configuration and + source.isFwdSource() and + node = source.getASuccessor+() +} + +private predicate revPartialFlow( + PartialPathNode node, PartialPathNode sink, Configuration configuration +) { + sink.getConfiguration() = configuration and + sink.isRevSink() and + node.getASuccessor+() = sink +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll new file mode 100644 index 00000000000..c28ceabb438 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll @@ -0,0 +1,1331 @@ +private import DataFlowImplSpecific::Private +private import DataFlowImplSpecific::Public +import Cached + +module DataFlowImplCommonPublic { + private newtype TFlowFeature = + TFeatureHasSourceCallContext() or + TFeatureHasSinkCallContext() or + TFeatureEqualSourceSinkCallContext() + + /** A flow configuration feature for use in `Configuration::getAFeature()`. */ + class FlowFeature extends TFlowFeature { + string toString() { none() } + } + + /** + * A flow configuration feature that implies that sources have some existing + * call context. + */ + class FeatureHasSourceCallContext extends FlowFeature, TFeatureHasSourceCallContext { + override string toString() { result = "FeatureHasSourceCallContext" } + } + + /** + * A flow configuration feature that implies that sinks have some existing + * call context. + */ + class FeatureHasSinkCallContext extends FlowFeature, TFeatureHasSinkCallContext { + override string toString() { result = "FeatureHasSinkCallContext" } + } + + /** + * A flow configuration feature that implies that source-sink pairs have some + * shared existing call context. + */ + class FeatureEqualSourceSinkCallContext extends FlowFeature, TFeatureEqualSourceSinkCallContext { + override string toString() { result = "FeatureEqualSourceSinkCallContext" } + } +} + +/** + * The cost limits for the `AccessPathFront` to `AccessPathApprox` expansion. + * + * `apLimit` bounds the acceptable fan-out, and `tupleLimit` bounds the + * estimated per-`AccessPathFront` tuple cost. Access paths exceeding both of + * these limits are represented with lower precision during pruning. + */ +predicate accessPathApproxCostLimits(int apLimit, int tupleLimit) { + apLimit = 10 and + tupleLimit = 10000 +} + +/** + * The cost limits for the `AccessPathApprox` to `AccessPath` expansion. + * + * `apLimit` bounds the acceptable fan-out, and `tupleLimit` bounds the + * estimated per-`AccessPathApprox` tuple cost. Access paths exceeding both of + * these limits are represented with lower precision. + */ +predicate accessPathCostLimits(int apLimit, int tupleLimit) { + apLimit = 5 and + tupleLimit = 1000 +} + +/** + * Provides a simple data-flow analysis for resolving lambda calls. The analysis + * currently excludes read-steps, store-steps, and flow-through. + * + * The analysis uses non-linear recursion: When computing a flow path in or out + * of a call, we use the results of the analysis recursively to resolve lambda + * calls. For this reason, we cannot reuse the code from `DataFlowImpl.qll` directly. + */ +private module LambdaFlow { + private predicate viableParamNonLambda(DataFlowCall call, int i, ParamNode p) { + p.isParameterOf(viableCallable(call), i) + } + + private predicate viableParamLambda(DataFlowCall call, int i, ParamNode p) { + p.isParameterOf(viableCallableLambda(call, _), i) + } + + private predicate viableParamArgNonLambda(DataFlowCall call, ParamNode p, ArgNode arg) { + exists(int i | + viableParamNonLambda(call, i, p) and + arg.argumentOf(call, i) + ) + } + + private predicate viableParamArgLambda(DataFlowCall call, ParamNode p, ArgNode arg) { + exists(int i | + viableParamLambda(call, i, p) and + arg.argumentOf(call, i) + ) + } + + private newtype TReturnPositionSimple = + TReturnPositionSimple0(DataFlowCallable c, ReturnKind kind) { + exists(ReturnNode ret | + c = getNodeEnclosingCallable(ret) and + kind = ret.getKind() + ) + } + + pragma[noinline] + private TReturnPositionSimple getReturnPositionSimple(ReturnNode ret, ReturnKind kind) { + result = TReturnPositionSimple0(getNodeEnclosingCallable(ret), kind) + } + + pragma[nomagic] + private TReturnPositionSimple viableReturnPosNonLambda(DataFlowCall call, ReturnKind kind) { + result = TReturnPositionSimple0(viableCallable(call), kind) + } + + pragma[nomagic] + private TReturnPositionSimple viableReturnPosLambda( + DataFlowCall call, DataFlowCallOption lastCall, ReturnKind kind + ) { + result = TReturnPositionSimple0(viableCallableLambda(call, lastCall), kind) + } + + private predicate viableReturnPosOutNonLambda( + DataFlowCall call, TReturnPositionSimple pos, OutNode out + ) { + exists(ReturnKind kind | + pos = viableReturnPosNonLambda(call, kind) and + out = getAnOutNode(call, kind) + ) + } + + private predicate viableReturnPosOutLambda( + DataFlowCall call, DataFlowCallOption lastCall, TReturnPositionSimple pos, OutNode out + ) { + exists(ReturnKind kind | + pos = viableReturnPosLambda(call, lastCall, kind) and + out = getAnOutNode(call, kind) + ) + } + + /** + * Holds if data can flow (inter-procedurally) from `node` (of type `t`) to + * the lambda call `lambdaCall`. + * + * The parameter `toReturn` indicates whether the path from `node` to + * `lambdaCall` goes through a return, and `toJump` whether the path goes + * through a jump step. + * + * The call context `lastCall` records the last call on the path from `node` + * to `lambdaCall`, if any. That is, `lastCall` is able to target the enclosing + * callable of `lambdaCall`. + */ + pragma[nomagic] + predicate revLambdaFlow( + DataFlowCall lambdaCall, LambdaCallKind kind, Node node, DataFlowType t, boolean toReturn, + boolean toJump, DataFlowCallOption lastCall + ) { + revLambdaFlow0(lambdaCall, kind, node, t, toReturn, toJump, lastCall) and + if castNode(node) or node instanceof ArgNode or node instanceof ReturnNode + then compatibleTypes(t, getNodeDataFlowType(node)) + else any() + } + + pragma[nomagic] + predicate revLambdaFlow0( + DataFlowCall lambdaCall, LambdaCallKind kind, Node node, DataFlowType t, boolean toReturn, + boolean toJump, DataFlowCallOption lastCall + ) { + lambdaCall(lambdaCall, kind, node) and + t = getNodeDataFlowType(node) and + toReturn = false and + toJump = false and + lastCall = TDataFlowCallNone() + or + // local flow + exists(Node mid, DataFlowType t0 | + revLambdaFlow(lambdaCall, kind, mid, t0, toReturn, toJump, lastCall) + | + simpleLocalFlowStep(node, mid) and + t = t0 + or + exists(boolean preservesValue | + additionalLambdaFlowStep(node, mid, preservesValue) and + getNodeEnclosingCallable(node) = getNodeEnclosingCallable(mid) + | + preservesValue = false and + t = getNodeDataFlowType(node) + or + preservesValue = true and + t = t0 + ) + ) + or + // jump step + exists(Node mid, DataFlowType t0 | + revLambdaFlow(lambdaCall, kind, mid, t0, _, _, _) and + toReturn = false and + toJump = true and + lastCall = TDataFlowCallNone() + | + jumpStepCached(node, mid) and + t = t0 + or + exists(boolean preservesValue | + additionalLambdaFlowStep(node, mid, preservesValue) and + getNodeEnclosingCallable(node) != getNodeEnclosingCallable(mid) + | + preservesValue = false and + t = getNodeDataFlowType(node) + or + preservesValue = true and + t = t0 + ) + ) + or + // flow into a callable + exists(ParamNode p, DataFlowCallOption lastCall0, DataFlowCall call | + revLambdaFlowIn(lambdaCall, kind, p, t, toJump, lastCall0) and + ( + if lastCall0 = TDataFlowCallNone() and toJump = false + then lastCall = TDataFlowCallSome(call) + else lastCall = lastCall0 + ) and + toReturn = false + | + viableParamArgNonLambda(call, p, node) + or + viableParamArgLambda(call, p, node) // non-linear recursion + ) + or + // flow out of a callable + exists(TReturnPositionSimple pos | + revLambdaFlowOut(lambdaCall, kind, pos, t, toJump, lastCall) and + getReturnPositionSimple(node, node.(ReturnNode).getKind()) = pos and + toReturn = true + ) + } + + pragma[nomagic] + predicate revLambdaFlowOutLambdaCall( + DataFlowCall lambdaCall, LambdaCallKind kind, OutNode out, DataFlowType t, boolean toJump, + DataFlowCall call, DataFlowCallOption lastCall + ) { + revLambdaFlow(lambdaCall, kind, out, t, _, toJump, lastCall) and + exists(ReturnKindExt rk | + out = rk.getAnOutNode(call) and + lambdaCall(call, _, _) + ) + } + + pragma[nomagic] + predicate revLambdaFlowOut( + DataFlowCall lambdaCall, LambdaCallKind kind, TReturnPositionSimple pos, DataFlowType t, + boolean toJump, DataFlowCallOption lastCall + ) { + exists(DataFlowCall call, OutNode out | + revLambdaFlow(lambdaCall, kind, out, t, _, toJump, lastCall) and + viableReturnPosOutNonLambda(call, pos, out) + or + // non-linear recursion + revLambdaFlowOutLambdaCall(lambdaCall, kind, out, t, toJump, call, lastCall) and + viableReturnPosOutLambda(call, _, pos, out) + ) + } + + pragma[nomagic] + predicate revLambdaFlowIn( + DataFlowCall lambdaCall, LambdaCallKind kind, ParamNode p, DataFlowType t, boolean toJump, + DataFlowCallOption lastCall + ) { + revLambdaFlow(lambdaCall, kind, p, t, false, toJump, lastCall) + } +} + +private DataFlowCallable viableCallableExt(DataFlowCall call) { + result = viableCallable(call) + or + result = viableCallableLambda(call, _) +} + +cached +private module Cached { + /** + * If needed, call this predicate from `DataFlowImplSpecific.qll` in order to + * force a stage-dependency on the `DataFlowImplCommon.qll` stage and therby + * collapsing the two stages. + */ + cached + predicate forceCachingInSameStage() { any() } + + cached + predicate nodeEnclosingCallable(Node n, DataFlowCallable c) { c = nodeGetEnclosingCallable(n) } + + cached + predicate callEnclosingCallable(DataFlowCall call, DataFlowCallable c) { + c = call.getEnclosingCallable() + } + + cached + predicate nodeDataFlowType(Node n, DataFlowType t) { t = getNodeType(n) } + + cached + predicate jumpStepCached(Node node1, Node node2) { jumpStep(node1, node2) } + + cached + predicate clearsContentCached(Node n, Content c) { clearsContent(n, c) } + + cached + predicate isUnreachableInCallCached(Node n, DataFlowCall call) { isUnreachableInCall(n, call) } + + cached + predicate outNodeExt(Node n) { + n instanceof OutNode + or + n.(PostUpdateNode).getPreUpdateNode() instanceof ArgNode + } + + cached + predicate hiddenNode(Node n) { nodeIsHidden(n) } + + cached + OutNodeExt getAnOutNodeExt(DataFlowCall call, ReturnKindExt k) { + result = getAnOutNode(call, k.(ValueReturnKind).getKind()) + or + exists(ArgNode arg | + result.(PostUpdateNode).getPreUpdateNode() = arg and + arg.argumentOf(call, k.(ParamUpdateReturnKind).getPosition()) + ) + } + + cached + predicate returnNodeExt(Node n, ReturnKindExt k) { + k = TValueReturn(n.(ReturnNode).getKind()) + or + exists(ParamNode p, int pos | + parameterValueFlowsToPreUpdate(p, n) and + p.isParameterOf(_, pos) and + k = TParamUpdate(pos) + ) + } + + cached + predicate castNode(Node n) { n instanceof CastNode } + + cached + predicate castingNode(Node n) { + castNode(n) or + n instanceof ParamNode or + n instanceof OutNodeExt or + // For reads, `x.f`, we want to check that the tracked type after the read (which + // is obtained by popping the head of the access path stack) is compatible with + // the type of `x.f`. + read(_, _, n) + } + + cached + predicate parameterNode(Node p, DataFlowCallable c, int pos) { isParameterNode(p, c, pos) } + + cached + predicate argumentNode(Node n, DataFlowCall call, int pos) { + n.(ArgumentNode).argumentOf(call, pos) + } + + /** + * Gets a viable target for the lambda call `call`. + * + * `lastCall` records the call required to reach `call` in order for the result + * to be a viable target, if any. + */ + cached + DataFlowCallable viableCallableLambda(DataFlowCall call, DataFlowCallOption lastCall) { + exists(Node creation, LambdaCallKind kind | + LambdaFlow::revLambdaFlow(call, kind, creation, _, _, _, lastCall) and + lambdaCreation(creation, kind, result) + ) + } + + /** + * Holds if `p` is the `i`th parameter of a viable dispatch target of `call`. + * The instance parameter is considered to have index `-1`. + */ + pragma[nomagic] + private predicate viableParam(DataFlowCall call, int i, ParamNode p) { + p.isParameterOf(viableCallableExt(call), i) + } + + /** + * Holds if `arg` is a possible argument to `p` in `call`, taking virtual + * dispatch into account. + */ + cached + predicate viableParamArg(DataFlowCall call, ParamNode p, ArgNode arg) { + exists(int i | + viableParam(call, i, p) and + arg.argumentOf(call, i) and + compatibleTypes(getNodeDataFlowType(arg), getNodeDataFlowType(p)) + ) + } + + pragma[nomagic] + private ReturnPosition viableReturnPos(DataFlowCall call, ReturnKindExt kind) { + viableCallableExt(call) = result.getCallable() and + kind = result.getKind() + } + + /** + * Holds if a value at return position `pos` can be returned to `out` via `call`, + * taking virtual dispatch into account. + */ + cached + predicate viableReturnPosOut(DataFlowCall call, ReturnPosition pos, Node out) { + exists(ReturnKindExt kind | + pos = viableReturnPos(call, kind) and + out = kind.getAnOutNode(call) + ) + } + + /** Provides predicates for calculating flow-through summaries. */ + private module FlowThrough { + /** + * The first flow-through approximation: + * + * - Input access paths are abstracted with a Boolean parameter + * that indicates (non-)emptiness. + */ + private module Cand { + /** + * Holds if `p` can flow to `node` in the same callable using only + * value-preserving steps. + * + * `read` indicates whether it is contents of `p` that can flow to `node`. + */ + pragma[nomagic] + private predicate parameterValueFlowCand(ParamNode p, Node node, boolean read) { + p = node and + read = false + or + // local flow + exists(Node mid | + parameterValueFlowCand(p, mid, read) and + simpleLocalFlowStep(mid, node) + ) + or + // read + exists(Node mid | + parameterValueFlowCand(p, mid, false) and + read(mid, _, node) and + read = true + ) + or + // flow through: no prior read + exists(ArgNode arg | + parameterValueFlowArgCand(p, arg, false) and + argumentValueFlowsThroughCand(arg, node, read) + ) + or + // flow through: no read inside method + exists(ArgNode arg | + parameterValueFlowArgCand(p, arg, read) and + argumentValueFlowsThroughCand(arg, node, false) + ) + } + + pragma[nomagic] + private predicate parameterValueFlowArgCand(ParamNode p, ArgNode arg, boolean read) { + parameterValueFlowCand(p, arg, read) + } + + pragma[nomagic] + predicate parameterValueFlowsToPreUpdateCand(ParamNode p, PostUpdateNode n) { + parameterValueFlowCand(p, n.getPreUpdateNode(), false) + } + + /** + * Holds if `p` can flow to a return node of kind `kind` in the same + * callable using only value-preserving steps, not taking call contexts + * into account. + * + * `read` indicates whether it is contents of `p` that can flow to the return + * node. + */ + predicate parameterValueFlowReturnCand(ParamNode p, ReturnKind kind, boolean read) { + exists(ReturnNode ret | + parameterValueFlowCand(p, ret, read) and + kind = ret.getKind() + ) + } + + pragma[nomagic] + private predicate argumentValueFlowsThroughCand0( + DataFlowCall call, ArgNode arg, ReturnKind kind, boolean read + ) { + exists(ParamNode param | viableParamArg(call, param, arg) | + parameterValueFlowReturnCand(param, kind, read) + ) + } + + /** + * Holds if `arg` flows to `out` through a call using only value-preserving steps, + * not taking call contexts into account. + * + * `read` indicates whether it is contents of `arg` that can flow to `out`. + */ + predicate argumentValueFlowsThroughCand(ArgNode arg, Node out, boolean read) { + exists(DataFlowCall call, ReturnKind kind | + argumentValueFlowsThroughCand0(call, arg, kind, read) and + out = getAnOutNode(call, kind) + ) + } + + predicate cand(ParamNode p, Node n) { + parameterValueFlowCand(p, n, _) and + ( + parameterValueFlowReturnCand(p, _, _) + or + parameterValueFlowsToPreUpdateCand(p, _) + ) + } + } + + /** + * The final flow-through calculation: + * + * - Calculated flow is either value-preserving (`read = TReadStepTypesNone()`) + * or summarized as a single read step with before and after types recorded + * in the `ReadStepTypesOption` parameter. + * - Types are checked using the `compatibleTypes()` relation. + */ + private module Final { + /** + * Holds if `p` can flow to `node` in the same callable using only + * value-preserving steps and possibly a single read step, not taking + * call contexts into account. + * + * If a read step was taken, then `read` captures the `Content`, the + * container type, and the content type. + */ + predicate parameterValueFlow(ParamNode p, Node node, ReadStepTypesOption read) { + parameterValueFlow0(p, node, read) and + if node instanceof CastingNode + then + // normal flow through + read = TReadStepTypesNone() and + compatibleTypes(getNodeDataFlowType(p), getNodeDataFlowType(node)) + or + // getter + compatibleTypes(read.getContentType(), getNodeDataFlowType(node)) + else any() + } + + pragma[nomagic] + private predicate parameterValueFlow0(ParamNode p, Node node, ReadStepTypesOption read) { + p = node and + Cand::cand(p, _) and + read = TReadStepTypesNone() + or + // local flow + exists(Node mid | + parameterValueFlow(p, mid, read) and + simpleLocalFlowStep(mid, node) + ) + or + // read + exists(Node mid | + parameterValueFlow(p, mid, TReadStepTypesNone()) and + readStepWithTypes(mid, read.getContainerType(), read.getContent(), node, + read.getContentType()) and + Cand::parameterValueFlowReturnCand(p, _, true) and + compatibleTypes(getNodeDataFlowType(p), read.getContainerType()) + ) + or + parameterValueFlow0_0(TReadStepTypesNone(), p, node, read) + } + + pragma[nomagic] + private predicate parameterValueFlow0_0( + ReadStepTypesOption mustBeNone, ParamNode p, Node node, ReadStepTypesOption read + ) { + // flow through: no prior read + exists(ArgNode arg | + parameterValueFlowArg(p, arg, mustBeNone) and + argumentValueFlowsThrough(arg, read, node) + ) + or + // flow through: no read inside method + exists(ArgNode arg | + parameterValueFlowArg(p, arg, read) and + argumentValueFlowsThrough(arg, mustBeNone, node) + ) + } + + pragma[nomagic] + private predicate parameterValueFlowArg(ParamNode p, ArgNode arg, ReadStepTypesOption read) { + parameterValueFlow(p, arg, read) and + Cand::argumentValueFlowsThroughCand(arg, _, _) + } + + pragma[nomagic] + private predicate argumentValueFlowsThrough0( + DataFlowCall call, ArgNode arg, ReturnKind kind, ReadStepTypesOption read + ) { + exists(ParamNode param | viableParamArg(call, param, arg) | + parameterValueFlowReturn(param, kind, read) + ) + } + + /** + * Holds if `arg` flows to `out` through a call using only + * value-preserving steps and possibly a single read step, not taking + * call contexts into account. + * + * If a read step was taken, then `read` captures the `Content`, the + * container type, and the content type. + */ + pragma[nomagic] + predicate argumentValueFlowsThrough(ArgNode arg, ReadStepTypesOption read, Node out) { + exists(DataFlowCall call, ReturnKind kind | + argumentValueFlowsThrough0(call, arg, kind, read) and + out = getAnOutNode(call, kind) + | + // normal flow through + read = TReadStepTypesNone() and + compatibleTypes(getNodeDataFlowType(arg), getNodeDataFlowType(out)) + or + // getter + compatibleTypes(getNodeDataFlowType(arg), read.getContainerType()) and + compatibleTypes(read.getContentType(), getNodeDataFlowType(out)) + ) + } + + /** + * Holds if `arg` flows to `out` through a call using only + * value-preserving steps and a single read step, not taking call + * contexts into account, thus representing a getter-step. + */ + predicate getterStep(ArgNode arg, Content c, Node out) { + argumentValueFlowsThrough(arg, TReadStepTypesSome(_, c, _), out) + } + + /** + * Holds if `p` can flow to a return node of kind `kind` in the same + * callable using only value-preserving steps and possibly a single read + * step. + * + * If a read step was taken, then `read` captures the `Content`, the + * container type, and the content type. + */ + private predicate parameterValueFlowReturn( + ParamNode p, ReturnKind kind, ReadStepTypesOption read + ) { + exists(ReturnNode ret | + parameterValueFlow(p, ret, read) and + kind = ret.getKind() + ) + } + } + + import Final + } + + import FlowThrough + + cached + private module DispatchWithCallContext { + /** + * Holds if the set of viable implementations that can be called by `call` + * might be improved by knowing the call context. + */ + pragma[nomagic] + private predicate mayBenefitFromCallContextExt(DataFlowCall call, DataFlowCallable callable) { + mayBenefitFromCallContext(call, callable) + or + callEnclosingCallable(call, callable) and + exists(viableCallableLambda(call, TDataFlowCallSome(_))) + } + + /** + * 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. + */ + pragma[nomagic] + private DataFlowCallable viableImplInCallContextExt(DataFlowCall call, DataFlowCall ctx) { + result = viableImplInCallContext(call, ctx) + or + result = viableCallableLambda(call, TDataFlowCallSome(ctx)) + or + exists(DataFlowCallable enclosing | + mayBenefitFromCallContextExt(call, enclosing) and + enclosing = viableCallableExt(ctx) and + result = viableCallableLambda(call, TDataFlowCallNone()) + ) + } + + /** + * Holds if the call context `ctx` reduces the set of viable run-time + * dispatch targets of call `call` in `c`. + */ + cached + predicate reducedViableImplInCallContext(DataFlowCall call, DataFlowCallable c, DataFlowCall ctx) { + exists(int tgts, int ctxtgts | + mayBenefitFromCallContextExt(call, c) and + c = viableCallableExt(ctx) and + ctxtgts = count(viableImplInCallContextExt(call, ctx)) and + tgts = strictcount(viableCallableExt(call)) and + ctxtgts < tgts + ) + } + + /** + * Gets a viable run-time dispatch target for the call `call` in the + * context `ctx`. This is restricted to those calls for which a context + * makes a difference. + */ + cached + DataFlowCallable prunedViableImplInCallContext(DataFlowCall call, DataFlowCall ctx) { + result = viableImplInCallContextExt(call, ctx) and + reducedViableImplInCallContext(call, _, ctx) + } + + /** + * Holds if flow returning from callable `c` to call `call` might return + * further and if this path restricts the set of call sites that can be + * returned to. + */ + cached + predicate reducedViableImplInReturn(DataFlowCallable c, DataFlowCall call) { + exists(int tgts, int ctxtgts | + mayBenefitFromCallContextExt(call, _) and + c = viableCallableExt(call) and + ctxtgts = count(DataFlowCall ctx | c = viableImplInCallContextExt(call, ctx)) and + tgts = strictcount(DataFlowCall ctx | callEnclosingCallable(call, viableCallableExt(ctx))) and + ctxtgts < tgts + ) + } + + /** + * Gets a viable run-time dispatch target for the call `call` in the + * context `ctx`. This is restricted to those calls and results for which + * the return flow from the result to `call` restricts the possible context + * `ctx`. + */ + cached + DataFlowCallable prunedViableImplInCallContextReverse(DataFlowCall call, DataFlowCall ctx) { + result = viableImplInCallContextExt(call, ctx) and + reducedViableImplInReturn(result, call) + } + } + + import DispatchWithCallContext + + /** + * Holds if `p` can flow to the pre-update node associated with post-update + * node `n`, in the same callable, using only value-preserving steps. + */ + private predicate parameterValueFlowsToPreUpdate(ParamNode p, PostUpdateNode n) { + parameterValueFlow(p, n.getPreUpdateNode(), TReadStepTypesNone()) + } + + private predicate store( + Node node1, Content c, Node node2, DataFlowType contentType, DataFlowType containerType + ) { + storeStep(node1, c, node2) and + contentType = getNodeDataFlowType(node1) and + containerType = getNodeDataFlowType(node2) + or + exists(Node n1, Node n2 | + n1 = node1.(PostUpdateNode).getPreUpdateNode() and + n2 = node2.(PostUpdateNode).getPreUpdateNode() + | + argumentValueFlowsThrough(n2, TReadStepTypesSome(containerType, c, contentType), n1) + or + read(n2, c, n1) and + contentType = getNodeDataFlowType(n1) and + containerType = getNodeDataFlowType(n2) + ) + } + + cached + predicate read(Node node1, Content c, Node node2) { readStep(node1, c, node2) } + + /** + * Holds if data can flow from `node1` to `node2` via a direct assignment to + * `f`. + * + * This includes reverse steps through reads when the result of the read has + * been stored into, in order to handle cases like `x.f1.f2 = y`. + */ + cached + predicate store(Node node1, TypedContent tc, Node node2, DataFlowType contentType) { + store(node1, tc.getContent(), node2, contentType, tc.getContainerType()) + } + + /** + * Holds if data can flow from `fromNode` to `toNode` because they are the post-update + * nodes of some function output and input respectively, where the output and input + * are aliases. A typical example is a function returning `this`, implementing a fluent + * interface. + */ + private predicate reverseStepThroughInputOutputAlias( + PostUpdateNode fromNode, PostUpdateNode toNode + ) { + exists(Node fromPre, Node toPre | + fromPre = fromNode.getPreUpdateNode() and + toPre = toNode.getPreUpdateNode() + | + exists(DataFlowCall c | + // Does the language-specific simpleLocalFlowStep already model flow + // from function input to output? + fromPre = getAnOutNode(c, _) and + toPre.(ArgNode).argumentOf(c, _) and + simpleLocalFlowStep(toPre.(ArgNode), fromPre) + ) + or + argumentValueFlowsThrough(toPre, TReadStepTypesNone(), fromPre) + ) + } + + cached + predicate simpleLocalFlowStepExt(Node node1, Node node2) { + simpleLocalFlowStep(node1, node2) or + reverseStepThroughInputOutputAlias(node1, node2) + } + + /** + * Holds if the call context `call` improves virtual dispatch in `callable`. + */ + cached + predicate recordDataFlowCallSiteDispatch(DataFlowCall call, DataFlowCallable callable) { + reducedViableImplInCallContext(_, callable, call) + } + + /** + * Holds if the call context `call` allows us to prune unreachable nodes in `callable`. + */ + cached + predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable callable) { + exists(Node n | getNodeEnclosingCallable(n) = callable | isUnreachableInCallCached(n, call)) + } + + cached + predicate allowParameterReturnInSelfCached(ParamNode p) { allowParameterReturnInSelf(p) } + + cached + newtype TCallContext = + TAnyCallContext() or + TSpecificCall(DataFlowCall call) { recordDataFlowCallSite(call, _) } or + TSomeCall() or + TReturn(DataFlowCallable c, DataFlowCall call) { reducedViableImplInReturn(c, call) } + + cached + newtype TReturnPosition = + TReturnPosition0(DataFlowCallable c, ReturnKindExt kind) { + exists(ReturnNodeExt ret | + c = returnNodeGetEnclosingCallable(ret) and + kind = ret.getKind() + ) + } + + cached + newtype TLocalFlowCallContext = + TAnyLocalCall() or + TSpecificLocalCall(DataFlowCall call) { isUnreachableInCallCached(_, call) } + + cached + newtype TReturnKindExt = + TValueReturn(ReturnKind kind) or + TParamUpdate(int pos) { exists(ParamNode p | p.isParameterOf(_, pos)) } + + cached + newtype TBooleanOption = + TBooleanNone() or + TBooleanSome(boolean b) { b = true or b = false } + + cached + newtype TDataFlowCallOption = + TDataFlowCallNone() or + TDataFlowCallSome(DataFlowCall call) + + cached + newtype TTypedContent = MkTypedContent(Content c, DataFlowType t) { store(_, c, _, _, t) } + + cached + newtype TAccessPathFront = + TFrontNil(DataFlowType t) or + TFrontHead(TypedContent tc) + + cached + newtype TAccessPathFrontOption = + TAccessPathFrontNone() or + TAccessPathFrontSome(AccessPathFront apf) +} + +/** + * Holds if the call context `call` either improves virtual dispatch in + * `callable` or if it allows us to prune unreachable nodes in `callable`. + */ +predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable callable) { + recordDataFlowCallSiteDispatch(call, callable) or + recordDataFlowCallSiteUnreachable(call, callable) +} + +/** + * A `Node` at which a cast can occur such that the type should be checked. + */ +class CastingNode extends Node { + CastingNode() { castingNode(this) } +} + +private predicate readStepWithTypes( + Node n1, DataFlowType container, Content c, Node n2, DataFlowType content +) { + read(n1, c, n2) and + container = getNodeDataFlowType(n1) and + content = getNodeDataFlowType(n2) +} + +private newtype TReadStepTypesOption = + TReadStepTypesNone() or + TReadStepTypesSome(DataFlowType container, Content c, DataFlowType content) { + readStepWithTypes(_, container, c, _, content) + } + +private class ReadStepTypesOption extends TReadStepTypesOption { + predicate isSome() { this instanceof TReadStepTypesSome } + + DataFlowType getContainerType() { this = TReadStepTypesSome(result, _, _) } + + Content getContent() { this = TReadStepTypesSome(_, result, _) } + + DataFlowType getContentType() { this = TReadStepTypesSome(_, _, result) } + + string toString() { if this.isSome() then result = "Some(..)" else result = "None()" } +} + +/** + * A call context to restrict the targets of virtual dispatch, prune local flow, + * and match the call sites of flow into a method with flow out of a method. + * + * There are four cases: + * - `TAnyCallContext()` : No restrictions on method flow. + * - `TSpecificCall(DataFlowCall call)` : Flow entered through the + * given `call`. This call improves the set of viable + * dispatch targets for at least one method call in the current callable + * or helps prune unreachable nodes in the current callable. + * - `TSomeCall()` : Flow entered through a parameter. The + * originating call does not improve the set of dispatch targets for any + * method call in the current callable and was therefore not recorded. + * - `TReturn(Callable c, DataFlowCall call)` : Flow reached `call` from `c` and + * this dispatch target of `call` implies a reduced set of dispatch origins + * to which data may flow if it should reach a `return` statement. + */ +abstract class CallContext extends TCallContext { + abstract string toString(); + + /** Holds if this call context is relevant for `callable`. */ + abstract predicate relevantFor(DataFlowCallable callable); +} + +abstract class CallContextNoCall extends CallContext { } + +class CallContextAny extends CallContextNoCall, TAnyCallContext { + override string toString() { result = "CcAny" } + + override predicate relevantFor(DataFlowCallable callable) { any() } +} + +abstract class CallContextCall extends CallContext { + /** Holds if this call context may be `call`. */ + bindingset[call] + abstract predicate matchesCall(DataFlowCall call); +} + +class CallContextSpecificCall extends CallContextCall, TSpecificCall { + override string toString() { + exists(DataFlowCall call | this = TSpecificCall(call) | result = "CcCall(" + call + ")") + } + + override predicate relevantFor(DataFlowCallable callable) { + recordDataFlowCallSite(this.getCall(), callable) + } + + override predicate matchesCall(DataFlowCall call) { call = this.getCall() } + + DataFlowCall getCall() { this = TSpecificCall(result) } +} + +class CallContextSomeCall extends CallContextCall, TSomeCall { + override string toString() { result = "CcSomeCall" } + + override predicate relevantFor(DataFlowCallable callable) { + exists(ParamNode p | getNodeEnclosingCallable(p) = callable) + } + + override predicate matchesCall(DataFlowCall call) { any() } +} + +class CallContextReturn extends CallContextNoCall, TReturn { + override string toString() { + exists(DataFlowCall call | this = TReturn(_, call) | result = "CcReturn(" + call + ")") + } + + override predicate relevantFor(DataFlowCallable callable) { + exists(DataFlowCall call | this = TReturn(_, call) and callEnclosingCallable(call, callable)) + } +} + +/** + * A call context that is relevant for pruning local flow. + */ +abstract class LocalCallContext extends TLocalFlowCallContext { + abstract string toString(); + + /** Holds if this call context is relevant for `callable`. */ + abstract predicate relevantFor(DataFlowCallable callable); +} + +class LocalCallContextAny extends LocalCallContext, TAnyLocalCall { + override string toString() { result = "LocalCcAny" } + + override predicate relevantFor(DataFlowCallable callable) { any() } +} + +class LocalCallContextSpecificCall extends LocalCallContext, TSpecificLocalCall { + LocalCallContextSpecificCall() { this = TSpecificLocalCall(call) } + + DataFlowCall call; + + DataFlowCall getCall() { result = call } + + override string toString() { result = "LocalCcCall(" + call + ")" } + + override predicate relevantFor(DataFlowCallable callable) { relevantLocalCCtx(call, callable) } +} + +private predicate relevantLocalCCtx(DataFlowCall call, DataFlowCallable callable) { + exists(Node n | getNodeEnclosingCallable(n) = callable and isUnreachableInCallCached(n, call)) +} + +/** + * Gets the local call context given the call context and the callable that + * the contexts apply to. + */ +LocalCallContext getLocalCallContext(CallContext ctx, DataFlowCallable callable) { + ctx.relevantFor(callable) and + if relevantLocalCCtx(ctx.(CallContextSpecificCall).getCall(), callable) + then result.(LocalCallContextSpecificCall).getCall() = ctx.(CallContextSpecificCall).getCall() + else result instanceof LocalCallContextAny +} + +/** + * The value of a parameter at function entry, viewed as a node in a data + * flow graph. + */ +class ParamNode extends Node { + ParamNode() { parameterNode(this, _, _) } + + /** + * Holds if this node is the parameter of callable `c` at the specified + * (zero-based) position. + */ + predicate isParameterOf(DataFlowCallable c, int i) { parameterNode(this, c, i) } +} + +/** A data-flow node that represents a call argument. */ +class ArgNode extends Node { + ArgNode() { argumentNode(this, _, _) } + + /** Holds if this argument occurs at the given position in the given call. */ + final predicate argumentOf(DataFlowCall call, int pos) { argumentNode(this, call, pos) } +} + +/** + * A node from which flow can return to the caller. This is either a regular + * `ReturnNode` or a `PostUpdateNode` corresponding to the value of a parameter. + */ +class ReturnNodeExt extends Node { + ReturnNodeExt() { returnNodeExt(this, _) } + + /** Gets the kind of this returned value. */ + ReturnKindExt getKind() { returnNodeExt(this, result) } +} + +/** + * A node to which data can flow from a call. Either an ordinary out node + * or a post-update node associated with a call argument. + */ +class OutNodeExt extends Node { + OutNodeExt() { outNodeExt(this) } +} + +/** + * An extended return kind. A return kind describes how data can be returned + * from a callable. This can either be through a returned value or an updated + * parameter. + */ +abstract class ReturnKindExt extends TReturnKindExt { + /** Gets a textual representation of this return kind. */ + abstract string toString(); + + /** Gets a node corresponding to data flow out of `call`. */ + final OutNodeExt getAnOutNode(DataFlowCall call) { result = getAnOutNodeExt(call, this) } +} + +class ValueReturnKind extends ReturnKindExt, TValueReturn { + private ReturnKind kind; + + ValueReturnKind() { this = TValueReturn(kind) } + + ReturnKind getKind() { result = kind } + + override string toString() { result = kind.toString() } +} + +class ParamUpdateReturnKind extends ReturnKindExt, TParamUpdate { + private int pos; + + ParamUpdateReturnKind() { this = TParamUpdate(pos) } + + int getPosition() { result = pos } + + override string toString() { result = "param update " + pos } +} + +/** A callable tagged with a relevant return kind. */ +class ReturnPosition extends TReturnPosition0 { + private DataFlowCallable c; + private ReturnKindExt kind; + + ReturnPosition() { this = TReturnPosition0(c, kind) } + + /** Gets the callable. */ + DataFlowCallable getCallable() { result = c } + + /** Gets the return kind. */ + ReturnKindExt getKind() { result = kind } + + /** Gets a textual representation of this return position. */ + string toString() { result = "[" + kind + "] " + c } +} + +/** + * Gets the enclosing callable of `n`. Unlike `n.getEnclosingCallable()`, this + * predicate ensures that joins go from `n` to the result instead of the other + * way around. + */ +pragma[inline] +DataFlowCallable getNodeEnclosingCallable(Node n) { + nodeEnclosingCallable(pragma[only_bind_out](n), pragma[only_bind_into](result)) +} + +/** Gets the type of `n` used for type pruning. */ +pragma[inline] +DataFlowType getNodeDataFlowType(Node n) { + nodeDataFlowType(pragma[only_bind_out](n), pragma[only_bind_into](result)) +} + +pragma[noinline] +private DataFlowCallable returnNodeGetEnclosingCallable(ReturnNodeExt ret) { + result = getNodeEnclosingCallable(ret) +} + +pragma[noinline] +private ReturnPosition getReturnPosition0(ReturnNodeExt ret, ReturnKindExt kind) { + result.getCallable() = returnNodeGetEnclosingCallable(ret) and + kind = result.getKind() +} + +pragma[noinline] +ReturnPosition getReturnPosition(ReturnNodeExt ret) { + result = getReturnPosition0(ret, ret.getKind()) +} + +/** + * Checks whether `inner` can return to `call` in the call context `innercc`. + * Assumes a context of `inner = viableCallableExt(call)`. + */ +bindingset[innercc, inner, call] +predicate checkCallContextReturn(CallContext innercc, DataFlowCallable inner, DataFlowCall call) { + innercc instanceof CallContextAny + or + exists(DataFlowCallable c0, DataFlowCall call0 | + callEnclosingCallable(call0, inner) and + innercc = TReturn(c0, call0) and + c0 = prunedViableImplInCallContextReverse(call0, call) + ) +} + +/** + * Checks whether `call` can resolve to `calltarget` in the call context `cc`. + * Assumes a context of `calltarget = viableCallableExt(call)`. + */ +bindingset[cc, call, calltarget] +predicate checkCallContextCall(CallContext cc, DataFlowCall call, DataFlowCallable calltarget) { + exists(DataFlowCall ctx | cc = TSpecificCall(ctx) | + if reducedViableImplInCallContext(call, _, ctx) + then calltarget = prunedViableImplInCallContext(call, ctx) + else any() + ) + or + cc instanceof CallContextSomeCall + or + cc instanceof CallContextAny + or + cc instanceof CallContextReturn +} + +/** + * Resolves a return from `callable` in `cc` to `call`. This is equivalent to + * `callable = viableCallableExt(call) and checkCallContextReturn(cc, callable, call)`. + */ +bindingset[cc, callable] +predicate resolveReturn(CallContext cc, DataFlowCallable callable, DataFlowCall call) { + cc instanceof CallContextAny and callable = viableCallableExt(call) + or + exists(DataFlowCallable c0, DataFlowCall call0 | + callEnclosingCallable(call0, callable) and + cc = TReturn(c0, call0) and + c0 = prunedViableImplInCallContextReverse(call0, call) + ) +} + +/** + * Resolves a call from `call` in `cc` to `result`. This is equivalent to + * `result = viableCallableExt(call) and checkCallContextCall(cc, call, result)`. + */ +bindingset[call, cc] +DataFlowCallable resolveCall(DataFlowCall call, CallContext cc) { + exists(DataFlowCall ctx | cc = TSpecificCall(ctx) | + if reducedViableImplInCallContext(call, _, ctx) + then result = prunedViableImplInCallContext(call, ctx) + else result = viableCallableExt(call) + ) + or + result = viableCallableExt(call) and cc instanceof CallContextSomeCall + or + result = viableCallableExt(call) and cc instanceof CallContextAny + or + result = viableCallableExt(call) and cc instanceof CallContextReturn +} + +/** An optional Boolean value. */ +class BooleanOption extends TBooleanOption { + string toString() { + this = TBooleanNone() and result = "" + or + this = TBooleanSome(any(boolean b | result = b.toString())) + } +} + +/** An optional `DataFlowCall`. */ +class DataFlowCallOption extends TDataFlowCallOption { + string toString() { + this = TDataFlowCallNone() and + result = "(none)" + or + exists(DataFlowCall call | + this = TDataFlowCallSome(call) and + result = call.toString() + ) + } +} + +/** Content tagged with the type of a containing object. */ +class TypedContent extends MkTypedContent { + private Content c; + private DataFlowType t; + + TypedContent() { this = MkTypedContent(c, t) } + + /** Gets the content. */ + Content getContent() { result = c } + + /** Gets the container type. */ + DataFlowType getContainerType() { result = t } + + /** Gets a textual representation of this content. */ + string toString() { result = c.toString() } + + /** + * Holds if access paths with this `TypedContent` at their head always should + * be tracked at high precision. This disables adaptive access path precision + * for such access paths. + */ + predicate forceHighPrecision() { forceHighPrecision(c) } +} + +/** + * The front of an access path. This is either a head or a nil. + */ +abstract class AccessPathFront extends TAccessPathFront { + abstract string toString(); + + abstract DataFlowType getType(); + + abstract boolean toBoolNonEmpty(); + + TypedContent getHead() { this = TFrontHead(result) } + + predicate isClearedAt(Node n) { clearsContentCached(n, this.getHead().getContent()) } +} + +class AccessPathFrontNil extends AccessPathFront, TFrontNil { + private DataFlowType t; + + AccessPathFrontNil() { this = TFrontNil(t) } + + override string toString() { result = ppReprType(t) } + + override DataFlowType getType() { result = t } + + override boolean toBoolNonEmpty() { result = false } +} + +class AccessPathFrontHead extends AccessPathFront, TFrontHead { + private TypedContent tc; + + AccessPathFrontHead() { this = TFrontHead(tc) } + + override string toString() { result = tc.toString() } + + override DataFlowType getType() { result = tc.getContainerType() } + + override boolean toBoolNonEmpty() { result = true } +} + +/** An optional access path front. */ +class AccessPathFrontOption extends TAccessPathFrontOption { + string toString() { + this = TAccessPathFrontNone() and result = "" + or + this = TAccessPathFrontSome(any(AccessPathFront apf | result = apf.toString())) + } +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplSpecific.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplSpecific.qll new file mode 100644 index 00000000000..ee044c5e426 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplSpecific.qll @@ -0,0 +1,11 @@ +/** + * Provides Go-specific definitions for use in the data flow library. + */ +module Private { + import DataFlowPrivate + import DataFlowDispatch +} + +module Public { + import DataFlowUtil +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll new file mode 100644 index 00000000000..80c94cafdaa --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll @@ -0,0 +1,1161 @@ +private import go +private import semmle.go.dataflow.FunctionInputsAndOutputs +private import semmle.go.dataflow.FlowSummary +private import DataFlowPrivate +private import FlowSummaryImpl as FlowSummaryImpl +private import semmle.go.dataflow.ExternalFlow + +cached +private newtype TNode = + MkInstructionNode(IR::Instruction insn) or + MkSsaNode(SsaDefinition ssa) or + MkGlobalFunctionNode(Function f) or + MkSummarizedParameterNode(DataFlowCallable c, int i) { + not exists(c.getFuncDef()) and + c instanceof SummarizedCallable and + ( + i in [0 .. c.getType().getNumParameter() - 1] + or + c.asFunction() instanceof Method and i = -1 + ) + } or + MkSummaryInternalNode(SummarizedCallable c, FlowSummaryImpl::Private::SummaryNodeState state) { + FlowSummaryImpl::Private::summaryNodeRange(c, state) + } + +/** Nodes intended for only use inside the data-flow libraries. */ +module Private { + /** Gets the callable in which this node occurs. */ + DataFlowCallable nodeGetEnclosingCallable(Node n) { + result.asCallable() = n.getEnclosingCallable() + or + not exists(n.getEnclosingCallable()) and result.asFileScope() = n.getFile() + } + + /** Holds if `p` is a `ParameterNode` of `c` with position `pos`. */ + predicate isParameterNode(ParameterNode p, DataFlowCallable c, int pos) { + p.isParameterOf(c.asCallable(), pos) + } + + /** A data flow node that represents returning a value from a function. */ + class ReturnNode extends Node { + ReturnKind kind; + + ReturnNode() { + this.(Public::ResultNode).getIndex() = kind.getIndex() + or + this.(SummaryNode).isReturn(kind) + } + + /** Gets the kind of this returned value. */ + ReturnKind getKind() { result = kind } + } + + /** A data flow node that represents the output of a call. */ + class OutNode extends Node { + DataFlow::CallNode call; + int i; + + OutNode() { this = call.getResult(i) } + + /** Gets the underlying call. */ + DataFlowCall getCall() { result = call.asExpr() } + } + + /** + * A data-flow node used to model flow summaries. + */ + class SummaryNode extends Node, MkSummaryInternalNode { + private SummarizedCallable c; + private FlowSummaryImpl::Private::SummaryNodeState state; + + SummaryNode() { this = MkSummaryInternalNode(c, state) } + + override predicate hasLocationInfo(string fp, int sl, int sc, int el, int ec) { + c.hasLocationInfo(fp, sl, sc, el, ec) + } + + override string toString() { result = "[summary] " + state + " in " + c } + + /** Holds if this summary node is the `i`th argument of `call`. */ + predicate isArgumentOf(DataFlowCall call, int i) { + FlowSummaryImpl::Private::summaryArgumentNode(call, this, i) + } + + /** Holds if this summary node is a return node. */ + predicate isReturn(ReturnKind kind) { FlowSummaryImpl::Private::summaryReturnNode(this, kind) } + + /** Holds if this summary node is an out node for `call`. */ + predicate isOut(DataFlowCall call) { FlowSummaryImpl::Private::summaryOutNode(call, this, _) } + } + + /** Gets the summary node corresponding to the callable `c` and state `state`. */ + SummaryNode getSummaryNode(SummarizedCallable c, FlowSummaryImpl::Private::SummaryNodeState state) { + result = MkSummaryInternalNode(c, state) + } +} + +/** Nodes intended for use outside the data-flow libraries. */ +module Public { + /** + * A node in a data flow graph. + * + * A node can be either an IR instruction or an SSA definition. + * Such nodes are created with `DataFlow::instructionNode` + * and `DataFlow::ssaNode` respectively. + */ + class Node extends TNode { + /** Gets the function to which this node belongs. */ + ControlFlow::Root getRoot() { none() } // overridden in subclasses + + /** INTERNAL: Use `getRoot()` instead. */ + Callable getEnclosingCallable() { + result.getFuncDef() = this.getRoot() + or + exists(DataFlowCallable dfc | result = dfc.asCallable() | + this = MkSummarizedParameterNode(dfc, _) + or + this = MkSummaryInternalNode(dfc, _) + ) + } + + /** Gets the type of this node. */ + Type getType() { none() } // overridden in subclasses + + /** Gets the expression corresponding to this node, if any. */ + Expr asExpr() { none() } // overridden in subclasses + + /** Gets the parameter corresponding to this node, if any. */ + Parameter asParameter() { none() } // overridden in subclasses + + /** Gets the IR instruction corresponding to this node, if any. */ + IR::Instruction asInstruction() { none() } // overridden in subclasses + + /** Gets a textual representation of the kind of this data-flow node. */ + string getNodeKind() { none() } // overridden in subclasses + + /** Gets the basic block to which this data-flow node belongs, if any. */ + BasicBlock getBasicBlock() { result = this.asInstruction().getBasicBlock() } + + /** Gets a textual representation of this element. */ + string toString() { result = "data-flow node" } // overridden in subclasses + + /** + * 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( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + filepath = "" and + startline = 0 and + startcolumn = 0 and + endline = 0 and + endcolumn = 0 + } + + /** Gets the file in which this node appears. */ + File getFile() { this.hasLocationInfo(result.getAbsolutePath(), _, _, _, _) } + + /** Gets the start line of the location of this node. */ + int getStartLine() { this.hasLocationInfo(_, result, _, _, _) } + + /** Gets the start column of the location of this node. */ + int getStartColumn() { this.hasLocationInfo(_, _, result, _, _) } + + /** Gets the end line of the location of this node. */ + int getEndLine() { this.hasLocationInfo(_, _, _, result, _) } + + /** Gets the end column of the location of this node. */ + int getEndColumn() { this.hasLocationInfo(_, _, _, _, result) } + + /** + * Gets an upper bound on the type of this node. + */ + Type getTypeBound() { result = this.getType() } + + /** Gets the floating-point value this data-flow node contains, if any. */ + float getFloatValue() { result = this.asExpr().getFloatValue() } + + /** + * Gets the integer value this data-flow node contains, if any. + * + * Note that this does not have a result if the value is too large to fit in a + * 32-bit signed integer type. + */ + int getIntValue() { result = this.asInstruction().getIntValue() } + + /** Gets either `getFloatValue` or `getIntValue`. */ + float getNumericValue() { result = this.asInstruction().getNumericValue() } + + /** + * Holds if the complex value this data-flow node contains has real part `real` and imaginary + * part `imag`. + */ + predicate hasComplexValue(float real, float imag) { + this.asInstruction().hasComplexValue(real, imag) + } + + /** Gets the string value this data-flow node contains, if any. */ + string getStringValue() { result = this.asInstruction().getStringValue() } + + /** + * Gets the string representation of the exact value this data-flow node + * contains, if any. + * + * For example, for the constant 3.141592653589793238462, this will + * result in 1570796326794896619231/500000000000000000000 + */ + string getExactValue() { result = this.asInstruction().getExactValue() } + + /** Gets the Boolean value this data-flow node contains, if any. */ + boolean getBoolValue() { result = this.asInstruction().getBoolValue() } + + /** Holds if the value of this data-flow node is known at compile time. */ + predicate isConst() { this.asInstruction().isConst() } + + /** + * Holds if the result of this instruction is known at compile time, and is guaranteed not to + * depend on the platform where it is evaluated. + */ + predicate isPlatformIndependentConstant() { + this.asInstruction().isPlatformIndependentConstant() + } + + /** + * Gets a data-flow node to which data may flow from this node in one (intra-procedural) step. + */ + Node getASuccessor() { DataFlow::localFlowStep(this, result) } + + /** + * Gets a data-flow node from which data may flow to this node in one (intra-procedural) step. + */ + Node getAPredecessor() { this = result.getASuccessor() } + } + + /** + * An IR instruction, viewed as a node in a data flow graph. + */ + class InstructionNode extends Node, MkInstructionNode { + IR::Instruction insn; + + InstructionNode() { this = MkInstructionNode(insn) } + + override IR::Instruction asInstruction() { result = insn } + + override ControlFlow::Root getRoot() { result = insn.getRoot() } + + override Type getType() { result = insn.getResultType() } + + override string getNodeKind() { result = insn.getInsnKind() } + + override string toString() { result = insn.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + insn.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + /** + * An expression, viewed as a node in a data flow graph. + */ + class ExprNode extends InstructionNode { + override IR::EvalInstruction insn; + Expr expr; + + ExprNode() { expr = insn.getExpr() } + + override Expr asExpr() { result = expr } + + /** Gets the underlying expression this node corresponds to. */ + Expr getExpr() { result = expr } + } + + /** + * An SSA variable, viewed as a node in a data flow graph. + */ + class SsaNode extends Node, MkSsaNode { + SsaDefinition ssa; + + SsaNode() { this = MkSsaNode(ssa) } + + /** Gets the node whose value is stored in this SSA variable, if any. */ + Node getInit() { result = DataFlow::instructionNode(ssa.(SsaExplicitDefinition).getRhs()) } + + /** Gets a use of this SSA variable. */ + InstructionNode getAUse() { result = DataFlow::instructionNode(ssa.getVariable().getAUse()) } + + /** Gets the program variable corresponding to this SSA variable. */ + SsaSourceVariable getSourceVariable() { result = ssa.getSourceVariable() } + + /** Gets the unique definition of this SSA variable. */ + SsaDefinition getDefinition() { result = ssa } + + override ControlFlow::Root getRoot() { result = ssa.getRoot() } + + override Type getType() { result = ssa.getSourceVariable().getType() } + + override string getNodeKind() { result = "SSA variable " + ssa.getSourceVariable().getName() } + + override string toString() { result = ssa.toString() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + ssa.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + private module FunctionNode { + /** A function, viewed as a node in a data flow graph. */ + abstract class Range extends Node { + /** Gets the `i`th parameter of this function. */ + abstract ParameterNode getParameter(int i); + + /** Gets the name of this function, if it has one. */ + abstract string getName(); + + /** + * Gets the dataflow node holding the value of the receiver, if any. + */ + abstract ReceiverNode getReceiver(); + + /** + * Gets a value returned by the given function via a return statement or an assignment to a + * result variable. + */ + abstract ResultNode getAResult(); + + /** + * Gets the function entity this node corresponds to. + * + * Note that this predicate has no result for function literals. + */ + Function getFunction() { none() } + } + } + + /** A function, viewed as a node in a data flow graph. */ + class FunctionNode extends Node { + FunctionNode::Range self; + + FunctionNode() { this = self } + + /** Gets the `i`th parameter of this function. */ + ParameterNode getParameter(int i) { result = self.getParameter(i) } + + /** Gets a parameter of this function. */ + ParameterNode getAParameter() { result = this.getParameter(_) } + + /** Gets the number of parameters declared on this function. */ + int getNumParameter() { result = count(this.getAParameter()) } + + /** Gets the name of this function, if it has one. */ + string getName() { result = self.getName() } + + /** + * Gets the dataflow node holding the value of the receiver, if any. + */ + ReceiverNode getReceiver() { result = self.getReceiver() } + + /** + * Gets a value returned by the given function via a return statement or an assignment to a + * result variable. + */ + ResultNode getAResult() { result = self.getAResult() } + + /** + * Gets the data-flow node corresponding to the `i`th result of this function. + */ + ResultNode getResult(int i) { result = this.getAResult() and result.getIndex() = i } + + /** + * Gets the function entity this node corresponds to. + * + * Note that this predicate has no result for function literals. + */ + Function getFunction() { result = self.getFunction() } + } + + /** A representation of a function that is declared in the module scope. */ + class GlobalFunctionNode extends FunctionNode::Range, MkGlobalFunctionNode { + Function func; + + GlobalFunctionNode() { this = MkGlobalFunctionNode(func) } + + override ParameterNode getParameter(int i) { + result = DataFlow::parameterNode(func.getParameter(i)) + } + + override string getName() { result = func.getName() } + + override Function getFunction() { result = func } + + override ReceiverNode getReceiver() { + result = DataFlow::receiverNode(func.(Method).getReceiver()) + } + + override string getNodeKind() { result = "function " + func.getName() } + + override string toString() { result = "function " + func.getName() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + func.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + + override ResultNode getAResult() { + result.getRoot() = this.getFunction().(DeclaredFunction).getFuncDecl() + } + } + + /** A representation of the function that is defined by a function literal. */ + class FuncLitNode extends FunctionNode::Range, ExprNode { + override FuncLit expr; + + override ParameterNode getParameter(int i) { + result = DataFlow::parameterNode(expr.getParameter(i)) + } + + override string getName() { none() } + + override ReceiverNode getReceiver() { none() } + + override string toString() { result = "function literal" } + + override ResultNode getAResult() { result.getRoot() = this.getExpr() } + } + + /** + * Gets a possible target of call `cn`.class + * + * This is written explicitly like this instead of using `getCalleeNode().getAPredecessor*()` + * or `result.getASuccessor*() = cn.getCalleeNode()` because the explicit form inhibits the + * optimizer from combining this with other uses of `getASuccessor*()`, which can lead to + * recursion through a magic side-condition if those other users call `getACallee()` and thus + * pointless recomputation of `getACallee()` each recursive iteration. + */ + private DataFlow::Node getACalleeSource(DataFlow::CallNode cn) { + result = cn.getCalleeNode() or + basicLocalFlowStep(result, getACalleeSource(cn)) or + result.asExpr() = getACalleeSource(cn).asExpr().(GenericFunctionInstantiationExpr).getBase() + } + + /** A data flow node that represents a call. */ + class CallNode extends ExprNode { + override CallExpr expr; + + /** Gets the declared target of this call */ + Function getTarget() { result = expr.getTarget() } + + private DataFlow::Node getACalleeSource() { result = getACalleeSource(this) } + + /** + * Gets the definition of a possible target of this call. + * + * For non-virtual calls, there is at most one possible call target (but there may be none if the + * target has no declaration). + * + * For virtual calls, we look up possible targets in all types that implement the receiver + * interface type. + */ + Callable getACalleeIncludingExternals() { + result.asFunction() = this.getTarget() + or + exists(DataFlow::Node calleeSource | calleeSource = this.getACalleeSource() | + result.asFuncLit() = calleeSource.asExpr() + or + calleeSource = result.asFunction().getARead() + or + exists(Method declared, Method actual | + calleeSource = declared.getARead() and + actual.implements(declared) and + result.asFunction() = actual + ) + ) + } + + /** + * As `getACalleeIncludingExternals`, except excluding external functions (those for which + * we lack a definition, such as standard library functions). + */ + FuncDef getACallee() { result = this.getACalleeIncludingExternals().getFuncDef() } + + /** + * Gets the name of the function, method or variable that is being called. + * + * Note that if we are calling a variable then this gets the variable name. + * It does not attempt to get the name of the function or method that is + * assigned to the variable. To do that, use + * `getACalleeIncludingExternals().asFunction().getName()`. + */ + string getCalleeName() { result = expr.getCalleeName() } + + /** Gets the data flow node specifying the function to be called. */ + Node getCalleeNode() { result = DataFlow::exprNode(expr.getCalleeExpr()) } + + /** Gets the underlying call. */ + CallExpr getCall() { result = this.getExpr() } + + /** + * Gets the data flow node corresponding to the `i`th argument of this call. + * + * Note that the first argument in calls to the built-in function `make` is a type, which is + * not a data-flow node. It is skipped for the purposes of this predicate, so the (syntactically) + * second argument becomes the first argument in terms of data flow. + * + * For calls of the form `f(g())` where `g` has multiple results, the arguments of the call to + * `i` are the (implicit) element extraction nodes for the call to `g`. + */ + Node getArgument(int i) { + if expr.getArgument(0).getType() instanceof TupleType + then result = DataFlow::extractTupleElement(DataFlow::exprNode(expr.getArgument(0)), i) + else + result = + rank[i + 1](Expr arg, int j | + arg = expr.getArgument(j) + | + DataFlow::exprNode(arg) order by j + ) + } + + /** Gets the data flow node corresponding to an argument of this call. */ + Node getAnArgument() { result = this.getArgument(_) } + + /** Gets the number of arguments of this call, if it can be determined. */ + int getNumArgument() { result = count(this.getAnArgument()) } + + /** Gets a function passed as the `i`th argument of this call. */ + FunctionNode getCallback(int i) { result.getASuccessor*() = this.getArgument(i) } + + /** + * Gets the data-flow node corresponding to the `i`th result of this call. + * + * If there is a single result then it is considered to be the 0th result. + */ + Node getResult(int i) { + i = 0 and result = this.getResult() + or + result = DataFlow::extractTupleElement(this, i) + } + + /** + * Gets the data-flow node corresponding to the result of this call. + * + * Note that this predicate is not defined for calls with multiple results; use the one-argument + * variant `getResult(i)` for such calls. + */ + Node getResult() { not this.getType() instanceof TupleType and result = this } + + /** Gets a result of this call. */ + Node getAResult() { result = this.getResult(_) } + + /** Gets the data flow node corresponding to the receiver of this call, if any. */ + Node getReceiver() { result = this.getACalleeSource().(MethodReadNode).getReceiver() } + + /** Holds if this call has an ellipsis after its last argument. */ + predicate hasEllipsis() { expr.hasEllipsis() } + } + + /** A data flow node that represents a call to a method. */ + class MethodCallNode extends CallNode { + MethodCallNode() { expr.getTarget() instanceof Method } + + override Method getTarget() { result = expr.getTarget() } + + override MethodDecl getACallee() { result = super.getACallee() } + } + + /** A representation of a parameter initialization. */ + abstract class ParameterNode extends DataFlow::Node { + /** Holds if this node initializes the `i`th parameter of `c`. */ + abstract predicate isParameterOf(Callable c, int i); + } + + /** + * A summary node which represents a parameter in a function which doesn't + * already have a parameter nodes. + */ + class SummarizedParameterNode extends ParameterNode, MkSummarizedParameterNode { + Callable c; + int i; + + SummarizedParameterNode() { + this = MkSummarizedParameterNode(any(DataFlowCallable dfc | c = dfc.asCallable()), i) + } + + // There are no AST representations of summarized parameter nodes + override ControlFlow::Root getRoot() { none() } + + override string getNodeKind() { result = "external parameter node" } + + override Type getType() { + result = c.getType().getParameterType(i) + or + i = -1 and result = c.asFunction().(Method).getReceiverType() + } + + override predicate isParameterOf(Callable call, int idx) { c = call and i = idx } + + override string toString() { result = "parameter " + i + " of " + c.toString() } + + override predicate hasLocationInfo(string fp, int sl, int sc, int el, int ec) { + c.hasLocationInfo(fp, sl, sc, el, ec) + } + } + + /** A representation of a parameter initialization, defined in source via an SSA node. */ + class SsaParameterNode extends ParameterNode, SsaNode { + override SsaExplicitDefinition ssa; + Parameter parm; + + SsaParameterNode() { ssa.getInstruction() = IR::initParamInstruction(parm) } + + /** Gets the parameter this node initializes. */ + override Parameter asParameter() { result = parm } + + override predicate isParameterOf(Callable c, int i) { parm.isParameterOf(c.getFuncDef(), i) } + } + + /** A representation of a receiver initialization. */ + class ReceiverNode extends SsaParameterNode { + override ReceiverVariable parm; + + /** Gets the receiver variable this node initializes. */ + ReceiverVariable asReceiverVariable() { result = parm } + + /** Holds if this node initializes the receiver variable of `m`. */ + predicate isReceiverOf(MethodDecl m) { parm.isReceiverOf(m) } + } + + private Node getADirectlyWrittenNode() { + exists(Write w | w.writesField(result, _, _) or w.writesElement(result, _, _)) + } + + private DataFlow::Node getAccessPathPredecessor(DataFlow::Node node) { + result = node.(PointerDereferenceNode).getOperand() + or + result = node.(ComponentReadNode).getBase() + } + + private Node getAWrittenNode() { result = getAccessPathPredecessor*(getADirectlyWrittenNode()) } + + /** + * Holds if `tp` is a type that may (directly or indirectly) reference a memory location. + * + * If a value with a mutable type is passed to a function, the function could potentially + * mutate it or something it points to. + */ + predicate mutableType(Type tp) { + exists(Type underlying | underlying = tp.getUnderlyingType() | + not underlying instanceof BoolType and + not underlying instanceof NumericType and + not underlying instanceof StringType and + not underlying instanceof LiteralType + ) + } + + /** + * A node associated with an object after an operation that might have + * changed its state. + * + * This can be either the argument to a callable after the callable returns + * (which might have mutated the argument), or the qualifier of a field after + * an update to the field. + * + * Nodes corresponding to AST elements, for example `ExprNode`, usually refer + * to the value before the update with the exception of `ClassInstanceExpr`, + * which represents the value after the constructor has run. + */ + abstract class PostUpdateNode extends Node { + /** + * Gets the node before the state update. + */ + abstract Node getPreUpdateNode(); + } + + private class DefaultPostUpdateNode extends PostUpdateNode { + Node preupd; + + DefaultPostUpdateNode() { + ( + preupd instanceof AddressOperationNode + or + preupd = any(AddressOperationNode addr).getOperand() + or + preupd = any(PointerDereferenceNode deref).getOperand() + or + preupd = getAWrittenNode() + or + preupd instanceof ArgumentNode and + mutableType(preupd.getType()) + ) and + ( + preupd = this.(SsaNode).getAUse() + or + preupd = this and + not basicLocalFlowStep(_, this) + ) + } + + override Node getPreUpdateNode() { result = preupd } + } + + /** + * A data-flow node that occurs as an argument in a call, including receiver arguments. + */ + class ArgumentNode extends Node { + CallNode c; + int i; + + ArgumentNode() { this = getArgument(c, i) } + + /** + * Holds if this argument occurs at the given position in the given call. + * + * The receiver argument is considered to have index `-1`. + * + * Note that we currently do not track receiver arguments into calls to interface methods. + */ + predicate argumentOf(CallExpr call, int pos) { + call = c.asExpr() and + pos = i and + ( + i != -1 + or + exists(c.(MethodCallNode).getTarget().getBody()) + or + hasExternalSpecification(c.(DataFlow::MethodCallNode).getTarget()) + ) + } + + /** + * Gets the `CallNode` this is an argument to. + */ + CallNode getCall() { result = c } + } + + /** + * A node whose value is returned as a result from a function. + * + * This can either be a node corresponding to an expression in a return statement, + * or a node representing the current value of a named result variable at the exit + * of the function. + */ + class ResultNode extends InstructionNode { + FuncDef fd; + int i; + + ResultNode() { + exists(IR::ReturnInstruction ret | ret.getRoot() = fd | insn = ret.getResult(i)) + or + insn.(IR::ReadResultInstruction).reads(fd.getResultVar(i)) + } + + /** Gets the index of this result among all results of the function. */ + int getIndex() { result = i } + } + + /** + * A data-flow node that reads the value of a variable, constant, field or array element, + * or refers to a function. + */ + class ReadNode extends InstructionNode { + override IR::ReadInstruction insn; + + /** + * Holds if this data-flow node evaluates to value of `v`, which is a value entity, that is, a + * constant, variable, field, function, or method. + */ + predicate reads(ValueEntity v) { insn.reads(v) } + + /** + * Holds if this data-flow node reads the value of SSA variable `v`. + */ + predicate readsSsaVariable(SsaVariable v) { insn = v.getAUse() } + + /** + * Holds if this data-flow node reads the value of field `f` on the value of `base` or its + * implicit dereference. + * + * For example, for the field read `x.width`, `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`, and `f` is the field referenced by `width`. + */ + predicate readsField(Node base, Field f) { + insn.readsField(base.asInstruction(), f) + or + insn.readsField(IR::implicitDerefInstruction(base.asExpr()), f) + } + + /** + * Holds if this data-flow node reads the value of field `package.type.field` on the value of `base` or its + * implicit dereference. + * + * For example, for the field read `x.width`, `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`, and `x` has the type `package.type`. + */ + predicate readsField(Node base, string package, string type, string field) { + exists(Field f | f.hasQualifiedName(package, type, field) | this.readsField(base, f)) + } + + /** + * Holds if this data-flow node looks up method `m` on the value of `receiver` or its implicit + * dereference. + * + * For example, for the method read `x.area`, `receiver` 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`, and `m` is the method referenced by `area`. + */ + predicate readsMethod(Node receiver, Method m) { + insn.readsMethod(receiver.asInstruction(), m) + or + insn.readsMethod(IR::implicitDerefInstruction(receiver.asExpr()), m) + } + + /** + * Holds if this data-flow node looks up method `package.type.name` on the value of `receiver` + * or its implicit dereference. + * + * For example, for the method read `x.name`, `receiver` 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`, and `package.type` is a type of `x` that defines a method named `name`. + */ + predicate readsMethod(Node receiver, string package, string type, string name) { + exists(Method m | m.hasQualifiedName(package, type, name) | this.readsMethod(receiver, m)) + } + + /** + * Holds if this data-flow node reads the value of element `index` on the value of `base` or its + * implicit dereference. + * + * For example, for the element read `xs[i]`, `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`, and `index` is the data-flow node corresponding to `i`. + */ + predicate readsElement(Node base, Node index) { + insn.readsElement(base.asInstruction(), index.asInstruction()) + or + insn.readsElement(IR::implicitDerefInstruction(base.asExpr()), index.asInstruction()) + } + } + + /** + * A data-flow node that reads the value of a field from a struct, or an element from an array, slice, map or string. + */ + class ComponentReadNode extends ReadNode { + override IR::ComponentReadInstruction insn; + + /** Gets the data-flow node representing the base from which the field or element is read. */ + Node getBase() { result = DataFlow::instructionNode(insn.getBase()) } + } + + /** + * A data-flow node that reads an element of an array, map, slice or string. + */ + class ElementReadNode extends ComponentReadNode { + override IR::ElementReadInstruction insn; + + /** Gets the data-flow node representing the index of the element being read. */ + Node getIndex() { result = DataFlow::instructionNode(insn.getIndex()) } + + /** Holds if this data-flow node reads element `index` of `base`. */ + predicate reads(Node base, Node index) { this.readsElement(base, index) } + } + + /** + * A data-flow node that extracts a substring or slice from a string, array, pointer to array, + * or slice. + */ + class SliceNode extends InstructionNode { + override IR::SliceInstruction insn; + + /** Gets the base of this slice node. */ + Node getBase() { result = DataFlow::instructionNode(insn.getBase()) } + + /** Gets the lower bound of this slice node. */ + Node getLow() { result = DataFlow::instructionNode(insn.getLow()) } + + /** Gets the upper bound of this slice node. */ + Node getHigh() { result = DataFlow::instructionNode(insn.getHigh()) } + + /** Gets the maximum of this slice node. */ + Node getMax() { result = DataFlow::instructionNode(insn.getMax()) } + } + + /** + * A data-flow node corresponding to an expression with a binary operator. + */ + class BinaryOperationNode extends Node { + Node left; + Node right; + string op; + + BinaryOperationNode() { + exists(BinaryExpr bin | bin = this.asExpr() | + left = DataFlow::exprNode(bin.getLeftOperand()) and + right = DataFlow::exprNode(bin.getRightOperand()) and + op = bin.getOperator() + ) + or + exists(IR::EvalCompoundAssignRhsInstruction rhs, CompoundAssignStmt assgn, string o | + rhs = this.asInstruction() and assgn = rhs.getAssignment() and o = assgn.getOperator() + | + left = DataFlow::exprNode(assgn.getLhs()) and + right = DataFlow::exprNode(assgn.getRhs()) and + op = o.substring(0, o.length() - 1) + ) + or + exists(IR::EvalIncDecRhsInstruction rhs, IncDecStmt ids | + rhs = this.asInstruction() and ids = rhs.getStmt() + | + left = DataFlow::exprNode(ids.getOperand()) and + right = + DataFlow::instructionNode(any(IR::EvalImplicitOneInstruction one | one.getStmt() = ids)) and + op = ids.getOperator().charAt(0) + ) + } + + /** Holds if this operation may have observable side effects. */ + predicate mayHaveSideEffects() { this.asExpr().mayHaveOwnSideEffects() } + + /** Gets the left operand of this operation. */ + Node getLeftOperand() { result = left } + + /** Gets the right operand of this operation. */ + Node getRightOperand() { result = right } + + /** Gets an operand of this operation. */ + Node getAnOperand() { result = left or result = right } + + /** Gets the operator of this operation. */ + string getOperator() { result = op } + + /** Holds if `x` and `y` are the operands of this operation, in either order. */ + predicate hasOperands(Node x, Node y) { + x = this.getAnOperand() and + y = this.getAnOperand() and + x != y + } + } + + /** + * A data-flow node corresponding to an expression with a unary operator. + */ + class UnaryOperationNode extends InstructionNode { + UnaryOperationNode() { + this.asExpr() instanceof UnaryExpr + or + this.asExpr() instanceof StarExpr + or + insn instanceof IR::EvalImplicitDerefInstruction + } + + /** Holds if this operation may have observable side effects. */ + predicate mayHaveSideEffects() { + this.asExpr().mayHaveOwnSideEffects() + or + insn instanceof IR::EvalImplicitDerefInstruction + } + + /** Gets the operand of this operation. */ + Node getOperand() { + result = DataFlow::exprNode(this.asExpr().(UnaryExpr).getOperand()) + or + result = DataFlow::exprNode(this.asExpr().(StarExpr).getBase()) + or + result = DataFlow::exprNode(insn.(IR::EvalImplicitDerefInstruction).getOperand()) + } + + /** Gets the operator of this operation. */ + string getOperator() { + result = this.asExpr().(UnaryExpr).getOperator() + or + this.asExpr() instanceof StarExpr and + result = "*" + or + insn instanceof IR::EvalImplicitDerefInstruction and + result = "*" + } + } + + /** + * A data-flow node that dereferences a pointer. + */ + class PointerDereferenceNode extends UnaryOperationNode { + PointerDereferenceNode() { + this.asExpr() instanceof StarExpr + or + this.asExpr() instanceof DerefExpr + or + insn instanceof IR::EvalImplicitDerefInstruction + } + } + + /** + * A data-flow node that takes the address of a memory location. + */ + class AddressOperationNode extends UnaryOperationNode, ExprNode { + override AddressExpr expr; + } + + /** + * A data-flow node that reads the value of a field. + */ + class FieldReadNode extends ComponentReadNode { + override IR::FieldReadInstruction insn; + + /** Gets the field this node reads. */ + Field getField() { result = insn.getField() } + + /** Gets the name of the field this node reads. */ + string getFieldName() { result = this.getField().getName() } + } + + /** + * A data-flow node that refers to a method. + */ + class MethodReadNode extends ReadNode { + override IR::MethodReadInstruction insn; + + /** Gets the receiver node on which the method is referenced. */ + Node getReceiver() { result = DataFlow::instructionNode(insn.getReceiver()) } + + /** Gets the method this node refers to. */ + Method getMethod() { result = insn.getMethod() } + + /** Gets the name of the method this node refers to. */ + string getMethodName() { result = this.getMethod().getName() } + } + + /** + * A data-flow node performing a relational comparison using `<`, `<=`, `>` or `>=`. + */ + class RelationalComparisonNode extends BinaryOperationNode, ExprNode { + override RelationalComparisonExpr expr; + + /** Holds if this comparison evaluates to `outcome` iff `lesser <= greater + bias`. */ + predicate leq(boolean outcome, Node lesser, Node greater, int bias) { + outcome = true and + lesser = DataFlow::exprNode(expr.getLesserOperand()) and + greater = DataFlow::exprNode(expr.getGreaterOperand()) and + (if expr.isStrict() then bias = -1 else bias = 0) + or + outcome = false and + lesser = DataFlow::exprNode(expr.getGreaterOperand()) and + greater = DataFlow::exprNode(expr.getLesserOperand()) and + (if expr.isStrict() then bias = 0 else bias = -1) + } + } + + /** + * A data-flow node performing an equality test using `==` or `!=`. + */ + class EqualityTestNode extends BinaryOperationNode, ExprNode { + override EqualityTestExpr expr; + + /** Holds if this comparison evaluates to `outcome` iff `lhs == rhs`. */ + predicate eq(boolean outcome, Node lhs, Node rhs) { + outcome = expr.getPolarity() and + expr.hasOperands(lhs.asExpr(), rhs.asExpr()) + } + + /** Gets the polarity of this equality test, that is, `true` for `==` and `false` for `!=`. */ + boolean getPolarity() { result = expr.getPolarity() } + } + + /** + * A data-flow node performing a type cast using either a type conversion + * or an assertion. + */ + class TypeCastNode extends ExprNode { + TypeCastNode() { + expr instanceof TypeAssertExpr + or + expr instanceof ConversionExpr + } + + /** + * Gets the type being converted to. Note this differs from `this.getType()` for + * `TypeAssertExpr`s that return a (result, ok) tuple. + */ + Type getResultType() { + if this.getType() instanceof TupleType + then result = this.getType().(TupleType).getComponentType(0) + else result = this.getType() + } + + /** Gets the operand of the type cast. */ + DataFlow::Node getOperand() { + result.asExpr() = expr.(TypeAssertExpr).getExpr() + or + result.asExpr() = expr.(ConversionExpr).getOperand() + } + } + + /** + * A data-flow node representing an element of an array, map, slice or string defined from `range` statement. + * + * Example: in `_, x := range y { ... }`, this represents the `Node` that extracts the element from the + * range statement, which will flow to `x`. + */ + class RangeElementNode extends Node { + DataFlow::Node base; + IR::ExtractTupleElementInstruction extract; + + RangeElementNode() { + this.asInstruction() = extract and + extract.extractsElement(_, 1) and + extract.getBase().(IR::GetNextEntryInstruction).getDomain() = base.asInstruction() + } + + /** Gets the data-flow node representing the base from which the element is read. */ + DataFlow::Node getBase() { result = base } + } + + /** + * A data-flow node representing an index of an array, map, slice or string defined from `range` statement. + * + * Example: in `i, _ := range y { ... }`, this represents the `Node` that extracts the index from the + * range statement, which will flow to `i`. + */ + class RangeIndexNode extends Node { + DataFlow::Node base; + + RangeIndexNode() { + // when there is a comma, as in `i, x := range y { ... }` + exists(IR::ExtractTupleElementInstruction extract | + this.asInstruction() = extract and + extract.extractsElement(_, 0) and + extract.getBase().(IR::GetNextEntryInstruction).getDomain() = base.asInstruction() + ) + or + // when there is no comma, as in `i := range y { ... }` + not exists(IR::ExtractTupleElementInstruction extract | + extract.getBase() = this.asInstruction() + ) and + base.asInstruction() = this.asInstruction().(IR::GetNextEntryInstruction).getDomain() + } + + /** Gets the data-flow node representing the base from which the element is read. */ + DataFlow::Node getBase() { result = base } + } +} + +private import Private +private import Public + +class SummaryPostUpdateNode extends SummaryNode, PostUpdateNode { + private Node pre; + + SummaryPostUpdateNode() { FlowSummaryImpl::Private::summaryPostUpdateNode(this, pre) } + + override Node getPreUpdateNode() { result = pre } +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll new file mode 100644 index 00000000000..9b8cfb194d7 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll @@ -0,0 +1,348 @@ +private import go +private import DataFlowUtil +private import DataFlowImplCommon +private import ContainerFlow +private import FlowSummaryImpl as FlowSummaryImpl +import DataFlowNodes::Private + +private newtype TReturnKind = + MkReturnKind(int i) { exists(SignatureType st | exists(st.getResultType(i))) } + +ReturnKind getReturnKind(int i) { result = MkReturnKind(i) } + +/** + * A return kind. A return kind describes how a value can be returned + * from a callable. For Go, this is either a return of a single value + * or of one of multiple values. + */ +class ReturnKind extends TReturnKind { + int i; + + ReturnKind() { this = MkReturnKind(i) } + + /** Gets the index of this return value. */ + int getIndex() { result = i } + + /** Gets a textual representation of this return kind. */ + string toString() { result = "return[" + i + "]" } +} + +/** + * Gets a node that can read the value returned from `call` with return kind + * `kind`. + */ +OutNode getAnOutNode(DataFlowCall call, ReturnKind kind) { + exists(DataFlow::CallNode c, int i | c.asExpr() = call and kind = MkReturnKind(i) | + result = c.getResult(i) + ) +} + +/** + * Holds if data flows from `nodeFrom` to `nodeTo` in exactly one local + * (intra-procedural) step, not taking function models into account. + */ +predicate basicLocalFlowStep(Node nodeFrom, Node nodeTo) { + // Instruction -> Instruction + exists(Expr pred, Expr succ | + succ.(LogicalBinaryExpr).getAnOperand() = pred or + succ.(ConversionExpr).getOperand() = pred + | + nodeFrom = exprNode(pred) and + nodeTo = exprNode(succ) + ) + or + // Type assertion: if in the context `checked, ok := e.(*Type)` (in which + // case tuple-extraction instructions exist), flow from `e` to `e.(*Type)[0]`; + // otherwise flow from `e` to `e.(*Type)`. + exists(IR::Instruction evalAssert, TypeAssertExpr assert | + nodeFrom.asExpr() = assert.getExpr() and + evalAssert = IR::evalExprInstruction(assert) and + if exists(IR::extractTupleElement(evalAssert, _)) + then nodeTo.asInstruction() = IR::extractTupleElement(evalAssert, 0) + else nodeTo.asInstruction() = evalAssert + ) + or + // Instruction -> SSA + exists(IR::Instruction pred, SsaExplicitDefinition succ | + succ.getRhs() = pred and + nodeFrom = instructionNode(pred) and + nodeTo = ssaNode(succ) + ) + or + // SSA -> SSA + exists(SsaDefinition pred, SsaDefinition succ | + succ.(SsaVariableCapture).getSourceVariable() = pred.(SsaExplicitDefinition).getSourceVariable() or + succ.(SsaPseudoDefinition).getAnInput() = pred + | + nodeFrom = ssaNode(pred) and + nodeTo = ssaNode(succ) + ) + or + // SSA -> Instruction + exists(SsaDefinition pred, IR::Instruction succ | + succ = pred.getVariable().getAUse() and + nodeFrom = ssaNode(pred) and + nodeTo = instructionNode(succ) + ) + or + // GlobalFunctionNode -> use + nodeFrom = + any(GlobalFunctionNode fn | fn.getFunction() = nodeTo.asExpr().(FunctionName).getTarget()) +} + +/** + * 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 + * global or static variable. + */ +predicate jumpStep(Node n1, Node n2) { + exists(ValueEntity v, Write w | + not v instanceof SsaSourceVariable and + not v instanceof Field and + w.writes(v, n1) and + n2 = v.getARead() + ) +} + +/** + * Holds if data can flow from `node1` to `node2` via an assignment to `c`. + * Thus, `node2` references an object with a content `x` that contains the + * value of `node1`. + */ +predicate storeStep(Node node1, Content c, Node node2) { + // a write `(*p).f = rhs` is modelled as two store steps: `rhs` is flows into field `f` of `(*p)`, + // which in turn flows into the pointer content 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 + c = any(DataFlow::FieldContent fc | fc.getField() = f) + or + node1 = base and + node2.(PostUpdateNode).getPreUpdateNode() = node1.(PointerDereferenceNode).getOperand() and + c = any(DataFlow::PointerContent pc | pc.getPointerType() = node2.getType()) + ) + or + node1 = node2.(AddressOperationNode).getOperand() and + c = any(DataFlow::PointerContent pc | pc.getPointerType() = node2.getType()) + or + FlowSummaryImpl::Private::Steps::summaryStoreStep(node1, c, node2) + or + containerStoreStep(node1, node2, c) +} + +/** + * Holds if data can flow from `node1` to `node2` via a read of `c`. + * Thus, `node1` references an object with a content `c` whose value ends up in + * `node2`. + */ +predicate readStep(Node node1, Content c, Node node2) { + node1 = node2.(PointerDereferenceNode).getOperand() and + c = any(DataFlow::PointerContent pc | pc.getPointerType() = node1.getType()) + or + exists(FieldReadNode read | + node2 = read and + node1 = read.getBase() and + c = any(DataFlow::FieldContent fc | fc.getField() = read.getField()) + ) + or + FlowSummaryImpl::Private::Steps::summaryReadStep(node1, c, node2) + or + containerReadStep(node1, node2, c) +} + +/** + * Holds if values stored inside content `c` are cleared at node `n`. + */ +predicate clearsContent(Node n, Content c) { + // Because our post-update nodes are shared between multiple pre-update + // nodes, attempting to clear content causes summary stores into arg in + // particular to malfunction. + none() + // c instanceof FieldContent and + // FlowSummaryImpl::Private::Steps::summaryStoresIntoArg(c, n) + // or + // FlowSummaryImpl::Private::Steps::summaryClearsContent(n, c) +} + +/** Gets the type of `n` used for type pruning. */ +DataFlowType getNodeType(Node n) { + result = n.getType() + or + result = FlowSummaryImpl::Private::summaryNodeType(n) +} + +/** Gets a string representation of a type returned by `getNodeType()`. */ +string ppReprType(Type t) { result = t.toString() } + +/** + * Holds if `t1` and `t2` are compatible, that is, whether data can flow from + * a node of type `t1` to a node of type `t2`. + */ +pragma[inline] +predicate compatibleTypes(Type t1, Type t2) { + any() // stub implementation +} + +////////////////////////////////////////////////////////////////////////////// +// Java QL library compatibility wrappers +////////////////////////////////////////////////////////////////////////////// +/** A node that performs a type cast. */ +class CastNode extends ExprNode { + override ConversionExpr expr; +} + +class DataFlowExpr = Expr; + +class DataFlowType = Type; + +class DataFlowLocation = Location; + +private newtype TDataFlowCallable = + TCallable(Callable c) or + TFileScope(File f) + +class DataFlowCallable extends TDataFlowCallable { + Callable asCallable() { this = TCallable(result) } + + File asFileScope() { this = TFileScope(result) } + + FuncDef getFuncDef() { result = this.asCallable().getFuncDef() } + + Function asFunction() { result = this.asCallable().asFunction() } + + FuncLit asFuncLit() { result = this.asCallable().asFuncLit() } + + SignatureType getType() { result = this.asCallable().getType() } + + string toString() { + result = this.asCallable().toString() or + result = "File scope: " + this.asFileScope().toString() + } + + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.asCallable().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) or + this.asFileScope().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +/** A function call relevant for data flow. */ +class DataFlowCall extends Expr { + DataFlow::CallNode call; + + DataFlowCall() { this = call.asExpr() } + + /** + * Gets the nth argument for this call. + */ + Node getArgument(int n) { result = call.getArgument(n) } + + /** Gets the data flow node corresponding to this call. */ + ExprNode getNode() { result = call } + + /** Gets the enclosing callable of this call. */ + DataFlowCallable getEnclosingCallable() { + result.asCallable().getFuncDef() = this.getEnclosingFunction() + or + not exists(this.getEnclosingFunction()) and result.asFileScope() = this.getFile() + } +} + +/** Holds if `e` is an expression that always has the same Boolean value `val`. */ +private predicate constantBooleanExpr(Expr e, boolean val) { + e.getBoolValue() = val + or + exists(SsaExplicitDefinition v, Expr src | + IR::evalExprInstruction(e) = v.getVariable().getAUse() and + IR::evalExprInstruction(src) = v.getRhs() and + constantBooleanExpr(src, val) + ) +} + +/** An argument that always has the same Boolean value. */ +private class ConstantBooleanArgumentNode extends ArgumentNode, ExprNode { + ConstantBooleanArgumentNode() { constantBooleanExpr(this.getExpr(), _) } + + /** Gets the Boolean value of this expression. */ + boolean getBooleanValue() { constantBooleanExpr(this.getExpr(), result) } +} + +/** + * Returns a guard that will certainly not hold in calling context `call`. + * + * In particular it does not hold because it checks that `param` has value `b`, but + * in context `call` it is known to have value `!b`. Note this is `noinline`d in order + * to avoid a bad join order in `isUnreachableInCall`. + */ +pragma[noinline] +private ControlFlow::ConditionGuardNode getAFalsifiedGuard(DataFlowCall call) { + exists(SsaParameterNode param, ConstantBooleanArgumentNode arg | + // get constant bool argument and parameter for this call + viableParamArg(call, pragma[only_bind_into](param), pragma[only_bind_into](arg)) and + // which is used in a guard controlling `n` with the opposite value of `arg` + result.ensures(param.getAUse(), arg.getBooleanValue().booleanNot()) + ) +} + +/** + * Holds if the node `n` is unreachable when the call context is `call`. + */ +predicate isUnreachableInCall(Node n, DataFlowCall call) { + getAFalsifiedGuard(call).dominates(n.getBasicBlock()) +} + +int accessPathLimit() { result = 5 } + +/** + * Holds if access paths with `c` at their head always should be tracked at high + * precision. This disables adaptive access path precision for such access paths. + */ +predicate forceHighPrecision(Content c) { + c instanceof ArrayContent or c instanceof CollectionContent +} + +/** The unit type. */ +private newtype TUnit = TMkUnit() + +/** The trivial type with a single element. */ +class Unit extends TUnit { + /** Gets a textual representation of this element. */ + string toString() { result = "unit" } +} + +/** + * Gets the `i`th argument of call `c`, where the receiver of a method call + * counts as argument -1. + */ +Node getArgument(CallNode c, int i) { + result = c.getArgument(i) + or + result = c.(MethodCallNode).getReceiver() and + i = -1 +} + +/** Holds if `n` should be hidden from path explanations. */ +predicate nodeIsHidden(Node n) { none() } + +class LambdaCallKind = Unit; + +/** Holds if `creation` is an expression that creates a lambda of kind `kind` for `c`. */ +predicate lambdaCreation(Node creation, LambdaCallKind kind, DataFlowCallable c) { none() } + +/** Holds if `call` is a lambda call of kind `kind` where `receiver` is the lambda expression. */ +predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { none() } + +/** Extra data-flow steps needed for lambda flow analysis. */ +predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preservesValue) { none() } + +/** + * Holds if flow is allowed to pass from parameter `p` and back to itself as a + * side-effect, resulting in a summary from `p` to itself. + * + * One example would be to allow flow like `p.foo = p.bar;`, which is disallowed + * by default as a heuristic. + */ +predicate allowParameterReturnInSelf(ParameterNode p) { + FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(p) +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll new file mode 100644 index 00000000000..47fa923aa08 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll @@ -0,0 +1,456 @@ +/** + * Provides Go-specific definitions for use in the data flow library. + */ + +import go +import semmle.go.dataflow.FunctionInputsAndOutputs +private import semmle.go.dataflow.ExternalFlow +private import DataFlowPrivate +private import FlowSummaryImpl as FlowSummaryImpl +import DataFlowNodes::Public + +/** + * Holds if `node` reads an element from `base`, either via an element-read (`base[y]`) expression + * or via a range statement `_, node := range base`. + */ +predicate readsAnElement(DataFlow::Node node, DataFlow::Node base) { + node.(ElementReadNode).readsElement(base, _) or + node.(RangeElementNode).getBase() = base +} + +/** + * A model of a function specifying that the function copies input values from + * a parameter or qualifier to a result. + * + * Note that this only models verbatim copying. Flow that does not preserve exact + * values should be modeled by `TaintTracking::FunctionModel` instead. + */ +abstract class FunctionModel extends Function { + /** Holds if data flows through this function from `input` to `output`. */ + abstract predicate hasDataFlow(FunctionInput input, FunctionOutput output); + + /** Gets an input node for this model for the call `c`. */ + DataFlow::Node getAnInputNode(DataFlow::CallNode c) { this.flowStepForCall(result, _, c) } + + /** Gets an output node for this model for the call `c`. */ + DataFlow::Node getAnOutputNode(DataFlow::CallNode c) { this.flowStepForCall(_, result, c) } + + /** Holds if this function model causes data to flow from `pred` to `succ` for the call `c`. */ + predicate flowStepForCall(DataFlow::Node pred, DataFlow::Node succ, DataFlow::CallNode c) { + c = this.getACall() and + exists(FunctionInput inp, FunctionOutput outp | this.hasDataFlow(inp, outp) | + pred = inp.getNode(c) and + succ = outp.getNode(c) + ) + } + + /** Holds if this function model causes data to flow from `pred` to `succ`. */ + predicate flowStep(DataFlow::Node pred, DataFlow::Node succ) { + this.flowStepForCall(pred, succ, _) + } +} + +/** + * Gets the `Node` corresponding to `insn`. + */ +InstructionNode instructionNode(IR::Instruction insn) { result.asInstruction() = insn } + +/** + * Gets the `Node` corresponding to `e`. + */ +ExprNode exprNode(Expr e) { result.asExpr() = e.stripParens() } + +/** + * Gets the `Node` corresponding to the value of `p` at function entry. + */ +ParameterNode parameterNode(Parameter p) { result.asParameter() = p } + +/** + * Gets the `Node` corresponding to the value of `r` at function entry. + */ +ReceiverNode receiverNode(ReceiverVariable r) { result.asReceiverVariable() = r } + +/** + * Gets the data-flow node corresponding to SSA variable `v`. + */ +SsaNode ssaNode(SsaVariable v) { result.getDefinition() = v.getDefinition() } + +/** + * Gets the data-flow node corresponding to the `i`th element of tuple `t` (which is either a call + * with multiple results, an iterator in a range loop, or the result of a type assertion). + */ +Node extractTupleElement(Node t, int i) { + exists(IR::Instruction insn | t = instructionNode(insn) | + result = instructionNode(IR::extractTupleElement(insn, i)) + ) +} + +/** + * Holds if `node` refers to a value returned alongside a non-nil error value. + * + * For example, `0` in `func tryGetInt() (int, error) { return 0, errors.New("no good") }` + */ +predicate isReturnedWithError(Node node) { + exists(ReturnStmt ret, int nodeArg, int errorArg | + ret.getExpr(nodeArg) = node.asExpr() and + nodeArg != errorArg and + ret.getExpr(errorArg).getType() instanceof ErrorType + // That last condition implies ret.getExpr(errorArg) is non-nil, since nil doesn't implement `error` + ) +} + +/** + * Holds if data flows from `nodeFrom` to `nodeTo` in exactly one local + * (intra-procedural) step. + */ +predicate localFlowStep(Node nodeFrom, Node nodeTo) { + simpleLocalFlowStep(nodeFrom, nodeTo) + or + // Simple flow through library code is included in the exposed local + // step relation, even though flow is technically inter-procedural + FlowSummaryImpl::Private::Steps::summaryThroughStep(nodeFrom, nodeTo, true) +} + +/** + * INTERNAL: do not use. + * + * This is the local flow predicate that's used as a building block in global + * data flow. It may have less flow than the `localFlowStep` predicate. + */ +cached +predicate simpleLocalFlowStep(Node nodeFrom, Node nodeTo) { + basicLocalFlowStep(nodeFrom, nodeTo) + or + // step through function model + any(FunctionModel m).flowStep(nodeFrom, nodeTo) + or + FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom, nodeTo, true) +} + +/** + * Holds if data flows from `source` to `sink` in zero or more local + * (intra-procedural) steps. + */ +predicate localFlow(Node source, Node sink) { localFlowStep*(source, sink) } + +private newtype TContent = + TFieldContent(Field f) or + TCollectionContent() or + TArrayContent() or + TPointerContent(PointerType p) or + TMapKeyContent() or + TMapValueContent() or + TSyntheticFieldContent(SyntheticField s) + +/** + * A reference contained in an object. Examples include instance fields, the + * contents of a collection object, the contents of an array or pointer. + */ +class Content extends TContent { + /** Gets the type of the contained data for the purpose of type pruning. */ + DataFlowType getType() { result instanceof EmptyInterfaceType } + + /** Gets a textual representation of this element. */ + abstract string 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://help.semmle.com/QL/learn-ql/ql/locations.html). + */ + predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { + path = "" and sl = 0 and sc = 0 and el = 0 and ec = 0 + } +} + +/** A reference through a field. */ +class FieldContent extends Content, TFieldContent { + Field f; + + FieldContent() { this = TFieldContent(f) } + + /** Gets the field associated with this `FieldContent`. */ + Field getField() { result = f } + + override DataFlowType getType() { result = f.getType() } + + override string toString() { result = f.toString() } + + override predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { + f.getDeclaration().hasLocationInfo(path, sl, sc, el, ec) + } +} + +/** A reference through the contents of some collection-like container. */ +class CollectionContent extends Content, TCollectionContent { + override string toString() { result = "collection" } +} + +/** A reference through an array. */ +class ArrayContent extends Content, TArrayContent { + override string toString() { result = "array" } +} + +/** A reference through a pointer. */ +class PointerContent extends Content, TPointerContent { + PointerType t; + + PointerContent() { this = TPointerContent(t) } + + /** Gets the pointer type that containers with this content must have. */ + PointerType getPointerType() { result = t } + + override DataFlowType getType() { result = t.getBaseType() } + + override string toString() { result = "pointer" } +} + +/** A reference through a map key. */ +class MapKeyContent extends Content, TMapKeyContent { + override string toString() { result = "map.key" } +} + +/** A reference through a map value. */ +class MapValueContent extends Content, TMapValueContent { + override string toString() { result = "map.value" } +} + +class SyntheticFieldContent extends Content, TSyntheticFieldContent { + SyntheticField s; + + SyntheticFieldContent() { this = TSyntheticFieldContent(s) } + + /** Gets the field associated with this `SyntheticFieldContent`. */ + SyntheticField getField() { result = s } + + override DataFlowType getType() { result = s.getType() } + + override string toString() { result = s.toString() } +} + +/** + * A guard that validates some expression. + * + * To use this in a configuration, extend the class and provide a + * characteristic predicate precisely specifying the guard, and override + * `checks` to specify what is being validated and in which branch. + * + * When using a data-flow or taint-flow configuration `cfg`, it is important + * that any classes extending BarrierGuard in scope which are not used in `cfg` + * are disjoint from any classes extending BarrierGuard in scope which are used + * in `cfg`. + */ +abstract class BarrierGuard extends Node { + /** Holds if this guard validates `e` upon evaluating to `branch`. */ + abstract predicate checks(Expr e, boolean branch); + + /** Gets a node guarded by this guard. */ + final Node getAGuardedNode() { + exists(ControlFlow::ConditionGuardNode guard, Node nd, SsaWithFields var | + result = var.getAUse() + | + this.guards(guard, nd, var) and + guard.dominates(result.getBasicBlock()) + ) + } + + /** + * Holds if `guard` markes a point in the control-flow graph where this node + * is known to validate `nd`, which is represented by `ap`. + * + * This predicate exists to enforce a good join order in `getAGuardedNode`. + */ + pragma[noinline] + private predicate guards(ControlFlow::ConditionGuardNode guard, Node nd, SsaWithFields ap) { + this.guards(guard, nd) and nd = ap.getAUse() + } + + /** + * Holds if `guard` markes a point in the control-flow graph where this node + * is known to validate `nd`. + */ + private predicate guards(ControlFlow::ConditionGuardNode guard, Node nd) { + exists(boolean branch | + this.checks(nd.asExpr(), branch) and + guard.ensures(this, branch) + ) + or + exists( + Function f, FunctionInput inp, FunctionOutput outp, DataFlow::Property p, CallNode c, + Node resNode, Node check, boolean outcome + | + this.guardingCall(f, inp, outp, p, c, nd, resNode) and + p.checkOn(check, outcome, resNode) and + guard.ensures(pragma[only_bind_into](check), outcome) + ) + } + + pragma[noinline] + private predicate guardingCall( + Function f, FunctionInput inp, FunctionOutput outp, DataFlow::Property p, CallNode c, Node nd, + Node resNode + ) { + this.guardingFunction(f, inp, outp, p) and + c = f.getACall() and + nd = inp.getNode(c) and + localFlow(pragma[only_bind_out](outp.getNode(c)), resNode) + } + + /** + * Holds if whenever `p` holds of output `outp` of function `f`, this node + * is known to validate the input `inp` of `f`. + * + * We check this by looking for guards on `inp` that dominate a `return` statement that + * is the only `return` in `f` that can return `true`. This means that if `f` returns `true`, + * the guard must have been satisfied. (Similar reasoning is applied for statements returning + * `false`, `nil` or a non-`nil` value.) + */ + private predicate guardingFunction( + Function f, FunctionInput inp, FunctionOutput outp, DataFlow::Property p + ) { + exists(FuncDecl fd, Node arg, Node ret | + fd.getFunction() = f and + localFlow(inp.getExitNode(fd), arg) and + ret = outp.getEntryNode(fd) and + ( + // Case: a function like "if someBarrierGuard(arg) { return true } else { return false }" + exists(ControlFlow::ConditionGuardNode guard | + this.guards(guard, arg) and + guard.dominates(ret.getBasicBlock()) + | + exists(boolean b | + onlyPossibleReturnOfBool(fd, outp, ret, b) and + p.isBoolean(b) + ) + or + onlyPossibleReturnOfNonNil(fd, outp, ret) and + p.isNonNil() + or + onlyPossibleReturnOfNil(fd, outp, ret) and + p.isNil() + ) + or + // Case: a function like "return someBarrierGuard(arg)" + // or "return !someBarrierGuard(arg) && otherCond(...)" + exists(boolean outcome | + ret = getUniqueOutputNode(fd, outp) and + this.checks(arg.asExpr(), outcome) and + // This predicate's contract is (p holds of ret ==> arg is checked), + // (and we have (this has outcome ==> arg is checked)) + // but p.checkOn(ret, outcome, this) gives us (ret has outcome ==> p holds of this), + // so we need to swap outcome and (specifically boolean) p: + DataFlow::booleanProperty(outcome).checkOn(ret, p.asBoolean(), this) + ) + or + // Case: a function like "return guardProxy(arg)" + // or "return !guardProxy(arg) || otherCond(...)" + exists( + Function f2, FunctionInput inp2, FunctionOutput outp2, CallNode c, + DataFlow::Property outpProp + | + ret = getUniqueOutputNode(fd, outp) and + this.guardingFunction(f2, inp2, outp2, outpProp) and + c = f2.getACall() and + arg = inp2.getNode(c) and + ( + // See comment above ("This method's contract...") for rationale re: the inversion of + // `p` and `outpProp` here: + outpProp.checkOn(ret, p.asBoolean(), outp2.getNode(c)) + or + // The particular case where p is non-boolean (i.e., nil or non-nil), and we directly return `c`: + outpProp = p and ret = outp2.getNode(c) + ) + ) + ) + ) + } +} + +DataFlow::Node getUniqueOutputNode(FuncDecl fd, FunctionOutput outp) { + result = unique(DataFlow::Node n | n = outp.getEntryNode(fd) | n) +} + +/** + * Holds if `ret` is a data-flow node whose value contributes to the output `res` of `fd`, + * and that node may have Boolean value `b`. + */ +predicate possiblyReturnsBool(FuncDecl fd, FunctionOutput res, Node ret, Boolean b) { + ret = res.getEntryNode(fd) and + ret.getType().getUnderlyingType() instanceof BoolType and + not ret.getBoolValue() != b +} + +/** + * Holds if `ret` is the only data-flow node whose value contributes to the output `res` of `fd` + * that may have Boolean value `b`, since all the other output nodes have a Boolean value + * other than `b`. + */ +private predicate onlyPossibleReturnOfBool(FuncDecl fd, FunctionOutput res, Node ret, boolean b) { + possiblyReturnsBool(fd, res, ret, b) and + forall(Node otherRet | otherRet = res.getEntryNode(fd) and otherRet != ret | + otherRet.getBoolValue() != b + ) +} + +/** + * Holds if `ret` is a data-flow node whose value contributes to the output `res` of `fd`, + * and that node may evaluate to a value other than `nil`. + */ +predicate possiblyReturnsNonNil(FuncDecl fd, FunctionOutput res, Node ret) { + ret = res.getEntryNode(fd) and + not ret.asExpr() = Builtin::nil().getAReference() +} + +/** + * Holds if `ret` is the only data-flow node whose value contributes to the output `res` of `fd` + * that may have a value other than `nil`, since all the other output nodes evaluate to `nil`. + */ +private predicate onlyPossibleReturnOfNonNil(FuncDecl fd, FunctionOutput res, Node ret) { + possiblyReturnsNonNil(fd, res, ret) and + forall(Node otherRet | otherRet = res.getEntryNode(fd) and otherRet != ret | + otherRet.asExpr() = Builtin::nil().getAReference() + ) +} + +/** + * Holds if function `f`'s result `output`, which must be a return value, cannot be nil. + */ +private predicate certainlyReturnsNonNil(Function f, FunctionOutput output) { + output.isResult(_) and + ( + f.hasQualifiedName("errors", "New") + or + f.hasQualifiedName("fmt", "Errorf") + or + f in [Builtin::new(), Builtin::make()] + or + exists(FuncDecl fd | fd = f.getFuncDecl() | + forex(DataFlow::Node ret | ret = output.getEntryNode(fd) | isCertainlyNotNil(ret)) + ) + ) +} + +/** + * Holds if `node` cannot be `nil`. + */ +private predicate isCertainlyNotNil(DataFlow::Node node) { + node instanceof DataFlow::AddressOperationNode + or + exists(DataFlow::CallNode c, FunctionOutput output | output.getExitNode(c) = node | + certainlyReturnsNonNil(c.getTarget(), output) + ) +} + +/** + * Holds if `ret` is the only data-flow node whose value contributes to the output `res` of `fd` + * that returns `nil`, since all the other output nodes are known to be non-nil. + */ +private predicate onlyPossibleReturnOfNil(FuncDecl fd, FunctionOutput res, DataFlow::Node ret) { + ret = res.getEntryNode(fd) and + ret.asExpr() = Builtin::nil().getAReference() and + forall(DataFlow::Node otherRet | otherRet = res.getEntryNode(fd) and otherRet != ret | + isCertainlyNotNil(otherRet) + ) +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll new file mode 100644 index 00000000000..e59c96a5c17 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll @@ -0,0 +1,1155 @@ +/** + * Provides classes and predicates for defining flow summaries. + * + * The definitions in this file are language-independent, and language-specific + * definitions are passed in via the `DataFlowImplSpecific` and + * `FlowSummaryImplSpecific` modules. + */ + +private import FlowSummaryImplSpecific +private import DataFlowImplSpecific::Private +private import DataFlowImplSpecific::Public +private import DataFlowImplCommon + +/** Provides classes and predicates for defining flow summaries. */ +module Public { + private import Private + + /** + * A component used in a flow summary. + * + * Either a parameter or an argument at a given position, a specific + * content type, or a return kind. + */ + class SummaryComponent extends TSummaryComponent { + /** Gets a textual representation of this summary component. */ + string toString() { + exists(Content c | this = TContentSummaryComponent(c) and result = c.toString()) + or + exists(ArgumentPosition pos | + this = TParameterSummaryComponent(pos) and result = "parameter " + pos + ) + or + exists(ParameterPosition pos | + this = TArgumentSummaryComponent(pos) and result = "argument " + pos + ) + or + exists(ReturnKind rk | this = TReturnSummaryComponent(rk) and result = "return (" + rk + ")") + } + } + + /** Provides predicates for constructing summary components. */ + module SummaryComponent { + /** Gets a summary component for content `c`. */ + SummaryComponent content(Content c) { result = TContentSummaryComponent(c) } + + /** Gets a summary component for a parameter at position `pos`. */ + SummaryComponent parameter(ArgumentPosition pos) { result = TParameterSummaryComponent(pos) } + + /** Gets a summary component for an argument at position `pos`. */ + SummaryComponent argument(ParameterPosition pos) { result = TArgumentSummaryComponent(pos) } + + /** Gets a summary component for a return of kind `rk`. */ + SummaryComponent return(ReturnKind rk) { result = TReturnSummaryComponent(rk) } + } + + /** + * A (non-empty) stack of summary components. + * + * A stack is used to represent where data is read from (input) or where it + * is written to (output). For example, an input stack `[Field f, Argument 0]` + * means that data is read from field `f` from the `0`th argument, while an + * output stack `[Field g, Return]` means that data is written to the field + * `g` of the returned object. + */ + class SummaryComponentStack extends TSummaryComponentStack { + /** Gets the head of this stack. */ + SummaryComponent head() { + this = TSingletonSummaryComponentStack(result) or + this = TConsSummaryComponentStack(result, _) + } + + /** Gets the tail of this stack, if any. */ + SummaryComponentStack tail() { this = TConsSummaryComponentStack(_, result) } + + /** Gets the length of this stack. */ + int length() { + this = TSingletonSummaryComponentStack(_) and result = 1 + or + result = 1 + this.tail().length() + } + + /** Gets the stack obtained by dropping the first `i` elements, if any. */ + SummaryComponentStack drop(int i) { + i = 0 and result = this + or + result = this.tail().drop(i - 1) + } + + /** Holds if this stack contains summary component `c`. */ + predicate contains(SummaryComponent c) { c = this.drop(_).head() } + + /** Gets the bottom element of this stack. */ + SummaryComponent bottom() { + this = TSingletonSummaryComponentStack(result) or result = this.tail().bottom() + } + + /** Gets a textual representation of this stack. */ + string toString() { + exists(SummaryComponent head, SummaryComponentStack tail | + head = this.head() and + tail = this.tail() and + result = tail + "." + head + ) + or + exists(SummaryComponent c | + this = TSingletonSummaryComponentStack(c) and + result = c.toString() + ) + } + } + + /** Provides predicates for constructing stacks of summary components. */ + module SummaryComponentStack { + /** Gets a singleton stack containing `c`. */ + SummaryComponentStack singleton(SummaryComponent c) { + result = TSingletonSummaryComponentStack(c) + } + + /** + * Gets the stack obtained by pushing `head` onto `tail`. + * + * Make sure to override `RequiredSummaryComponentStack::required()` in order + * to ensure that the constructed stack exists. + */ + SummaryComponentStack push(SummaryComponent head, SummaryComponentStack tail) { + result = TConsSummaryComponentStack(head, tail) + } + + /** Gets a singleton stack for an argument at position `pos`. */ + SummaryComponentStack argument(ParameterPosition pos) { + result = singleton(SummaryComponent::argument(pos)) + } + + /** Gets a singleton stack representing a return of kind `rk`. */ + SummaryComponentStack return(ReturnKind rk) { result = singleton(SummaryComponent::return(rk)) } + } + + private predicate noComponentSpecificCsv(SummaryComponent sc) { + not exists(getComponentSpecificCsv(sc)) + } + + /** Gets a textual representation of this component used for flow summaries. */ + private string getComponentCsv(SummaryComponent sc) { + result = getComponentSpecificCsv(sc) + or + noComponentSpecificCsv(sc) and + ( + exists(ArgumentPosition pos | + sc = TParameterSummaryComponent(pos) and + result = "Parameter[" + getArgumentPositionCsv(pos) + "]" + ) + or + exists(ParameterPosition pos | + sc = TArgumentSummaryComponent(pos) and + result = "Argument[" + getParameterPositionCsv(pos) + "]" + ) + or + sc = TReturnSummaryComponent(getReturnValueKind()) and result = "ReturnValue" + ) + } + + /** Gets a textual representation of this stack used for flow summaries. */ + string getComponentStackCsv(SummaryComponentStack stack) { + exists(SummaryComponent head, SummaryComponentStack tail | + head = stack.head() and + tail = stack.tail() and + result = getComponentStackCsv(tail) + "." + getComponentCsv(head) + ) + or + exists(SummaryComponent c | + stack = TSingletonSummaryComponentStack(c) and + result = getComponentCsv(c) + ) + } + + /** + * A class that exists for QL technical reasons only (the IPA type used + * to represent component stacks needs to be bounded). + */ + class RequiredSummaryComponentStack extends Unit { + /** + * Holds if the stack obtained by pushing `head` onto `tail` is required. + */ + abstract predicate required(SummaryComponent head, SummaryComponentStack tail); + } + + /** A callable with a flow summary. */ + abstract class SummarizedCallable extends DataFlowCallable { + /** + * Holds if data may flow from `input` to `output` through this callable. + * + * `preservesValue` indicates whether this is a value-preserving step + * or a taint-step. + * + * Input specifications are restricted to stacks that end with + * `SummaryComponent::argument(_)`, preceded by zero or more + * `SummaryComponent::return(_)` or `SummaryComponent::content(_)` components. + * + * Output specifications are restricted to stacks that end with + * `SummaryComponent::return(_)` or `SummaryComponent::argument(_)`. + * + * Output stacks ending with `SummaryComponent::return(_)` can be preceded by zero + * or more `SummaryComponent::content(_)` components. + * + * Output stacks ending with `SummaryComponent::argument(_)` can be preceded by an + * optional `SummaryComponent::parameter(_)` component, which in turn can be preceded + * by zero or more `SummaryComponent::content(_)` components. + */ + pragma[nomagic] + predicate propagatesFlow( + SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue + ) { + none() + } + + /** + * Holds if values stored inside `content` are cleared on objects passed as + * arguments at position `pos` to this callable. + */ + pragma[nomagic] + predicate clearsContent(ParameterPosition pos, Content content) { none() } + } +} + +/** + * Provides predicates for compiling flow summaries down to atomic local steps, + * read steps, and store steps. + */ +module Private { + private import Public + import AccessPathSyntax + + newtype TSummaryComponent = + TContentSummaryComponent(Content c) or + TParameterSummaryComponent(ArgumentPosition pos) or + TArgumentSummaryComponent(ParameterPosition pos) or + TReturnSummaryComponent(ReturnKind rk) + + private TParameterSummaryComponent thisParam() { + result = TParameterSummaryComponent(instanceParameterPosition()) + } + + newtype TSummaryComponentStack = + TSingletonSummaryComponentStack(SummaryComponent c) or + TConsSummaryComponentStack(SummaryComponent head, SummaryComponentStack tail) { + any(RequiredSummaryComponentStack x).required(head, tail) + or + any(RequiredSummaryComponentStack x).required(TParameterSummaryComponent(_), tail) and + head = thisParam() + or + derivedFluentFlowPush(_, _, _, head, tail, _) + } + + pragma[nomagic] + private predicate summary( + SummarizedCallable c, SummaryComponentStack input, SummaryComponentStack output, + boolean preservesValue + ) { + c.propagatesFlow(input, output, preservesValue) + or + // observe side effects of callbacks on input arguments + c.propagatesFlow(output, input, preservesValue) and + preservesValue = true and + isCallbackParameter(input) and + isContentOfArgument(output, _) + or + // flow from the receiver of a callback into the instance-parameter + exists(SummaryComponentStack s, SummaryComponentStack callbackRef | + c.propagatesFlow(s, _, _) or c.propagatesFlow(_, s, _) + | + callbackRef = s.drop(_) and + (isCallbackParameter(callbackRef) or callbackRef.head() = TReturnSummaryComponent(_)) and + input = callbackRef.tail() and + output = TConsSummaryComponentStack(thisParam(), input) and + preservesValue = true + ) + or + exists(SummaryComponentStack arg, SummaryComponentStack return | + derivedFluentFlow(c, input, arg, return, preservesValue) + | + arg.length() = 1 and + output = return + or + exists(SummaryComponent head, SummaryComponentStack tail | + derivedFluentFlowPush(c, input, arg, head, tail, 0) and + output = SummaryComponentStack::push(head, tail) + ) + ) + or + // Chain together summaries where values get passed into callbacks along the way + exists(SummaryComponentStack mid, boolean preservesValue1, boolean preservesValue2 | + c.propagatesFlow(input, mid, preservesValue1) and + c.propagatesFlow(mid, output, preservesValue2) and + mid.drop(mid.length() - 2) = + SummaryComponentStack::push(TParameterSummaryComponent(_), + SummaryComponentStack::singleton(TArgumentSummaryComponent(_))) and + preservesValue = preservesValue1.booleanAnd(preservesValue2) + ) + } + + /** + * Holds if `c` has a flow summary from `input` to `arg`, where `arg` + * writes to (contents of) arguments at position `pos`, and `c` has a + * value-preserving flow summary from the arguments at position `pos` + * to a return value (`return`). + * + * In such a case, we derive flow from `input` to (contents of) the return + * value. + * + * As an example, this simplifies modeling of fluent methods: + * for `StringBuilder.append(x)` with a specified value flow from qualifier to + * return value and taint flow from argument 0 to the qualifier, then this + * allows us to infer taint flow from argument 0 to the return value. + */ + pragma[nomagic] + private predicate derivedFluentFlow( + SummarizedCallable c, SummaryComponentStack input, SummaryComponentStack arg, + SummaryComponentStack return, boolean preservesValue + ) { + exists(ParameterPosition pos | + summary(c, input, arg, preservesValue) and + isContentOfArgument(arg, pos) and + summary(c, SummaryComponentStack::argument(pos), return, true) and + return.bottom() = TReturnSummaryComponent(_) + ) + } + + pragma[nomagic] + private predicate derivedFluentFlowPush( + SummarizedCallable c, SummaryComponentStack input, SummaryComponentStack arg, + SummaryComponent head, SummaryComponentStack tail, int i + ) { + derivedFluentFlow(c, input, arg, tail, _) and + head = arg.drop(i).head() and + i = arg.length() - 2 + or + exists(SummaryComponent head0, SummaryComponentStack tail0 | + derivedFluentFlowPush(c, input, arg, head0, tail0, i + 1) and + head = arg.drop(i).head() and + tail = SummaryComponentStack::push(head0, tail0) + ) + } + + private predicate isCallbackParameter(SummaryComponentStack s) { + s.head() = TParameterSummaryComponent(_) and exists(s.tail()) + } + + private predicate isContentOfArgument(SummaryComponentStack s, ParameterPosition pos) { + s.head() = TContentSummaryComponent(_) and isContentOfArgument(s.tail(), pos) + or + s = SummaryComponentStack::argument(pos) + } + + private predicate outputState(SummarizedCallable c, SummaryComponentStack s) { + summary(c, _, s, _) + or + exists(SummaryComponentStack out | + outputState(c, out) and + out.head() = TContentSummaryComponent(_) and + s = out.tail() + ) + or + // Add the argument node corresponding to the requested post-update node + inputState(c, s) and isCallbackParameter(s) + } + + private predicate inputState(SummarizedCallable c, SummaryComponentStack s) { + summary(c, s, _, _) + or + exists(SummaryComponentStack inp | inputState(c, inp) and s = inp.tail()) + or + exists(SummaryComponentStack out | + outputState(c, out) and + out.head() = TParameterSummaryComponent(_) and + s = out.tail() + ) + } + + private newtype TSummaryNodeState = + TSummaryNodeInputState(SummaryComponentStack s) { inputState(_, s) } or + TSummaryNodeOutputState(SummaryComponentStack s) { outputState(_, s) } or + TSummaryNodeClearsContentState(ParameterPosition pos, boolean post) { + any(SummarizedCallable sc).clearsContent(pos, _) and post in [false, true] + } + + /** + * A state used to break up (complex) flow summaries into atomic flow steps. + * For a flow summary + * + * ```ql + * propagatesFlow( + * SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue + * ) + * ``` + * + * the following states are used: + * + * - `TSummaryNodeInputState(SummaryComponentStack s)`: + * this state represents that the components in `s` _have been read_ from the + * input. + * - `TSummaryNodeOutputState(SummaryComponentStack s)`: + * this state represents that the components in `s` _remain to be written_ to + * the output. + */ + class SummaryNodeState extends TSummaryNodeState { + /** Holds if this state is a valid input state for `c`. */ + pragma[nomagic] + predicate isInputState(SummarizedCallable c, SummaryComponentStack s) { + this = TSummaryNodeInputState(s) and + inputState(c, s) + } + + /** Holds if this state is a valid output state for `c`. */ + pragma[nomagic] + predicate isOutputState(SummarizedCallable c, SummaryComponentStack s) { + this = TSummaryNodeOutputState(s) and + outputState(c, s) + } + + /** Gets a textual representation of this state. */ + string toString() { + exists(SummaryComponentStack s | + this = TSummaryNodeInputState(s) and + result = "read: " + s + ) + or + exists(SummaryComponentStack s | + this = TSummaryNodeOutputState(s) and + result = "to write: " + s + ) + or + exists(ParameterPosition pos, boolean post, string postStr | + this = TSummaryNodeClearsContentState(pos, post) and + (if post = true then postStr = " (post)" else postStr = "") and + result = "clear: " + pos + postStr + ) + } + } + + /** + * Holds if `state` represents having read from a parameter at position + * `pos` in `c`. In this case we are not synthesizing a data-flow node, + * but instead assume that a relevant parameter node already exists. + */ + private predicate parameterReadState( + SummarizedCallable c, SummaryNodeState state, ParameterPosition pos + ) { + state.isInputState(c, SummaryComponentStack::argument(pos)) + } + + /** + * Holds if a synthesized summary node is needed for the state `state` in summarized + * callable `c`. + */ + predicate summaryNodeRange(SummarizedCallable c, SummaryNodeState state) { + state.isInputState(c, _) and + not parameterReadState(c, state, _) + or + state.isOutputState(c, _) + or + exists(ParameterPosition pos | + c.clearsContent(pos, _) and + state = TSummaryNodeClearsContentState(pos, _) + ) + } + + pragma[noinline] + private Node summaryNodeInputState(SummarizedCallable c, SummaryComponentStack s) { + exists(SummaryNodeState state | state.isInputState(c, s) | + result = summaryNode(c, state) + or + exists(ParameterPosition pos | + parameterReadState(c, state, pos) and + result.(ParamNode).isParameterOf(c, pos) + ) + ) + } + + pragma[noinline] + private Node summaryNodeOutputState(SummarizedCallable c, SummaryComponentStack s) { + exists(SummaryNodeState state | + state.isOutputState(c, s) and + result = summaryNode(c, state) + ) + } + + /** + * Holds if a write targets `post`, which is a post-update node for a + * parameter at position `pos` in `c`. + */ + private predicate isParameterPostUpdate(Node post, SummarizedCallable c, ParameterPosition pos) { + post = summaryNodeOutputState(c, SummaryComponentStack::argument(pos)) + } + + /** Holds if a parameter node at position `pos` is required for `c`. */ + predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) { + parameterReadState(c, _, pos) + or + isParameterPostUpdate(_, c, pos) + or + c.clearsContent(pos, _) + } + + private predicate callbackOutput( + SummarizedCallable c, SummaryComponentStack s, Node receiver, ReturnKind rk + ) { + any(SummaryNodeState state).isInputState(c, s) and + s.head() = TReturnSummaryComponent(rk) and + receiver = summaryNodeInputState(c, s.drop(1)) + } + + private predicate callbackInput( + SummarizedCallable c, SummaryComponentStack s, Node receiver, ArgumentPosition pos + ) { + any(SummaryNodeState state).isOutputState(c, s) and + s.head() = TParameterSummaryComponent(pos) and + receiver = summaryNodeInputState(c, s.drop(1)) + } + + /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ + predicate summaryCallbackRange(SummarizedCallable c, Node receiver) { + callbackOutput(c, _, receiver, _) + or + callbackInput(c, _, receiver, _) + } + + /** + * Gets the type of synthesized summary node `n`. + * + * The type is computed based on the language-specific predicates + * `getContentType()`, `getReturnType()`, `getCallbackParameterType()`, and + * `getCallbackReturnType()`. + */ + DataFlowType summaryNodeType(Node n) { + exists(Node pre | + summaryPostUpdateNode(n, pre) and + result = getNodeType(pre) + ) + or + exists(SummarizedCallable c, SummaryComponentStack s, SummaryComponent head | head = s.head() | + n = summaryNodeInputState(c, s) and + ( + exists(Content cont | + head = TContentSummaryComponent(cont) and result = getContentType(cont) + ) + or + exists(ReturnKind rk | + head = TReturnSummaryComponent(rk) and + result = + getCallbackReturnType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), + s.drop(1))), rk) + ) + ) + or + n = summaryNodeOutputState(c, s) and + ( + exists(Content cont | + head = TContentSummaryComponent(cont) and result = getContentType(cont) + ) + or + s.length() = 1 and + exists(ReturnKind rk | + head = TReturnSummaryComponent(rk) and + result = getReturnType(c, rk) + ) + or + exists(ArgumentPosition pos | head = TParameterSummaryComponent(pos) | + result = + getCallbackParameterType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), + s.drop(1))), pos) + ) + ) + ) + or + exists(SummarizedCallable c, ParameterPosition pos, ParamNode p | + n = summaryNode(c, TSummaryNodeClearsContentState(pos, false)) and + p.isParameterOf(c, pos) and + result = getNodeType(p) + ) + } + + /** Holds if summary node `out` contains output of kind `rk` from call `c`. */ + predicate summaryOutNode(DataFlowCall c, Node out, ReturnKind rk) { + exists(SummarizedCallable callable, SummaryComponentStack s, Node receiver | + callbackOutput(callable, s, receiver, rk) and + out = summaryNodeInputState(callable, s) and + c = summaryDataFlowCall(receiver) + ) + } + + /** Holds if summary node `arg` is at position `pos` in the call `c`. */ + predicate summaryArgumentNode(DataFlowCall c, Node arg, ArgumentPosition pos) { + exists(SummarizedCallable callable, SummaryComponentStack s, Node receiver | + callbackInput(callable, s, receiver, pos) and + arg = summaryNodeOutputState(callable, s) and + c = summaryDataFlowCall(receiver) + ) + } + + /** Holds if summary node `post` is a post-update node with pre-update node `pre`. */ + predicate summaryPostUpdateNode(Node post, Node pre) { + exists(SummarizedCallable c, ParameterPosition pos | + isParameterPostUpdate(post, c, pos) and + pre.(ParamNode).isParameterOf(c, pos) + or + pre = summaryNode(c, TSummaryNodeClearsContentState(pos, false)) and + post = summaryNode(c, TSummaryNodeClearsContentState(pos, true)) + ) + or + exists(SummarizedCallable callable, SummaryComponentStack s | + callbackInput(callable, s, _, _) and + pre = summaryNodeOutputState(callable, s) and + post = summaryNodeInputState(callable, s) + ) + } + + /** Holds if summary node `ret` is a return node of kind `rk`. */ + predicate summaryReturnNode(Node ret, ReturnKind rk) { + exists(SummarizedCallable callable, SummaryComponentStack s | + ret = summaryNodeOutputState(callable, s) and + s = TSingletonSummaryComponentStack(TReturnSummaryComponent(rk)) + ) + } + + /** + * Holds if flow is allowed to pass from parameter `p`, to a return + * node, and back out to `p`. + */ + predicate summaryAllowParameterReturnInSelf(ParamNode p) { + exists(SummarizedCallable c, ParameterPosition ppos | p.isParameterOf(c, ppos) | + c.clearsContent(ppos, _) + or + exists(SummaryComponentStack inputContents, SummaryComponentStack outputContents | + summary(c, inputContents, outputContents, _) and + inputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) and + outputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) + ) + ) + } + + /** Provides a compilation of flow summaries to atomic data-flow steps. */ + module Steps { + /** + * Holds if there is a local step from `pred` to `succ`, which is synthesized + * from a flow summary. + */ + predicate summaryLocalStep(Node pred, Node succ, boolean preservesValue) { + exists( + SummarizedCallable c, SummaryComponentStack inputContents, + SummaryComponentStack outputContents + | + summary(c, inputContents, outputContents, preservesValue) and + pred = summaryNodeInputState(c, inputContents) and + succ = summaryNodeOutputState(c, outputContents) + | + preservesValue = true + or + preservesValue = false and not summary(c, inputContents, outputContents, true) + ) + or + exists(SummarizedCallable c, ParameterPosition pos | + pred.(ParamNode).isParameterOf(c, pos) and + succ = summaryNode(c, TSummaryNodeClearsContentState(pos, _)) and + preservesValue = true + ) + } + + /** + * Holds if there is a read step of content `c` from `pred` to `succ`, which + * is synthesized from a flow summary. + */ + predicate summaryReadStep(Node pred, Content c, Node succ) { + exists(SummarizedCallable sc, SummaryComponentStack s | + pred = summaryNodeInputState(sc, s.drop(1)) and + succ = summaryNodeInputState(sc, s) and + SummaryComponent::content(c) = s.head() + ) + } + + /** + * Holds if there is a store step of content `c` from `pred` to `succ`, which + * is synthesized from a flow summary. + */ + predicate summaryStoreStep(Node pred, Content c, Node succ) { + exists(SummarizedCallable sc, SummaryComponentStack s | + pred = summaryNodeOutputState(sc, s) and + succ = summaryNodeOutputState(sc, s.drop(1)) and + SummaryComponent::content(c) = s.head() + ) + } + + /** + * Holds if values stored inside content `c` are cleared at `n`. `n` is a + * synthesized summary node, so in order for values to be cleared at calls + * to the relevant method, it is important that flow does not pass over + * the argument, either via use-use flow or def-use flow. + * + * Example: + * + * ``` + * a.b = taint; + * a.clearB(); // assume we have a flow summary for `clearB` that clears `b` on the qualifier + * sink(a.b); + * ``` + * + * In the above, flow should not pass from `a` on the first line (or the second + * line) to `a` on the third line. Instead, there will be synthesized flow from + * `a` on line 2 to the post-update node for `a` on that line (via an intermediate + * node where field `b` is cleared). + */ + predicate summaryClearsContent(Node n, Content c) { + exists(SummarizedCallable sc, ParameterPosition pos | + n = summaryNode(sc, TSummaryNodeClearsContentState(pos, true)) and + sc.clearsContent(pos, c) + ) + } + + pragma[noinline] + private predicate viableParam( + DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos, ParamNode p + ) { + p.isParameterOf(sc, ppos) and + sc = viableCallable(call) + } + + /** + * Holds if values stored inside content `c` are cleared inside a + * callable to which `arg` is an argument. + * + * In such cases, it is important to prevent use-use flow out of + * `arg` (see comment for `summaryClearsContent`). + */ + predicate summaryClearsContentArg(ArgNode arg, Content c) { + exists(DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos | + argumentPositionMatch(call, arg, ppos) and + viableParam(call, sc, ppos, _) and + sc.clearsContent(ppos, c) + ) + } + + pragma[nomagic] + private ParamNode summaryArgParam0(DataFlowCall call, ArgNode arg) { + exists(ParameterPosition ppos, SummarizedCallable sc | + argumentPositionMatch(call, arg, ppos) and + viableParam(call, sc, ppos, result) + ) + } + + pragma[nomagic] + private ParamNode summaryArgParam(ArgNode arg, ReturnKindExt rk, OutNodeExt out) { + exists(DataFlowCall call | + result = summaryArgParam0(call, arg) and + out = rk.getAnOutNode(call) + ) + } + + /** + * Holds if `arg` flows to `out` using a simple flow summary, that is, a flow + * summary without reads and stores. + * + * NOTE: This step should not be used in global data-flow/taint-tracking, but may + * be useful to include in the exposed local data-flow/taint-tracking relations. + */ + predicate summaryThroughStep(ArgNode arg, Node out, boolean preservesValue) { + exists(ReturnKindExt rk, ReturnNodeExt ret | + summaryLocalStep(summaryArgParam(arg, rk, out), ret, preservesValue) and + ret.getKind() = rk + ) + } + + /** + * Holds if there is a read(+taint) of `c` from `arg` to `out` using a + * flow summary. + * + * NOTE: This step should not be used in global data-flow/taint-tracking, but may + * be useful to include in the exposed local data-flow/taint-tracking relations. + */ + predicate summaryGetterStep(ArgNode arg, Content c, Node out) { + exists(ReturnKindExt rk, Node mid, ReturnNodeExt ret | + summaryReadStep(summaryArgParam(arg, rk, out), c, mid) and + summaryLocalStep(mid, ret, _) and + ret.getKind() = rk + ) + } + + /** + * Holds if there is a (taint+)store of `arg` into content `c` of `out` using a + * flow summary. + * + * NOTE: This step should not be used in global data-flow/taint-tracking, but may + * be useful to include in the exposed local data-flow/taint-tracking relations. + */ + predicate summarySetterStep(ArgNode arg, Content c, Node out) { + exists(ReturnKindExt rk, Node mid, ReturnNodeExt ret | + summaryLocalStep(summaryArgParam(arg, rk, out), mid, _) and + summaryStoreStep(mid, c, ret) and + ret.getKind() = rk + ) + } + } + + /** + * Provides a means of translating externally (e.g., CSV) defined flow + * summaries into a `SummarizedCallable`s. + */ + module External { + /** Holds if `spec` is a relevant external specification. */ + private predicate relevantSpec(string spec) { + summaryElement(_, spec, _, _) or + summaryElement(_, _, spec, _) or + sourceElement(_, spec, _) or + sinkElement(_, spec, _) + } + + private class AccessPathRange extends AccessPath::Range { + AccessPathRange() { relevantSpec(this) } + } + + /** Holds if specification component `c` parses as parameter `n`. */ + predicate parseParam(AccessPathToken token, ArgumentPosition pos) { + token.getName() = "Parameter" and + pos = parseParamBody(token.getAnArgument()) + } + + /** Holds if specification component `c` parses as argument `n`. */ + predicate parseArg(AccessPathToken token, ParameterPosition pos) { + token.getName() = "Argument" and + pos = parseArgBody(token.getAnArgument()) + } + + private SummaryComponent interpretComponent(AccessPathToken token) { + exists(ParameterPosition pos | + parseArg(token, pos) and result = SummaryComponent::argument(pos) + ) + or + exists(ArgumentPosition pos | + parseParam(token, pos) and result = SummaryComponent::parameter(pos) + ) + or + token = "ReturnValue" and result = SummaryComponent::return(getReturnValueKind()) + or + result = interpretComponentSpecific(token) + } + + /** + * Holds if `spec` specifies summary component stack `stack`. + */ + predicate interpretSpec(AccessPath spec, SummaryComponentStack stack) { + interpretSpec(spec, spec.getNumToken(), stack) + } + + /** Holds if the first `n` tokens of `spec` resolves to `stack`. */ + private predicate interpretSpec(AccessPath spec, int n, SummaryComponentStack stack) { + n = 1 and + stack = SummaryComponentStack::singleton(interpretComponent(spec.getToken(0))) + or + exists(SummaryComponent head, SummaryComponentStack tail | + interpretSpec(spec, n, head, tail) and + stack = SummaryComponentStack::push(head, tail) + ) + } + + /** Holds if the first `n` tokens of `spec` resolves to `head` followed by `tail` */ + private predicate interpretSpec( + AccessPath spec, int n, SummaryComponent head, SummaryComponentStack tail + ) { + interpretSpec(spec, n - 1, tail) and + head = interpretComponent(spec.getToken(n - 1)) + } + + private class MkStack extends RequiredSummaryComponentStack { + override predicate required(SummaryComponent head, SummaryComponentStack tail) { + interpretSpec(_, _, head, tail) + } + } + + private class SummarizedCallableExternal extends SummarizedCallable { + SummarizedCallableExternal() { summaryElement(this, _, _, _) } + + override predicate propagatesFlow( + SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue + ) { + exists(AccessPath inSpec, AccessPath outSpec, string kind | + summaryElement(this, inSpec, outSpec, kind) and + interpretSpec(inSpec, input) and + interpretSpec(outSpec, output) + | + kind = "value" and preservesValue = true + or + kind = "taint" and preservesValue = false + ) + } + } + + /** Holds if component `c` of specification `spec` cannot be parsed. */ + predicate invalidSpecComponent(AccessPath spec, string c) { + c = spec.getToken(_) and + not exists(interpretComponent(c)) + } + + private predicate inputNeedsReference(AccessPathToken c) { + c.getName() = "Argument" or + inputNeedsReferenceSpecific(c) + } + + private predicate outputNeedsReference(AccessPathToken c) { + c.getName() = ["Argument", "ReturnValue"] or + outputNeedsReferenceSpecific(c) + } + + private predicate sourceElementRef(InterpretNode ref, AccessPath output, string kind) { + exists(SourceOrSinkElement e | + sourceElement(e, output, kind) and + if outputNeedsReference(output.getToken(0)) + then e = ref.getCallTarget() + else e = ref.asElement() + ) + } + + private predicate sinkElementRef(InterpretNode ref, AccessPath input, string kind) { + exists(SourceOrSinkElement e | + sinkElement(e, input, kind) and + if inputNeedsReference(input.getToken(0)) + then e = ref.getCallTarget() + else e = ref.asElement() + ) + } + + /** Holds if the first `n` tokens of `output` resolve to the given interpretation. */ + private predicate interpretOutput( + AccessPath output, int n, InterpretNode ref, InterpretNode node + ) { + sourceElementRef(ref, output, _) and + n = 0 and + ( + if output = "" + then + // Allow language-specific interpretation of the empty access path + interpretOutputSpecific("", ref, node) + else node = ref + ) + or + exists(InterpretNode mid, AccessPathToken c | + interpretOutput(output, n - 1, ref, mid) and + c = output.getToken(n - 1) + | + exists(ArgumentPosition apos, ParameterPosition ppos | + node.asNode().(PostUpdateNode).getPreUpdateNode().(ArgNode).argumentOf(mid.asCall(), apos) and + parameterMatch(ppos, apos) + | + c = "Argument" or parseArg(c, ppos) + ) + or + exists(ArgumentPosition apos, ParameterPosition ppos | + node.asNode().(ParamNode).isParameterOf(mid.asCallable(), ppos) and + parameterMatch(ppos, apos) + | + c = "Parameter" or parseParam(c, apos) + ) + or + c = "ReturnValue" and + node.asNode() = getAnOutNodeExt(mid.asCall(), TValueReturn(getReturnValueKind())) + or + interpretOutputSpecific(c, mid, node) + ) + } + + /** Holds if the first `n` tokens of `input` resolve to the given interpretation. */ + private predicate interpretInput(AccessPath input, int n, InterpretNode ref, InterpretNode node) { + sinkElementRef(ref, input, _) and + n = 0 and + ( + if input = "" + then + // Allow language-specific interpretation of the empty access path + interpretInputSpecific("", ref, node) + else node = ref + ) + or + exists(InterpretNode mid, AccessPathToken c | + interpretInput(input, n - 1, ref, mid) and + c = input.getToken(n - 1) + | + exists(ArgumentPosition apos, ParameterPosition ppos | + node.asNode().(ArgNode).argumentOf(mid.asCall(), apos) and + parameterMatch(ppos, apos) + | + c = "Argument" or parseArg(c, ppos) + ) + or + exists(ReturnNodeExt ret | + c = "ReturnValue" and + ret = node.asNode() and + ret.getKind().(ValueReturnKind).getKind() = getReturnValueKind() and + mid.asCallable() = getNodeEnclosingCallable(ret) + ) + or + interpretInputSpecific(c, mid, node) + ) + } + + /** + * Holds if `node` is specified as a source with the given kind in a CSV flow + * model. + */ + predicate isSourceNode(InterpretNode node, string kind) { + exists(InterpretNode ref, AccessPath output | + sourceElementRef(ref, output, kind) and + interpretOutput(output, output.getNumToken(), ref, node) + ) + } + + /** + * Holds if `node` is specified as a sink with the given kind in a CSV flow + * model. + */ + predicate isSinkNode(InterpretNode node, string kind) { + exists(InterpretNode ref, AccessPath input | + sinkElementRef(ref, input, kind) and + interpretInput(input, input.getNumToken(), ref, node) + ) + } + } + + /** Provides a query predicate for outputting a set of relevant flow summaries. */ + module TestOutput { + /** A flow summary to include in the `summary/3` query predicate. */ + abstract class RelevantSummarizedCallable extends SummarizedCallable { + /** Gets the string representation of this callable used by `summary/1`. */ + abstract string getCallableCsv(); + + /** Holds if flow is propagated between `input` and `output`. */ + predicate relevantSummary( + SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue + ) { + this.propagatesFlow(input, output, preservesValue) + } + } + + /** Render the kind in the format used in flow summaries. */ + private string renderKind(boolean preservesValue) { + preservesValue = true and result = "value" + or + preservesValue = false and result = "taint" + } + + /** + * A query predicate for outputting flow summaries in semi-colon separated format in QL tests. + * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;outputspec;kind", + * ext is hardcoded to empty. + */ + query predicate summary(string csv) { + exists( + RelevantSummarizedCallable c, SummaryComponentStack input, SummaryComponentStack output, + boolean preservesValue + | + c.relevantSummary(input, output, preservesValue) and + csv = + c.getCallableCsv() + ";;" + getComponentStackCsv(input) + ";" + + getComponentStackCsv(output) + ";" + renderKind(preservesValue) + ) + } + } + + /** + * Provides query predicates for rendering the generated data flow graph for + * a summarized callable. + * + * Import this module into a `.ql` file of `@kind graph` to render the graph. + * The graph is restricted to callables from `RelevantSummarizedCallable`. + */ + module RenderSummarizedCallable { + /** A summarized callable to include in the graph. */ + abstract class RelevantSummarizedCallable extends SummarizedCallable { } + + private newtype TNodeOrCall = + MkNode(Node n) { + exists(RelevantSummarizedCallable c | + n = summaryNode(c, _) + or + n.(ParamNode).isParameterOf(c, _) + ) + } or + MkCall(DataFlowCall call) { + call = summaryDataFlowCall(_) and + call.getEnclosingCallable() instanceof RelevantSummarizedCallable + } + + private class NodeOrCall extends TNodeOrCall { + Node asNode() { this = MkNode(result) } + + DataFlowCall asCall() { this = MkCall(result) } + + string toString() { + result = this.asNode().toString() + or + result = this.asCall().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/). + */ + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.asNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + or + this.asCall().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + } + + query predicate nodes(NodeOrCall n, string key, string val) { + key = "semmle.label" and val = n.toString() + } + + private predicate edgesComponent(NodeOrCall a, NodeOrCall b, string value) { + exists(boolean preservesValue | + Private::Steps::summaryLocalStep(a.asNode(), b.asNode(), preservesValue) and + if preservesValue = true then value = "value" else value = "taint" + ) + or + exists(Content c | + Private::Steps::summaryReadStep(a.asNode(), c, b.asNode()) and + value = "read (" + c + ")" + or + Private::Steps::summaryStoreStep(a.asNode(), c, b.asNode()) and + value = "store (" + c + ")" + or + Private::Steps::summaryClearsContent(a.asNode(), c) and + b = a and + value = "clear (" + c + ")" + ) + or + summaryPostUpdateNode(b.asNode(), a.asNode()) and + value = "post-update" + or + b.asCall() = summaryDataFlowCall(a.asNode()) and + value = "receiver" + or + exists(ArgumentPosition pos | + summaryArgumentNode(b.asCall(), a.asNode(), pos) and + value = "argument (" + pos + ")" + ) + } + + query predicate edges(NodeOrCall a, NodeOrCall b, string key, string value) { + key = "semmle.label" and + value = strictconcat(string s | edgesComponent(a, b, s) | s, " / ") + } + } +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImplSpecific.qll b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImplSpecific.qll new file mode 100644 index 00000000000..4d8e19461df --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImplSpecific.qll @@ -0,0 +1,299 @@ +/** + * Provides Go-specific classes and predicates for defining flow summaries. + */ + +private import go +private import DataFlowPrivate +private import DataFlowUtil +private import FlowSummaryImpl::Private +private import FlowSummaryImpl::Public +private import semmle.go.dataflow.ExternalFlow +private import DataFlowImplCommon + +private module FlowSummaries { + private import semmle.go.dataflow.FlowSummary as F +} + +/** Holds if `i` is a valid parameter position. */ +predicate parameterPosition(int i) { + i = [-1 .. any(DataFlowCallable c).getType().getNumParameter()] +} + +/** Gets the parameter position of the instance parameter. */ +int instanceParameterPosition() { result = -1 } + +/** A parameter position represented by an integer. */ +class ParameterPosition extends int { + ParameterPosition() { parameterPosition(this) } +} + +/** An argument position represented by an integer. */ +class ArgumentPosition extends int { + ArgumentPosition() { parameterPosition(this) } +} + +/** Holds if arguments at position `apos` match parameters at position `ppos`. */ +pragma[inline] +predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos } + +/** + * Holds if `arg` is an argument of `call` with an argument position that matches + * parameter position `ppos`. + */ +pragma[noinline] +predicate argumentPositionMatch(DataFlowCall call, ArgNode arg, ParameterPosition ppos) { + exists(ArgumentPosition apos | + arg.argumentOf(call, apos) and + parameterMatch(ppos, apos) + ) +} + +/** Gets the textual representation of a parameter position in the format used for flow summaries. */ +string getParameterPositionCsv(ParameterPosition pos) { result = pos.toString() } + +/** Gets the textual representation of an argument position in the format used for flow summaries. */ +string getArgumentPositionCsv(ArgumentPosition pos) { result = pos.toString() } + +Node summaryNode(SummarizedCallable c, SummaryNodeState state) { result = getSummaryNode(c, state) } + +/** Gets the synthesized data-flow call for `receiver`. */ +DataFlowCall summaryDataFlowCall(Node receiver) { + // We do not currently have support for callback-based library models. + none() +} + +/** Gets the type of content `c`. */ +DataFlowType getContentType(Content c) { result = c.getType() } + +/** Gets the return type of kind `rk` for callable `c`. */ +DataFlowType getReturnType(SummarizedCallable c, ReturnKind rk) { + result = c.getType().getResultType(rk.getIndex()) +} + +/** + * Gets the type of the `i`th parameter in a synthesized call that targets a + * callback of type `t`. + */ +DataFlowType getCallbackParameterType(DataFlowType t, int i) { none() } + +/** + * Gets the return type of kind `rk` in a synthesized call that targets a + * callback of type `t`. + */ +DataFlowType getCallbackReturnType(DataFlowType t, ReturnKind rk) { none() } + +/** + * Holds if an external flow summary exists for `c` with input specification + * `input`, output specification `output`, and kind `kind`. + */ +predicate summaryElement(DataFlowCallable c, string input, string output, string kind) { + exists( + string namespace, string type, boolean subtypes, string name, string signature, string ext + | + summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind) and + c.asFunction() = interpretElement(namespace, type, subtypes, name, signature, ext).asEntity() + ) +} + +/** Gets the summary component for specification component `c`, if any. */ +bindingset[c] +SummaryComponent interpretComponentSpecific(string c) { + exists(int pos | parseReturn(c, pos) and result = SummaryComponent::return(getReturnKind(pos))) + or + exists(Content content | parseContent(c, content) and result = SummaryComponent::content(content)) +} + +/** Gets the summary component for specification component `c`, if any. */ +private string getContentSpecificCsv(Content c) { + exists(Field f, string package, string className, string fieldName | + f = c.(FieldContent).getField() and + f.hasQualifiedName(package, className, fieldName) and + result = "Field[" + package + "." + className + "." + fieldName + "]" + ) + or + exists(SyntheticField f | + f = c.(SyntheticFieldContent).getField() and result = "SyntheticField[" + f + "]" + ) + or + c instanceof ArrayContent and result = "ArrayElement" + or + c instanceof CollectionContent and result = "Element" + or + c instanceof MapKeyContent and result = "MapKey" + or + c instanceof MapValueContent and result = "MapValue" +} + +/** Gets the textual representation of the content in the format used for flow summaries. */ +string getComponentSpecificCsv(SummaryComponent sc) { + exists(Content c | sc = TContentSummaryComponent(c) and result = getContentSpecificCsv(c)) + or + exists(ReturnKind rk, int n | n = rk.getIndex() | + sc = TReturnSummaryComponent(rk) and + result = "ReturnValue[" + n + "]" and + n != 0 + ) +} + +/** Holds if input specification component `c` needs a reference. */ +predicate inputNeedsReferenceSpecific(string c) { none() } + +/** Holds if output specification component `c` needs a reference. */ +predicate outputNeedsReferenceSpecific(string c) { parseReturn(c, _) } + +private newtype TSourceOrSinkElement = + TEntityElement(Entity e) or + TAstElement(AstNode n) + +/** An element representable by CSV modeling. */ +class SourceOrSinkElement extends TSourceOrSinkElement { + /** Gets this source or sink element as an entity, if it is one. */ + Entity asEntity() { this = TEntityElement(result) } + + /** Gets this source or sink element as an AST node, if it is one. */ + AstNode asAstNode() { this = TAstElement(result) } + + /** Gets a textual representation of this source or sink element. */ + string toString() { + result = "element representing " + [this.asEntity().toString(), this.asAstNode().toString()] + } + + predicate hasLocationInfo(string fp, int sl, int sc, int el, int ec) { + this.asEntity().hasLocationInfo(fp, sl, sc, el, ec) or + this.asAstNode().hasLocationInfo(fp, sl, sc, el, ec) + } +} + +/** + * Holds if an external source specification exists for `e` with output specification + * `output` and kind `kind`. + */ +predicate sourceElement(SourceOrSinkElement e, string output, string kind) { + exists( + string namespace, string type, boolean subtypes, string name, string signature, string ext + | + sourceModel(namespace, type, subtypes, name, signature, ext, output, kind) and + e = interpretElement(namespace, type, subtypes, name, signature, ext) + ) +} + +/** + * Holds if an external sink specification exists for `e` with input specification + * `input` and kind `kind`. + */ +predicate sinkElement(SourceOrSinkElement e, string input, string kind) { + exists( + string namespace, string type, boolean subtypes, string name, string signature, string ext + | + sinkModel(namespace, type, subtypes, name, signature, ext, input, kind) and + e = interpretElement(namespace, type, subtypes, name, signature, ext) + ) +} + +/** Gets the return kind corresponding to specification `"ReturnValue"`. */ +ReturnKind getReturnValueKind() { result = getReturnKind(0) } + +private newtype TInterpretNode = + TElement(SourceOrSinkElement n) or + TNode(Node n) + +/** An entity used to interpret a source/sink specification. */ +class InterpretNode extends TInterpretNode { + /** Gets the element that this node corresponds to, if any. */ + SourceOrSinkElement asElement() { this = TElement(result) } + + /** Gets the data-flow node that this node corresponds to, if any. */ + Node asNode() { this = TNode(result) } + + /** Gets the call that this node corresponds to, if any. */ + DataFlowCall asCall() { result = this.asElement().asAstNode() } + + /** Gets the callable that this node corresponds to, if any. */ + DataFlowCallable asCallable() { + result.asFunction() = this.asElement().asEntity() + or + result.asFuncLit() = this.asElement().asAstNode() + } + + /** Gets the target of this call, if any. */ + SourceOrSinkElement getCallTarget() { + result.asEntity() = this.asCall().getNode().(DataFlow::CallNode).getTarget() + } + + /** Gets a textual representation of this node. */ + string toString() { + result = this.asElement().toString() + or + result = this.asNode().toString() + } + + /** Gets the location of this node. */ + predicate hasLocationInfo(string fp, int sl, int sc, int el, int ec) { + this.asElement().hasLocationInfo(fp, sl, sc, el, ec) + or + this.asNode().hasLocationInfo(fp, sl, sc, el, ec) + } +} + +/** Provides additional sink specification logic required for annotations. */ +pragma[inline] +predicate interpretOutputSpecific(string c, InterpretNode mid, InterpretNode node) { + exists(int pos | node.asNode() = getAnOutNodeExt(mid.asCall(), TValueReturn(getReturnKind(pos))) | + parseReturn(c, pos) + ) + or + exists(Node n, SourceOrSinkElement e | + n = node.asNode() and + e = mid.asElement() + | + (c = "Parameter" or c = "") and + node.asNode().asParameter() = e.asEntity() + or + c = "" and + n.(DataFlow::FieldReadNode).getField() = e.asEntity() + ) +} + +/** Provides additional source specification logic required for annotations. */ +pragma[inline] +predicate interpretInputSpecific(string c, InterpretNode mid, InterpretNode n) { + exists(int pos, ReturnNodeExt ret | + parseReturn(c, pos) and + ret = n.asNode() and + ret.getKind().(ValueReturnKind).getKind() = getReturnKind(pos) and + mid.asCallable() = getNodeEnclosingCallable(ret) + ) + or + exists(DataFlow::Write fw, Field f | + c = "" and + f = mid.asElement().asEntity() and + fw.writesField(_, f, n.asNode()) + ) +} + +/** Holds if specification component `c` parses as return value `n`. */ +predicate parseReturn(AccessPathToken c, int n) { + ( + c = "ReturnValue" and n = 0 + or + c.getName() = "ReturnValue" and + n = parseConstantOrRange(c.getAnArgument()) + ) +} + +bindingset[arg] +private int parseConstantOrRange(string arg) { + result = arg.toInt() + or + exists(int n1, int n2 | + arg.regexpCapture("([-0-9]+)\\.\\.([0-9]+)", 1).toInt() = n1 and + arg.regexpCapture("([-0-9]+)\\.\\.([0-9]+)", 2).toInt() = n2 and + result = [n1 .. n2] + ) +} + +bindingset[arg] +ArgumentPosition parseParamBody(string arg) { result = parseConstantOrRange(arg) } + +bindingset[arg] +ParameterPosition parseArgBody(string arg) { result = parseConstantOrRange(arg) } diff --git a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll new file mode 100644 index 00000000000..f33048ed08a --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll @@ -0,0 +1,423 @@ +/** + * Provides Go-specific definitions for use in the taint-tracking library. + */ + +private import go +private import FlowSummaryImpl as FlowSummaryImpl + +/** + * Holds if taint can flow from `src` to `sink` in zero or more + * local (intra-procedural) steps. + */ +predicate localTaint(DataFlow::Node src, DataFlow::Node sink) { localTaintStep*(src, sink) } + +/** + * Holds if taint can flow from `src` to `sink` in zero or more + * local (intra-procedural) steps. + */ +predicate localExprTaint(Expr src, Expr sink) { + localTaint(DataFlow::exprNode(src), DataFlow::exprNode(sink)) +} + +/** + * Holds if taint can flow in one local step from `src` to `sink`. + */ +predicate localTaintStep(DataFlow::Node src, DataFlow::Node sink) { + DataFlow::localFlowStep(src, sink) or + localAdditionalTaintStep(src, sink) or + // Simple flow through library code is included in the exposed local + // step relation, even though flow is technically inter-procedural + FlowSummaryImpl::Private::Steps::summaryThroughStep(src, sink, false) +} + +private Type getElementType(Type containerType) { + result = containerType.(ArrayType).getElementType() or + result = containerType.(SliceType).getElementType() or + result = containerType.(ChanType).getElementType() or + result = containerType.(MapType).getValueType() or + result = containerType.(PointerType).getPointerType() +} + +/** + * Holds if default `TaintTracking::Configuration`s should allow implicit reads + * of `c` at sinks and inputs to additional taint steps. + */ +bindingset[node] +predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::Content c) { + exists(Type containerType | + node instanceof DataFlow::ArgumentNode and + getElementType*(node.getType()) = containerType + | + containerType instanceof ArrayType and + c instanceof DataFlow::ArrayContent + or + containerType instanceof SliceType and + c instanceof DataFlow::ArrayContent + or + containerType instanceof ChanType and + c instanceof DataFlow::CollectionContent + or + containerType instanceof MapType and + c instanceof DataFlow::MapValueContent + or + c.(DataFlow::PointerContent).getPointerType() = containerType + ) +} + +private newtype TUnit = TMkUnit() + +/** A singleton class containing a single dummy "unit" value. */ +private class Unit extends TUnit { + /** Gets a textual representation of this element. */ + string toString() { result = "unit" } +} + +/** + * A unit class for adding additional taint steps. + * + * Extend this class to add additional taint steps that should apply to all + * taint configurations. + */ +class AdditionalTaintStep extends Unit { + /** + * Holds if the step from `node1` to `node2` should be considered a taint + * step for all configurations. + */ + 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) { + 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) or + any(FunctionModel fm).taintStep(pred, succ) or + any(AdditionalTaintStep a).step(pred, succ) or + FlowSummaryImpl::Private::Steps::summaryLocalStep(pred, succ, false) +} + +/** + * Holds if taint flows from `pred` to `succ` via a reference or dereference. + * + * The taint-tracking library does not distinguish between a reference and its referent, + * treating one as tainted if the other is. + */ +predicate referenceStep(DataFlow::Node pred, DataFlow::Node succ) { + exists(DataFlow::AddressOperationNode addr | + // from `x` to `&x` + pred = addr.getOperand() and + succ = addr + or + // from `&x` to `x` + pred = addr and + succ.(DataFlow::PostUpdateNode).getPreUpdateNode() = addr.getOperand() + ) + or + exists(DataFlow::PointerDereferenceNode deref | + // from `x` to `*x` + pred = deref.getOperand() and + succ = deref + or + // from `*x` to `x` + pred = deref and + succ.(DataFlow::PostUpdateNode).getPreUpdateNode() = deref.getOperand() + ) +} + +/** + * Holds if there is an assignment of the form `succ[idx] = pred`, meaning that `pred` may taint + * `succ`. + */ +predicate elementWriteStep(DataFlow::Node pred, DataFlow::Node succ) { + any(DataFlow::Write w).writesElement(succ.(DataFlow::PostUpdateNode).getPreUpdateNode(), _, pred) +} + +/** Holds if taint flows from `pred` to `succ` via a field read. */ +predicate fieldReadStep(DataFlow::Node pred, DataFlow::Node succ) { + succ.(DataFlow::FieldReadNode).getBase() = pred +} + +/** + * Holds if taint flows from `pred` to `succ` via an array, map, slice, or string + * index operation. + */ +predicate elementStep(DataFlow::Node pred, DataFlow::Node succ) { + succ.(DataFlow::ElementReadNode).getBase() = pred + or + exists(IR::GetNextEntryInstruction nextEntry | + pred.asInstruction() = nextEntry.getDomain() and + // only step into the value, not the index + succ.asInstruction() = IR::extractTupleElement(nextEntry, 1) + ) +} + +deprecated predicate arrayStep = elementStep/2; + +/** Holds if taint flows from `pred` to `succ` via an extract tuple operation. */ +predicate tupleStep(DataFlow::Node pred, DataFlow::Node succ) { + succ = DataFlow::extractTupleElement(pred, _) +} + +/** Holds if taint flows from `pred` to `succ` via string concatenation. */ +predicate stringConcatStep(DataFlow::Node pred, DataFlow::Node succ) { + exists(DataFlow::BinaryOperationNode conc | + conc.getOperator() = "+" and conc.getType() instanceof StringType + | + succ = conc and conc.getAnOperand() = pred + ) +} + +/** Holds if taint flows from `pred` to `succ` via a slice operation. */ +predicate sliceStep(DataFlow::Node pred, DataFlow::Node succ) { + succ.(DataFlow::SliceNode).getBase() = pred +} + +/** + * A model of a function specifying that the function propagates taint from + * a parameter or qualifier to a result. + */ +abstract class FunctionModel extends Function { + /** Holds if taint propagates through this function from `input` to `output`. */ + 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) } + + /** Gets an output node for this model for the call `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) { + c = this.getACall() and + exists(FunctionInput inp, FunctionOutput outp | this.hasTaintFlow(inp, outp) | + pred = inp.getNode(c) and + succ = outp.getNode(c) + ) + } + + /** 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, _) + } +} + +/** + * Holds if the additional step from `src` to `sink` should be included in all + * global taint flow configurations. + */ +predicate defaultAdditionalTaintStep(DataFlow::Node src, DataFlow::Node sink) { + localAdditionalTaintStep(src, sink) +} + +/** + * A sanitizer in all global taint flow configurations but not in local taint. + */ +abstract class DefaultTaintSanitizer extends DataFlow::Node { } + +/** + * Holds if `node` should be a sanitizer in all global taint flow configurations + * but not in local taint. + */ +predicate defaultTaintSanitizer(DataFlow::Node node) { node instanceof DefaultTaintSanitizer } + +/** + * A sanitizer guard in all global taint flow configurations but not in local taint. + */ +abstract class DefaultTaintSanitizerGuard extends DataFlow::BarrierGuard { } + +/** + * Holds if `guard` should be a sanitizer guard in all global taint flow configurations + * but not in local taint. + */ +predicate defaultTaintSanitizerGuard(DataFlow::BarrierGuard guard) { + guard instanceof DefaultTaintSanitizerGuard +} + +/** + * An equality test acting as a sanitizer guard for `nonConstNode` by + * restricting it to a known value. + * + * Note that comparisons to `nil` are excluded. This is needed for performance + * reasons. + */ +class EqualityTestGuard extends DefaultTaintSanitizerGuard, DataFlow::EqualityTestNode { + DataFlow::Node nonConstNode; + + EqualityTestGuard() { + this.getAnOperand().isConst() and + nonConstNode = this.getAnOperand() and + not nonConstNode.isConst() and + not this.getAnOperand() = Builtin::nil().getARead() + } + + override predicate checks(Expr e, boolean outcome) { + e = nonConstNode.asExpr() and + outcome = this.getPolarity() + } +} + +/** + * Holds if data flows from `node` to `switchExprNode`, which is the expression + * of a switch statement. + */ +private predicate flowsToSwitchExpression(DataFlow::Node node, DataFlow::Node switchExprNode) { + switchExprNode.asExpr() = any(ExpressionSwitchStmt ess).getExpr() and + DataFlow::localFlow(node, switchExprNode) +} + +/** + * Holds if `inputNode` is the exit node of a parameter to `fd` and data flows + * from `inputNode` to the expression of a switch statement. + */ +private predicate isPossibleInputNode(DataFlow::Node inputNode, FuncDef fd) { + inputNode = any(FunctionInput inp | inp.isParameter(_)).getExitNode(fd) and + flowsToSwitchExpression(inputNode, _) +} + +/** + * Gets a predecessor of `succ` without following edges corresponding to + * passing a constant case test in a switch statement which is switching on + * an expression which data flows to from `inputNode`. + */ +private ControlFlow::Node getANonTestPassingPredecessor( + ControlFlow::Node succ, DataFlow::Node inputNode +) { + isPossibleInputNode(inputNode, succ.getRoot()) and + result = succ.getAPredecessor() and + not exists(Expr testExpr, DataFlow::Node switchExprNode | + flowsToSwitchExpression(inputNode, switchExprNode) and + ControlFlow::isSwitchCaseTestPassingEdge(result, succ, switchExprNode.asExpr(), testExpr) and + testExpr.isConst() + ) +} + +private ControlFlow::Node getANonTestPassingReachingNodeRecursive( + ControlFlow::Node n, DataFlow::Node inputNode +) { + isPossibleInputNode(inputNode, n.getRoot()) and + ( + result = n or + result = + getANonTestPassingReachingNodeRecursive(getANonTestPassingPredecessor(n, inputNode), inputNode) + ) +} + +/** + * Gets a node by following predecessors from `ret` without following edges + * corresponding to passing a constant case test in a switch statement which is + * switching on an expression which data flows to from `inputNode`. + */ +private ControlFlow::Node getANonTestPassingReachingNodeBase( + IR::ReturnInstruction ret, DataFlow::Node inputNode +) { + result = getANonTestPassingReachingNodeRecursive(ret, inputNode) +} + +/** + * Holds if every way to get from the entry node of the function to `ret` + * involves passing a constant test case in a switch statement which is + * switching on an expression which data flows to from `inputNode`. + */ +private predicate mustPassConstantCaseTestToReach( + IR::ReturnInstruction ret, DataFlow::Node inputNode +) { + isPossibleInputNode(inputNode, ret.getRoot()) and + not exists(ControlFlow::Node entry | entry = ret.getRoot().getEntryNode() | + entry = getANonTestPassingReachingNodeBase(ret, inputNode) + ) +} + +/** + * Holds if whenever `outp` of function `f` satisfies `p`, the input `inp` of + * `f` matched a constant in a case clause of a switch statement. + * + * We check this by looking for guards on `inp` that collectively dominate all + * the `return` statements in `f` that can return `true`. This means that if + * `f` returns `true`, one of the guards must have been satisfied. (Similar + * reasoning is applied for statements returning `false`, `nil` or a non-`nil` + * value.) + */ +predicate functionEnsuresInputIsConstant( + Function f, FunctionInput inp, FunctionOutput outp, DataFlow::Property p +) { + exists(FuncDecl fd | fd.getFunction() = f | + exists(boolean b | + p.isBoolean(b) and + forex(DataFlow::Node ret, IR::ReturnInstruction ri | + ret = outp.getEntryNode(fd) and + ri.getReturnStmt().getAnExpr() = ret.asExpr() and + DataFlow::possiblyReturnsBool(fd, outp, ret, b) + | + mustPassConstantCaseTestToReach(ri, inp.getExitNode(fd)) + ) + ) + or + p.isNonNil() and + forex(DataFlow::Node ret, IR::ReturnInstruction ri | + ret = outp.getEntryNode(fd) and + ri.getReturnStmt().getAnExpr() = ret.asExpr() and + DataFlow::possiblyReturnsNonNil(fd, outp, ret) + | + mustPassConstantCaseTestToReach(ri, inp.getExitNode(fd)) + ) + or + p.isNil() and + forex(DataFlow::Node ret, IR::ReturnInstruction ri | + ret = outp.getEntryNode(fd) and + ri.getReturnStmt().getAnExpr() = ret.asExpr() and + ret.asExpr() = Builtin::nil().getAReference() + | + exists(DataFlow::Node exprNode | + DataFlow::localFlow(inp.getExitNode(fd), exprNode) and + mustPassConstantCaseTestToReach(ri, inp.getExitNode(fd)) + ) + ) + ) +} + +/** + * Holds if whenever `outputNode` satisfies `p`, `inputNode` matched a constant + * in a case clause of a switch statement. + */ +pragma[noinline] +predicate inputIsConstantIfOutputHasProperty( + DataFlow::Node inputNode, DataFlow::Node outputNode, DataFlow::Property p +) { + exists(Function f, FunctionInput inp, FunctionOutput outp, DataFlow::CallNode call | + functionEnsuresInputIsConstant(f, inp, outp, p) and + call = f.getACall() and + inputNode = inp.getNode(call) and + DataFlow::localFlow(outp.getNode(call), outputNode) + ) +} + +/** + * A comparison against a list of constants, acting as a sanitizer guard for + * `guardedExpr` by restricting it to a known value. + * + * Currently this only looks for functions containing a switch statement, but + * it could equally look for a check for membership of a constant map or + * constant array, which does not need to be in its own function. + */ +class ListOfConstantsComparisonSanitizerGuard extends TaintTracking::DefaultTaintSanitizerGuard { + DataFlow::Node guardedExpr; + boolean outcome; + + ListOfConstantsComparisonSanitizerGuard() { + exists(DataFlow::Node outputNode, DataFlow::Property p | + inputIsConstantIfOutputHasProperty(guardedExpr, outputNode, p) and + p.checkOn(this, outcome, outputNode) + ) + } + + override predicate checks(Expr e, boolean branch) { + e = guardedExpr.asExpr() and branch = outcome + } +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/tainttracking1/TaintTrackingImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/tainttracking1/TaintTrackingImpl.qll new file mode 100644 index 00000000000..7f7d5bbb883 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/tainttracking1/TaintTrackingImpl.qll @@ -0,0 +1,122 @@ +/** + * Provides an implementation of global (interprocedural) taint tracking. + * This file re-exports the local (intraprocedural) taint-tracking analysis + * from `TaintTrackingParameter::Public` and adds a global analysis, mainly + * exposed through the `Configuration` class. For some languages, this file + * exists in several identical copies, allowing queries to use multiple + * `Configuration` classes that depend on each other without introducing + * mutual recursion among those configurations. + */ + +import TaintTrackingParameter::Public +private import TaintTrackingParameter::Private + +/** + * A configuration of interprocedural taint tracking analysis. This defines + * sources, sinks, and any other configurable aspect of the analysis. Each + * use of the taint tracking library must define its own unique extension of + * this abstract class. + * + * A taint-tracking configuration is a special data flow configuration + * (`DataFlow::Configuration`) that allows for flow through nodes that do not + * necessarily preserve values but are still relevant from a taint tracking + * perspective. (For example, string concatenation, where one of the operands + * is tainted.) + * + * To create a configuration, extend this class with a subclass whose + * characteristic predicate is a unique singleton string. For example, write + * + * ```ql + * class MyAnalysisConfiguration extends TaintTracking::Configuration { + * MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" } + * // Override `isSource` and `isSink`. + * // Optionally override `isSanitizer`. + * // Optionally override `isSanitizerIn`. + * // Optionally override `isSanitizerOut`. + * // Optionally override `isSanitizerGuard`. + * // Optionally override `isAdditionalTaintStep`. + * } + * ``` + * + * Then, to query whether there is flow between some `source` and `sink`, + * write + * + * ```ql + * exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink)) + * ``` + * + * Multiple configurations can coexist, but it is unsupported to depend on + * another `TaintTracking::Configuration` or a `DataFlow::Configuration` in the + * overridden predicates that define sources, sinks, or additional steps. + * Instead, the dependency should go to a `TaintTracking2::Configuration` or a + * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. + */ +abstract class Configuration extends DataFlow::Configuration { + bindingset[this] + Configuration() { any() } + + /** + * Holds if `source` is a relevant taint source. + * + * The smaller this predicate is, the faster `hasFlow()` will converge. + */ + // overridden to provide taint-tracking specific qldoc + abstract override predicate isSource(DataFlow::Node source); + + /** + * Holds if `sink` is a relevant taint sink. + * + * The smaller this predicate is, the faster `hasFlow()` will converge. + */ + // overridden to provide taint-tracking specific qldoc + abstract override predicate isSink(DataFlow::Node sink); + + /** Holds if the node `node` is a taint sanitizer. */ + predicate isSanitizer(DataFlow::Node node) { none() } + + final override predicate isBarrier(DataFlow::Node node) { + this.isSanitizer(node) or + defaultTaintSanitizer(node) + } + + /** Holds if taint propagation into `node` is prohibited. */ + predicate isSanitizerIn(DataFlow::Node node) { none() } + + final override predicate isBarrierIn(DataFlow::Node node) { this.isSanitizerIn(node) } + + /** Holds if taint propagation out of `node` is prohibited. */ + predicate isSanitizerOut(DataFlow::Node node) { none() } + + final override predicate isBarrierOut(DataFlow::Node node) { this.isSanitizerOut(node) } + + /** Holds if taint propagation through nodes guarded by `guard` is prohibited. */ + predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { none() } + + final override predicate isBarrierGuard(DataFlow::BarrierGuard guard) { + this.isSanitizerGuard(guard) or defaultTaintSanitizerGuard(guard) + } + + /** + * Holds if the additional taint propagation step from `node1` to `node2` + * must be taken into account in the analysis. + */ + predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { none() } + + final override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + this.isAdditionalTaintStep(node1, node2) or + defaultAdditionalTaintStep(node1, node2) + } + + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) { + (this.isSink(node) or this.isAdditionalTaintStep(node, _)) and + defaultImplicitTaintRead(node, c) + } + + /** + * Holds if taint may flow from `source` to `sink` for this configuration. + */ + // overridden to provide taint-tracking specific qldoc + override predicate hasFlow(DataFlow::Node source, DataFlow::Node sink) { + super.hasFlow(source, sink) + } +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/tainttracking1/TaintTrackingParameter.qll b/go/ql/lib/semmle/go/dataflow/internal/tainttracking1/TaintTrackingParameter.qll new file mode 100644 index 00000000000..b38482194ec --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/tainttracking1/TaintTrackingParameter.qll @@ -0,0 +1,5 @@ +import semmle.go.dataflow.internal.TaintTrackingUtil as Public + +module Private { + import semmle.go.dataflow.DataFlow::DataFlow as DataFlow +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/tainttracking2/TaintTrackingImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/tainttracking2/TaintTrackingImpl.qll new file mode 100644 index 00000000000..7f7d5bbb883 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/tainttracking2/TaintTrackingImpl.qll @@ -0,0 +1,122 @@ +/** + * Provides an implementation of global (interprocedural) taint tracking. + * This file re-exports the local (intraprocedural) taint-tracking analysis + * from `TaintTrackingParameter::Public` and adds a global analysis, mainly + * exposed through the `Configuration` class. For some languages, this file + * exists in several identical copies, allowing queries to use multiple + * `Configuration` classes that depend on each other without introducing + * mutual recursion among those configurations. + */ + +import TaintTrackingParameter::Public +private import TaintTrackingParameter::Private + +/** + * A configuration of interprocedural taint tracking analysis. This defines + * sources, sinks, and any other configurable aspect of the analysis. Each + * use of the taint tracking library must define its own unique extension of + * this abstract class. + * + * A taint-tracking configuration is a special data flow configuration + * (`DataFlow::Configuration`) that allows for flow through nodes that do not + * necessarily preserve values but are still relevant from a taint tracking + * perspective. (For example, string concatenation, where one of the operands + * is tainted.) + * + * To create a configuration, extend this class with a subclass whose + * characteristic predicate is a unique singleton string. For example, write + * + * ```ql + * class MyAnalysisConfiguration extends TaintTracking::Configuration { + * MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" } + * // Override `isSource` and `isSink`. + * // Optionally override `isSanitizer`. + * // Optionally override `isSanitizerIn`. + * // Optionally override `isSanitizerOut`. + * // Optionally override `isSanitizerGuard`. + * // Optionally override `isAdditionalTaintStep`. + * } + * ``` + * + * Then, to query whether there is flow between some `source` and `sink`, + * write + * + * ```ql + * exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink)) + * ``` + * + * Multiple configurations can coexist, but it is unsupported to depend on + * another `TaintTracking::Configuration` or a `DataFlow::Configuration` in the + * overridden predicates that define sources, sinks, or additional steps. + * Instead, the dependency should go to a `TaintTracking2::Configuration` or a + * `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc. + */ +abstract class Configuration extends DataFlow::Configuration { + bindingset[this] + Configuration() { any() } + + /** + * Holds if `source` is a relevant taint source. + * + * The smaller this predicate is, the faster `hasFlow()` will converge. + */ + // overridden to provide taint-tracking specific qldoc + abstract override predicate isSource(DataFlow::Node source); + + /** + * Holds if `sink` is a relevant taint sink. + * + * The smaller this predicate is, the faster `hasFlow()` will converge. + */ + // overridden to provide taint-tracking specific qldoc + abstract override predicate isSink(DataFlow::Node sink); + + /** Holds if the node `node` is a taint sanitizer. */ + predicate isSanitizer(DataFlow::Node node) { none() } + + final override predicate isBarrier(DataFlow::Node node) { + this.isSanitizer(node) or + defaultTaintSanitizer(node) + } + + /** Holds if taint propagation into `node` is prohibited. */ + predicate isSanitizerIn(DataFlow::Node node) { none() } + + final override predicate isBarrierIn(DataFlow::Node node) { this.isSanitizerIn(node) } + + /** Holds if taint propagation out of `node` is prohibited. */ + predicate isSanitizerOut(DataFlow::Node node) { none() } + + final override predicate isBarrierOut(DataFlow::Node node) { this.isSanitizerOut(node) } + + /** Holds if taint propagation through nodes guarded by `guard` is prohibited. */ + predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { none() } + + final override predicate isBarrierGuard(DataFlow::BarrierGuard guard) { + this.isSanitizerGuard(guard) or defaultTaintSanitizerGuard(guard) + } + + /** + * Holds if the additional taint propagation step from `node1` to `node2` + * must be taken into account in the analysis. + */ + predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { none() } + + final override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + this.isAdditionalTaintStep(node1, node2) or + defaultAdditionalTaintStep(node1, node2) + } + + override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) { + (this.isSink(node) or this.isAdditionalTaintStep(node, _)) and + defaultImplicitTaintRead(node, c) + } + + /** + * Holds if taint may flow from `source` to `sink` for this configuration. + */ + // overridden to provide taint-tracking specific qldoc + override predicate hasFlow(DataFlow::Node source, DataFlow::Node sink) { + super.hasFlow(source, sink) + } +} diff --git a/go/ql/lib/semmle/go/dataflow/internal/tainttracking2/TaintTrackingParameter.qll b/go/ql/lib/semmle/go/dataflow/internal/tainttracking2/TaintTrackingParameter.qll new file mode 100644 index 00000000000..1130c2e42e1 --- /dev/null +++ b/go/ql/lib/semmle/go/dataflow/internal/tainttracking2/TaintTrackingParameter.qll @@ -0,0 +1,5 @@ +import semmle.go.dataflow.internal.TaintTrackingUtil as Public + +module Private { + import semmle.go.dataflow.DataFlow2::DataFlow2 as DataFlow +} diff --git a/go/ql/lib/semmle/go/dependencies/Dependencies.qll b/go/ql/lib/semmle/go/dependencies/Dependencies.qll new file mode 100644 index 00000000000..5fc746e6987 --- /dev/null +++ b/go/ql/lib/semmle/go/dependencies/Dependencies.qll @@ -0,0 +1,95 @@ +/** + * Provides classes for modeling go.mod dependencies. + */ + +import go + +/** + * An abstract representation of a dependency. + */ +abstract class Dependency extends Locatable { + /** + * Holds if this dependency has package path `path` and version `v`. + * + * If the version cannot be determined, `v` is bound to the string + * `"unknown"`. + */ + abstract predicate info(string path, string v); + + /** Gets the package path of this dependency. */ + string getDepPath() { this.info(result, _) } + + /** Gets the version of this dependency. */ + string getDepVersion() { this.info(_, result) } + + /** + * Holds if this dependency is relevant for imports in file `file`. That is, an import of this + * dependency's path that is in `file` will use this dependency. + */ + abstract predicate relevantForFile(File file); + + /** + * An import of this dependency. + */ + ImportSpec getAnImport() { + result.getPath().regexpMatch("\\Q" + this.getDepPath() + "\\E(/.*)?") and + this.relevantForFile(result.getFile()) + } +} + +/** + * A dependency from a go.mod file. + */ +class GoModDependency extends Dependency, GoModRequireLine { + override predicate info(string path, string v) { + this.replacementInfo(path, v) + or + not this.replacementInfo(_, _) and + this.originalInfo(path, v) + } + + override predicate relevantForFile(File file) { + exists(Folder parent | parent.getAFile() = this.getFile() | + parent.getAFolder*().getAFile() = file + ) + } + + /** + * Holds if there is a replace line that replaces this dependency with a dependency on `path`, + * version `v`. + */ + predicate replacementInfo(string path, string v) { + exists(GoModReplaceLine replace | + replace.getFile() = this.getFile() and + replace.getOriginalPath() = this.getPath() + | + path = replace.getReplacementPath() and + ( + v = replace.getReplacementVersion() + or + not exists(replace.getReplacementVersion()) and + v = "unknown" + ) + ) + } + + /** + * Get a version that was excluded for this dependency. + */ + string getAnExcludedVersion() { + exists(GoModExcludeLine exclude | + exclude.getFile() = this.getFile() and + exclude.getPath() = this.getPath() + | + result = exclude.getVersion() + ) + } + + /** + * Holds if this require line originally states dependency `path` had version `ver`. + * + * The actual info of this dependency can change based on `replace` directives in the same go.mod + * file, which replace a dependency with another one. + */ + predicate originalInfo(string path, string v) { path = this.getPath() and v = this.getVersion() } +} diff --git a/go/ql/lib/semmle/go/dependencies/SemVer.qll b/go/ql/lib/semmle/go/dependencies/SemVer.qll new file mode 100644 index 00000000000..88d37563931 --- /dev/null +++ b/go/ql/lib/semmle/go/dependencies/SemVer.qll @@ -0,0 +1,100 @@ +/** + * Provides classes for dealing with semantic versions, for dependency versions. + */ + +import semmle.go.dependencies.Dependencies + +/** + * A SemVer-formatted version string in a dependency. + * + * Pre-release information and build metadata is not yet supported. + */ +class DependencySemVer extends string { + Dependency dep; + string normalized; + + DependencySemVer() { + this = dep.getDepVersion() and + normalized = normalizeSemver(this) + } + + /** + * Holds if this version may be before `last`. + */ + bindingset[last] + predicate maybeBefore(string last) { normalized < normalizeSemver(last) } + + /** + * Holds if this version may be after `first`. + */ + bindingset[first] + predicate maybeAfter(string first) { normalizeSemver(first) < normalized } + + /** + * Holds if this version may be between `first` (inclusive) and `last` (exclusive). + */ + bindingset[first, last] + predicate maybeBetween(string first, string last) { + normalizeSemver(first) <= normalized and + normalized < normalizeSemver(last) + } + + /** + * Holds if this version is equivalent to `other`. + */ + bindingset[other] + predicate is(string other) { normalized = normalizeSemver(other) } + + /** + * Gets the dependency that uses this string. + */ + Dependency getDependency() { result = dep } +} + +bindingset[str] +private string leftPad(string str) { result = ("000" + str).suffix(str.length()) } + +/** + * Normalizes a SemVer string such that the lexicographical ordering + * of two normalized strings is consistent with the SemVer ordering. + * + * Pre-release information and build metadata is not yet supported. + */ +bindingset[orig] +private string normalizeSemver(string orig) { + exists(string pattern, string major, string minor, string patch | + pattern = "v?(\\d+)\\.(\\d+)\\.(\\d+)(\\D.*)?" and + major = orig.regexpCapture(pattern, 1) and + minor = orig.regexpCapture(pattern, 2) and + patch = orig.regexpCapture(pattern, 3) + | + result = leftPad(major) + "." + leftPad(minor) + "." + leftPad(patch) + ) +} + +/** + * A version string in a dependency that has a SemVer, but also contains a git commit SHA. + * + * This class is useful for interacting with go.mod versions, which use SemVer, but can also contain + * SHAs if no useful tags are found, or when a user wishes to specify a commit SHA. + * + * Pre-release information and build metadata is not yet supported. + */ +class DependencySemShaVersion extends DependencySemVer { + string sha; + + DependencySemShaVersion() { sha = this.regexpCapture(".*-([0-9a-f]+)", 1) } + + /** + * Gets the commit SHA associated with this version. + */ + string getSha() { result = sha } + + bindingset[other] + override predicate is(string other) { + this.getSha() = other.(DependencySemShaVersion).getSha() + or + not other instanceof DependencySemShaVersion and + super.is(other) + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Beego.qll b/go/ql/lib/semmle/go/frameworks/Beego.qll new file mode 100644 index 00000000000..edcf383c6be --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Beego.qll @@ -0,0 +1,378 @@ +/** + * Provides classes for working with untrusted flow sources, sinks and taint propagators + * from the `github.com/beego/beego` package. + */ + +import go +import semmle.go.security.Xss +private import semmle.go.security.SafeUrlFlowCustomizations + +/** + * Provides classes for working with untrusted flow sources, sinks and taint propagators + * from the [Beego](https://github.com/beego/beego) package. + */ +module Beego { + /** Gets the v1 module path `github.com/astaxie/beego` or `github.com/beego/beego`. */ + string v1modulePath() { result = ["github.com/astaxie/beego", "github.com/beego/beego"] } + + /** Gets the v2 module path `github.com/beego/beego/v2` */ + string v2modulePath() { result = "github.com/beego/beego/v2" } + + /** Gets the path for the root package of beego. */ + string packagePath() { + result = package(v1modulePath(), "") + or + result = package(v2modulePath(), "server/web") + } + + /** Gets the path for the context package of beego. */ + string contextPackagePath() { + result = package(v1modulePath(), "context") + or + result = package(v2modulePath(), "server/web/context") + } + + /** Gets the path for the logs package of beego. */ + string logsPackagePath() { + result = package(v1modulePath(), "logs") + or + result = package(v2modulePath(), "core/logs") + } + + /** Gets the path for the utils package of beego. */ + string utilsPackagePath() { + result = package(v1modulePath(), "utils") + or + result = package(v2modulePath(), "core/utils") + } + + /** + * `BeegoInput` sources of untrusted data. + */ + private class BeegoInputSource extends UntrustedFlowSource::Range { + string methodName; + FunctionOutput output; + + BeegoInputSource() { + exists(DataFlow::MethodCallNode c | this = output.getExitNode(c) | + c.getTarget().hasQualifiedName(contextPackagePath(), "BeegoInput", methodName) + ) and + ( + methodName = "Bind" and + output.isParameter(0) + or + methodName in [ + "Cookie", "Data", "GetData", "Header", "Param", "Params", "Query", "Refer", "Referer", + "URI", "URL", "UserAgent" + ] and + output.isResult(0) + ) + } + + predicate isSafeUrlSource() { methodName in ["URI", "URL"] } + } + + /** `BeegoInput` sources that are safe to use for redirection. */ + private class BeegoInputSafeUrlSource extends SafeUrlFlow::Source { + BeegoInputSafeUrlSource() { this.(BeegoInputSource).isSafeUrlSource() } + } + + /** + * `beego.Controller` sources of untrusted data. + */ + private class BeegoControllerSource extends UntrustedFlowSource::Range { + string methodName; + FunctionOutput output; + + BeegoControllerSource() { + exists(DataFlow::MethodCallNode c | + c.getTarget().hasQualifiedName(packagePath(), "Controller", methodName) + | + this = output.getExitNode(c) + ) and + ( + methodName = "ParseForm" and + output.isParameter(0) + or + methodName in ["GetFile", "GetFiles", "GetString", "GetStrings", "Input"] and + output.isResult(0) + or + methodName = "GetFile" and + output.isResult(1) + ) + } + } + + /** + * `beego/context.Context` sources of untrusted data. + */ + private class BeegoContextSource extends UntrustedFlowSource::Range { + BeegoContextSource() { + exists(Method m | m.hasQualifiedName(contextPackagePath(), "Context", "GetCookie") | + this = m.getACall().getResult() + ) + } + } + + private class BeegoOutputInstance extends HTTP::ResponseWriter::Range { + SsaWithFields v; + + BeegoOutputInstance() { + this = v.getBaseVariable().getSourceVariable() and + v.getType().(PointerType).getBaseType().hasQualifiedName(contextPackagePath(), "BeegoOutput") + } + + override DataFlow::Node getANode() { result = v.similar().getAUse().getASuccessor*() } + + /** Gets a header object that corresponds to this HTTP response. */ + DataFlow::MethodCallNode getAHeaderObject() { + result.getTarget().getName() = ["ContentType", "Header"] and + this.getANode() = result.getReceiver() + } + } + + private class BeegoHeaderWrite extends HTTP::HeaderWrite::Range, DataFlow::MethodCallNode { + string methodName; + + BeegoHeaderWrite() { + this.getTarget().hasQualifiedName(contextPackagePath(), "BeegoOutput", methodName) and + methodName in ["ContentType", "Header"] + } + + override DataFlow::Node getName() { methodName = "Header" and result = this.getArgument(0) } + + override string getHeaderName() { + result = HTTP::HeaderWrite::Range.super.getHeaderName() + or + methodName = "ContentType" and result = "content-type" + } + + override DataFlow::Node getValue() { + if methodName = "ContentType" + then result = this.getArgument(0) + else result = this.getArgument(1) + } + + override HTTP::ResponseWriter getResponseWriter() { + result.(BeegoOutputInstance).getAHeaderObject() = this + } + } + + private class BeegoResponseBody extends HTTP::ResponseBody::Range { + DataFlow::MethodCallNode call; + string methodName; + + BeegoResponseBody() { + exists(Method m | m.hasQualifiedName(contextPackagePath(), "BeegoOutput", methodName) | + call = m.getACall() and + this = call.getArgument(0) + ) and + methodName in ["Body", "JSON", "JSONP", "ServeFormatted", "XML", "YAML"] + } + + override HTTP::ResponseWriter getResponseWriter() { result.getANode() = call.getReceiver() } + + 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 + result = super.getAContentType() + or + // Specifically describe methods that set the content-type and body in one operation: + result = "application/json" and methodName = "JSON" + or + result = "application/javascript" and methodName = "JSONP" + or + // Actually ServeFormatted can serve JSON, XML or YAML depending on the incoming + // `Accept` header, but the important bit is this method cannot serve text/html. + result = "application/json" and methodName = "ServeFormatted" + or + result = "text/xml" and methodName = "XML" + or + result = "application/x-yaml" and methodName = "YAML" + } + } + + private class ControllerResponseBody extends HTTP::ResponseBody::Range { + string name; + + ControllerResponseBody() { + exists(Method m | m.hasQualifiedName(packagePath(), "Controller", name) | + name = "CustomAbort" and this = m.getACall().getArgument(1) + or + name = "SetData" and this = m.getACall().getArgument(0) + ) + } + + override HTTP::ResponseWriter getResponseWriter() { none() } + + override string getAContentType() { + // Actually SetData can serve JSON, XML or YAML depending on the incoming + // `Accept` header, but the important bit is this method cannot serve text/html. + result = "application/json" and name = "SetData" + // CustomAbort doesn't specify a content type, so we assume anything could happen. + } + } + + private class ContextResponseBody extends HTTP::ResponseBody::Range { + string name; + + ContextResponseBody() { + exists(Method m | m.hasQualifiedName(contextPackagePath(), "Context", name) | + name = "Abort" and this = m.getACall().getArgument(1) + or + name = "WriteString" and this = m.getACall().getArgument(0) + ) + } + + override HTTP::ResponseWriter getResponseWriter() { none() } + + // Neither method is likely to be used with well-typed data such as JSON output, + // because there are better methods to do this. Assume the Content-Type could + // be anything. + override string getAContentType() { none() } + } + + private string getALogFunctionName() { + result = + [ + "Alert", "Critical", "Debug", "Emergency", "Error", "Info", "Informational", "Notice", + "Trace", "Warn", "Warning" + ] + } + + private class ToplevelBeegoLoggers extends LoggerCall::Range, DataFlow::CallNode { + ToplevelBeegoLoggers() { + this.getTarget().hasQualifiedName([packagePath(), logsPackagePath()], getALogFunctionName()) + } + + override DataFlow::Node getAMessageComponent() { result = this.getAnArgument() } + } + + private class BeegoLoggerMethods extends LoggerCall::Range, DataFlow::MethodCallNode { + BeegoLoggerMethods() { + this.getTarget().hasQualifiedName(logsPackagePath(), "BeeLogger", getALogFunctionName()) + } + + override DataFlow::Node getAMessageComponent() { result = this.getAnArgument() } + } + + private class UtilLoggers extends LoggerCall::Range, DataFlow::CallNode { + UtilLoggers() { this.getTarget().hasQualifiedName(utilsPackagePath(), "Display") } + + override DataFlow::Node getAMessageComponent() { result = this.getAnArgument() } + } + + private class TopLevelTaintPropagators extends TaintTracking::FunctionModel { + string name; + + TopLevelTaintPropagators() { + this.hasQualifiedName(packagePath(), name) and + name in ["HTML2str", "Htmlquote", "Htmlunquote", "MapGet", "ParseForm", "Str2html", "Substr"] + } + + override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { + name in ["HTML2str", "Htmlquote", "Htmlunquote", "MapGet", "Str2html", "Substr"] and + input.isParameter(0) and + output.isResult(0) + or + name = "ParseForm" and + input.isParameter(0) and + output.isParameter(1) + } + } + + private class ContextTaintPropagators extends TaintTracking::FunctionModel { + ContextTaintPropagators() { this.hasQualifiedName(contextPackagePath(), "WriteBody") } + + override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { + input.isParameter(2) and output.isParameter(1) + } + } + + private class HtmlQuoteSanitizer extends SharedXss::Sanitizer { + HtmlQuoteSanitizer() { + exists(DataFlow::CallNode c | c.getTarget().hasQualifiedName(packagePath(), "Htmlquote") | + this = c.getArgument(0) + ) + } + } + + private class FsOperations extends FileSystemAccess::Range, DataFlow::CallNode { + FsOperations() { + this.getTarget().hasQualifiedName(packagePath(), "Walk") + or + exists(Method m | this = m.getACall() | + m.hasQualifiedName(packagePath(), "FileSystem", "Open") or + m.hasQualifiedName(packagePath(), "Controller", "SaveToFile") + ) + } + + override DataFlow::Node getAPathArgument() { + this.getTarget().getName() = ["Walk", "SaveToFile"] and result = this.getArgument(1) + or + this.getTarget().getName() = "Open" and result = this.getArgument(0) + } + } + + private class RedirectMethods extends HTTP::Redirect::Range, DataFlow::CallNode { + string package; + string className; + + RedirectMethods() { + ( + package = packagePath() and className = "Controller" + or + package = contextPackagePath() and className = "Context" + ) and + this = any(Method m | m.hasQualifiedName(package, className, "Redirect")).getACall() + } + + override DataFlow::Node getUrl() { + className = "Controller" and result = this.getArgument(0) + or + className = "Context" and result = this.getArgument(1) + } + + override HTTP::ResponseWriter getResponseWriter() { none() } + } + + private class UtilsTaintPropagators extends TaintTracking::FunctionModel { + string name; + + UtilsTaintPropagators() { + this.hasQualifiedName(utilsPackagePath(), name) and + name in [ + "GetDisplayString", "SliceChunk", "SliceDiff", "SliceFilter", "SliceIntersect", + "SliceMerge", "SlicePad", "SliceRand", "SliceReduce", "SliceShuffle", "SliceUnique" + ] + } + + override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { + name in [ + "GetDisplayString", "SliceIntersect", "SliceMerge", "SlicePad", "SliceRand", + "SliceShuffle", "SliceUnique" + ] and + input.isParameter(_) and + output.isResult(0) + or + name in ["SliceChunk", "SliceDiff", "SliceFilter", "SliceReduce"] and + input.isParameter(0) and + output.isResult(0) + } + } + + private class BeeMapModels extends TaintTracking::FunctionModel, Method { + string name; + + BeeMapModels() { + this.hasQualifiedName(utilsPackagePath(), "BeeMap", name) and + name in ["Get", "Set", "Items"] + } + + override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { + name = "Set" and input.isParameter(1) and output.isReceiver() + or + name in ["Get", "Items"] and input.isReceiver() and output.isResult(0) + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/BeegoOrm.qll b/go/ql/lib/semmle/go/frameworks/BeegoOrm.qll new file mode 100644 index 00000000000..f83556c307f --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/BeegoOrm.qll @@ -0,0 +1,101 @@ +/** + * Provides classes for working with untrusted flow sources, sinks and taint propagators + * from the `github.com/astaxie/beego/orm` subpackage. + */ + +import go +private import semmle.go.security.StoredXssCustomizations + +/** + * Provides classes for working with untrusted flow sources, sinks and taint propagators + * from the [Beego ORM](https://github.com/astaxie/beego/orm) subpackage. + */ +module BeegoOrm { + /** Gets the package name `github.com/astaxie/beego/orm`. */ + string packagePath() { result = package("github.com/astaxie/beego", "orm") } + + private class DbSink extends SQL::QueryString::Range { + DbSink() { + exists(Method m, string methodName, int argNum | + m.hasQualifiedName(packagePath(), "DB", methodName) and + methodName in [ + "Exec", "ExecContext", "Prepare", "PrepareContext", "Query", "QueryContext", "QueryRow", + "QueryRowContext" + ] and + if methodName.matches("%Context") then argNum = 1 else argNum = 0 + | + this = m.getACall().getArgument(argNum) + ) + } + } + + private class QueryBuilderSink extends SQL::QueryString::Range { + // Note this class doesn't do any escaping, unlike the true ORM part of the package + QueryBuilderSink() { + exists(Method impl | impl.implements(packagePath(), "QueryBuilder", _) | + this = impl.getACall().getAnArgument() + ) and + this.getType().getUnderlyingType() instanceof StringType + } + } + + private class OrmerRawSink extends SQL::QueryString::Range { + OrmerRawSink() { + exists(Method impl | impl.implements(packagePath(), "Ormer", "Raw") | + this = impl.getACall().getArgument(0) + ) + } + } + + private class QuerySeterFilterRawSink extends SQL::QueryString::Range { + QuerySeterFilterRawSink() { + exists(Method impl | impl.implements(packagePath(), "QuerySeter", "FilterRaw") | + this = impl.getACall().getArgument(1) + ) + } + } + + private class ConditionRawSink extends SQL::QueryString::Range { + ConditionRawSink() { + exists(Method impl | impl.implements(packagePath(), "Condition", "Raw") | + this = impl.getACall().getArgument(1) + ) + } + } + + private class OrmerSource extends StoredXss::Source { + OrmerSource() { + exists(Method impl | + impl.implements(packagePath(), "Ormer", ["Read", "ReadForUpdate", "ReadOrCreate"]) + | + this = FunctionOutput::parameter(0).getExitNode(impl.getACall()) + ) + } + } + + private class StringFieldSource extends StoredXss::Source { + StringFieldSource() { + exists(Method m | + m.hasQualifiedName(packagePath(), ["JSONField", "JsonbField", "TextField"], + ["RawValue", "String", "Value"]) + | + this = m.getACall().getResult() + ) + } + } + + private class SeterSource extends StoredXss::Source { + SeterSource() { + exists(Method impl | + // All and One are exclusive to QuerySeter, QueryRow[s] are exclusive to RawSeter, the rest are common. + impl.implements(packagePath(), ["QuerySeter", "RawSeter"], + [ + "All", "One", "Values", "ValuesList", "ValuesFlat", "RowsToMap", "RowsToStruct", + "QueryRow", "QueryRows" + ]) + | + this = FunctionOutput::parameter(0).getExitNode(impl.getACall()) + ) + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Chi.qll b/go/ql/lib/semmle/go/frameworks/Chi.qll new file mode 100644 index 00000000000..89f1a41d350 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Chi.qll @@ -0,0 +1,29 @@ +/** + * Provides classes for working with untrusted flow sources from the `github.com/go-chi/chi` package. + */ + +import go + +private module Chi { + /** Gets the package name `github.com/go-chi/chi`. */ + string packagePath() { result = package("github.com/go-chi/chi", "") } + + /** + * Functions that extract URL parameters, considered as a source of untrusted flow. + */ + private class UserControlledFunction extends UntrustedFlowSource::Range, DataFlow::CallNode { + UserControlledFunction() { + this.getTarget().hasQualifiedName(packagePath(), ["URLParam", "URLParamFromCtx"]) + } + } + + /** + * Methods that extract URL parameters, considered as a source of untrusted flow. + */ + private class UserControlledRequestMethod extends UntrustedFlowSource::Range, + DataFlow::MethodCallNode { + UserControlledRequestMethod() { + this.getTarget().hasQualifiedName(packagePath(), "Context", "URLParam") + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Couchbase.qll b/go/ql/lib/semmle/go/frameworks/Couchbase.qll new file mode 100644 index 00000000000..983c445d710 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Couchbase.qll @@ -0,0 +1,98 @@ +/** + * Provides models of commonly used functions in the official Couchbase Go SDK library. + */ + +import go + +/** + * Provides models of commonly used functions in the official Couchbase Go SDK library. + */ +module Couchbase { + /** + * Gets a package path for the official Couchbase Go SDK library. + * + * Note that v1 and v2 have different APIs, but the names are disjoint so there is no need to + * distinguish between them. + */ + string packagePath() { + result = + package([ + "gopkg.in/couchbase/gocb", "github.com/couchbase/gocb", "github.com/couchbaselabs/gocb" + ], "") + } + + /** + * Models of methods on `gocb/AnalyticsQuery` and `gocb/N1qlQuery` which which support a fluent + * interface by returning the receiver. They are not inherently relevant to taint. + */ + private class QueryMethodV1 extends TaintTracking::FunctionModel, Method { + QueryMethodV1() { + exists(string queryTypeName, string methodName | + queryTypeName = "AnalyticsQuery" and + methodName in [ + "ContextId", "Deferred", "Pretty", "Priority", "RawParam", "ServerSideTimeout" + ] + or + queryTypeName = "N1qlQuery" and + methodName in [ + "AdHoc", "Consistency", "ConsistentWith", "Custom", "PipelineBatch", "PipelineCap", + "Profile", "ReadOnly", "ScanCap", "Timeout" + ] + | + this.hasQualifiedName(packagePath(), queryTypeName, methodName) + ) + } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp.isReceiver() and outp.isResult() + } + } + + private class QueryFromN1qlStatementV1 extends TaintTracking::FunctionModel { + QueryFromN1qlStatementV1() { + this.hasQualifiedName(packagePath(), ["NewAnalyticsQuery", "NewN1qlQuery"]) + } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp.isParameter(0) and outp.isResult() + } + } + + /** + * A query used in an API function acting on a `Bucket` or `Cluster` struct of v1 of + * the official Couchbase Go library, gocb. + */ + private class CouchbaseV1Query extends NoSQL::Query::Range { + CouchbaseV1Query() { + // func (b *Bucket) ExecuteAnalyticsQuery(q *AnalyticsQuery, params interface{}) (AnalyticsResults, error) + // func (b *Bucket) ExecuteN1qlQuery(q *N1qlQuery, params interface{}) (QueryResults, error) + // func (c *Cluster) ExecuteAnalyticsQuery(q *AnalyticsQuery, params interface{}) (AnalyticsResults, error) + // func (c *Cluster) ExecuteN1qlQuery(q *N1qlQuery, params interface{}) (QueryResults, error) + exists(Method meth, string structName, string methodName | + structName in ["Bucket", "Cluster"] and + methodName in ["ExecuteN1qlQuery", "ExecuteAnalyticsQuery"] and + meth.hasQualifiedName(packagePath(), structName, methodName) and + this = meth.getACall().getArgument(0) + ) + } + } + + /** + * A query used in an API function acting on a `Bucket` or `Cluster` struct of v1 of + * the official Couchbase Go library, gocb. + */ + private class CouchbaseV2Query extends NoSQL::Query::Range { + CouchbaseV2Query() { + // func (c *Cluster) AnalyticsQuery(statement string, opts *AnalyticsOptions) (*AnalyticsResult, error) + // func (c *Cluster) Query(statement string, opts *QueryOptions) (*QueryResult, error) + // func (s *Scope) AnalyticsQuery(statement string, opts *AnalyticsOptions) (*AnalyticsResult, error) + // func (s *Scope) Query(statement string, opts *QueryOptions) (*QueryResult, error) + exists(Method meth, string structName, string methodName | + structName in ["Cluster", "Scope"] and + methodName in ["AnalyticsQuery", "Query"] and + meth.hasQualifiedName(packagePath(), structName, methodName) and + this = meth.getACall().getArgument(0) + ) + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Echo.qll b/go/ql/lib/semmle/go/frameworks/Echo.qll new file mode 100644 index 00000000000..df58b492b87 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Echo.qll @@ -0,0 +1,123 @@ +/** + * Provides classes for working with untrusted flow sources, taint propagators, and HTTP sinks + * from the `github.com/labstack/echo` package. + */ + +import go + +private module Echo { + /** Gets the package name `github.com/labstack/echo`. */ + private string packagePath() { result = package("github.com/labstack/echo", "") } + + /** + * Data from a `Context` interface method, considered as a source of untrusted flow. + */ + private class EchoContextSource extends UntrustedFlowSource::Range { + EchoContextSource() { + exists(DataFlow::MethodCallNode call, string methodName | + methodName = + [ + "Param", "ParamValues", "QueryParam", "QueryParams", "QueryString", "FormValue", + "FormParams", "FormFile", "MultipartForm", "Cookie", "Cookies" + ] and + call.getTarget().hasQualifiedName(packagePath(), "Context", methodName) and + this = call.getResult(0) + ) + } + } + + /** + * Data from a `Context` interface method that is not generally exploitable for open-redirect attacks. + */ + private class EchoContextRedirectUnexploitableSource extends HTTP::Redirect::UnexploitableSource { + EchoContextRedirectUnexploitableSource() { + exists(DataFlow::MethodCallNode call, string methodName | + methodName = ["FormValue", "FormParams", "FormFile", "MultipartForm", "Cookie", "Cookies"] and + call.getTarget().hasQualifiedName(packagePath(), "Context", methodName) and + this = call.getResult(0) + ) + } + } + + /** + * Models of `Context.Get/Set`. `Context` behaves like a map, with corresponding taint propagation. + */ + private class ContextMapModels extends TaintTracking::FunctionModel, Method { + string methodName; + FunctionInput input; + FunctionOutput output; + + ContextMapModels() { + ( + methodName = "Get" and input.isReceiver() and output.isResult() + or + methodName = "Set" and input.isParameter(1) and output.isReceiver() + ) and + this.hasQualifiedName(packagePath(), "Context", methodName) + } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp = input and outp = output + } + } + + /** + * A call to a method on `Context` struct that unmarshals data into a target. + */ + private class EchoContextBinder extends UntrustedFlowSource::Range { + EchoContextBinder() { + exists(DataFlow::MethodCallNode call | + call.getTarget().hasQualifiedName(packagePath(), "Context", "Bind") + | + this = FunctionOutput::parameter(0).getExitNode(call) + ) + } + } + + /** + * `echo.Context` methods which set the content-type to `text/html` and write a result in one operation. + */ + private class EchoHtmlOutputs extends HTTP::ResponseBody::Range { + EchoHtmlOutputs() { + exists(Method m | m.hasQualifiedName(packagePath(), "Context", ["HTML", "HTMLBlob"]) | + this = m.getACall().getArgument(1) + ) + } + + override HTTP::ResponseWriter getResponseWriter() { none() } + + override string getAContentType() { result = "text/html" } + } + + /** + * `echo.Context` methods which take a content-type as a parameter. + */ + private class EchoParameterizedOutputs extends HTTP::ResponseBody::Range { + DataFlow::CallNode callNode; + + EchoParameterizedOutputs() { + exists(Method m | m.hasQualifiedName(packagePath(), "Context", ["Blob", "Stream"]) | + callNode = m.getACall() and this = callNode.getArgument(2) + ) + } + + override HTTP::ResponseWriter getResponseWriter() { none() } + + override DataFlow::Node getAContentTypeNode() { result = callNode.getArgument(1) } + } + + /** + * The `echo.Context.Redirect` method. + */ + private class EchoRedirectMethod extends HTTP::Redirect::Range, DataFlow::CallNode { + EchoRedirectMethod() { + exists(Method m | m.hasQualifiedName(packagePath(), "Context", "Redirect") | + this = m.getACall() + ) + } + + override DataFlow::Node getUrl() { result = this.getArgument(1) } + + override HTTP::ResponseWriter getResponseWriter() { none() } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll b/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll new file mode 100644 index 00000000000..0d49431e72b --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll @@ -0,0 +1,143 @@ +/** + * Provides classes for working with concepts relating to the [github.com/elazarl/goproxy](https://pkg.go.dev/github.com/elazarl/goproxy) package. + */ + +import go +private import semmle.go.StringOps + +/** + * Provides classes for working with concepts relating to the [github.com/elazarl/goproxy](https://pkg.go.dev/github.com/elazarl/goproxy) package. + */ +module ElazarlGoproxy { + /** Gets the package name. */ + string packagePath() { result = package("github.com/elazarl/goproxy", "") } + + private class NewResponse extends HTTP::HeaderWrite::Range, DataFlow::CallNode { + NewResponse() { this.getTarget().hasQualifiedName(packagePath(), "NewResponse") } + + override string getHeaderName() { this.definesHeader(result, _) } + + override string getHeaderValue() { this.definesHeader(_, result) } + + override DataFlow::Node getName() { none() } + + override DataFlow::Node getValue() { result = this.getArgument([1, 2]) } + + override predicate definesHeader(string header, string value) { + header = "status" and value = this.getArgument(2).getIntValue().toString() + or + header = "content-type" and value = this.getArgument(1).getStringValue() + } + + override HTTP::ResponseWriter getResponseWriter() { none() } + } + + /** A body argument to a `NewResponse` call. */ + private class NewResponseBody extends HTTP::ResponseBody::Range { + NewResponse call; + + NewResponseBody() { this = call.getArgument(3) } + + override DataFlow::Node getAContentTypeNode() { result = call.getArgument(1) } + + override HTTP::ResponseWriter getResponseWriter() { none() } + } + + private class TextResponse extends HTTP::HeaderWrite::Range, DataFlow::CallNode { + TextResponse() { this.getTarget().hasQualifiedName(packagePath(), "TextResponse") } + + override string getHeaderName() { this.definesHeader(result, _) } + + override string getHeaderValue() { this.definesHeader(_, result) } + + override DataFlow::Node getName() { none() } + + override DataFlow::Node getValue() { none() } + + override predicate definesHeader(string header, string value) { + header = "status" and value = "200" + or + header = "content-type" and value = "text/plain" + } + + override HTTP::ResponseWriter getResponseWriter() { none() } + } + + /** A body argument to a `TextResponse` call. */ + private class TextResponseBody extends HTTP::ResponseBody::Range, TextResponse { + TextResponse call; + + TextResponseBody() { this = call.getArgument(2) } + + override DataFlow::Node getAContentTypeNode() { result = call.getArgument(1) } + + override HTTP::ResponseWriter getResponseWriter() { none() } + } + + /** A handler attached to a goproxy proxy type. */ + private class ProxyHandler extends HTTP::RequestHandler::Range { + DataFlow::MethodCallNode handlerReg; + + ProxyHandler() { + handlerReg + .getTarget() + .hasQualifiedName(packagePath(), "ReqProxyConds", ["Do", "DoFunc", "HandleConnect"]) and + this = handlerReg.getArgument(0) + } + + override predicate guardedBy(DataFlow::Node check) { + // note OnResponse is not modeled, as that server responses are not currently considered untrusted input + exists(DataFlow::MethodCallNode onreqcall | + onreqcall.getTarget().hasQualifiedName(packagePath(), "ProxyHttpServer", "OnRequest") + | + handlerReg.getReceiver() = onreqcall.getASuccessor*() and + check = onreqcall.getArgument(0) + ) + } + } + + private class UserControlledRequestData extends UntrustedFlowSource::Range { + UserControlledRequestData() { + exists(DataFlow::FieldReadNode frn | this = frn | + // liberally consider ProxyCtx.UserData to be untrusted; it's a data field set by a request handler + frn.getField().hasQualifiedName(packagePath(), "ProxyCtx", "UserData") + ) + or + exists(DataFlow::MethodCallNode call | this = call | + call.getTarget().hasQualifiedName(packagePath(), "ProxyCtx", "Charset") + ) + } + } + + private class ProxyLogFunction extends StringOps::Formatting::Range, Method { + ProxyLogFunction() { this.hasQualifiedName(packagePath(), "ProxyCtx", ["Logf", "Warnf"]) } + + override int getFormatStringIndex() { result = 0 } + + override int getFirstFormattedParameterIndex() { result = 1 } + } + + private class ProxyLog extends LoggerCall::Range, DataFlow::MethodCallNode { + ProxyLog() { this.getTarget() instanceof ProxyLogFunction } + + override DataFlow::Node getAMessageComponent() { result = this.getAnArgument() } + } + + private class MethodModels extends TaintTracking::FunctionModel, Method { + FunctionInput inp; + FunctionOutput outp; + + MethodModels() { + // Methods: + // signature: func CertStorage.Fetch(hostname string, gen func() (*tls.Certificate, error)) (*tls.Certificate, error) + // + // `hostname` excluded because if the cert storage or generator function themselves have not + // been tainted, `hostname` would be unlikely to fetch user-controlled data + this.hasQualifiedName(packagePath(), "CertStorage", "Fetch") and + (inp.isReceiver() or inp.isParameter(1)) and + outp.isResult(0) + } + + override predicate hasTaintFlow(FunctionInput i, FunctionOutput o) { i = inp and o = outp } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Email.qll b/go/ql/lib/semmle/go/frameworks/Email.qll new file mode 100644 index 00000000000..049af5f87bf --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Email.qll @@ -0,0 +1,114 @@ +/** Provides classes for working with email-related APIs. */ + +import go + +/** + * A data-flow node that represents data written to an email, either as part + * of the headers or as part of the body. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `EmailData::Range` instead. + */ +class EmailData extends DataFlow::Node { + EmailData::Range self; + + EmailData() { this = self } +} + +/** Provides classes for working with data that is incorporated into an email. */ +module EmailData { + /** + * A data-flow node that represents data which is written to an email, either as part + * of the headers or as part of the body. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `EmailData` instead. + */ + abstract class Range extends DataFlow::Node { } + + /** A data-flow node that is written to an email using the net/smtp package. */ + private class SmtpData extends Range { + SmtpData() { + // func (c *Client) Data() (io.WriteCloser, error) + exists(Method data | + data.hasQualifiedName("net/smtp", "Client", "Data") and + this.(DataFlow::SsaNode).getInit() = data.getACall().getResult(0) + ) + or + // func SendMail(addr string, a Auth, from string, to []string, msg []byte) error + exists(Function sendMail | + sendMail.hasQualifiedName("net/smtp", "SendMail") and + this = sendMail.getACall().getArgument(4) + ) + } + } + + /** Gets the package name `github.com/sendgrid/sendgrid-go/helpers/mail`. */ + private string sendgridMail() { + result = package("github.com/sendgrid/sendgrid-go", "helpers/mail") + } + + private class NewContent extends TaintTracking::FunctionModel { + NewContent() { + // func NewContent(contentType string, value string) *Content + this.hasQualifiedName(sendgridMail(), "NewContent") + } + + override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { + input.isParameter(1) and output.isResult() + } + } + + /** A data-flow node that is written to an email using the sendgrid/sendgrid-go package. */ + private class SendGridEmail extends Range { + SendGridEmail() { + // func NewSingleEmail(from *Email, subject string, to *Email, plainTextContent string, htmlContent string) *SGMailV3 + exists(Function newSingleEmail | + newSingleEmail.hasQualifiedName(sendgridMail(), "NewSingleEmail") and + this = newSingleEmail.getACall().getArgument([1, 3, 4]) + ) + or + // func NewV3MailInit(from *Email, subject string, to *Email, content ...*Content) *SGMailV3 + exists(Function newv3MailInit | + newv3MailInit.hasQualifiedName(sendgridMail(), "NewV3MailInit") and + this = newv3MailInit.getACall().getArgument(any(int i | i = 1 or i >= 3)) + ) + or + // func (s *SGMailV3) AddContent(c ...*Content) *SGMailV3 + exists(Method addContent | + addContent.hasQualifiedName(sendgridMail(), "SGMailV3", "AddContent") and + this = addContent.getACall().getAnArgument() + ) + } + } +} + +/** + * A taint model of the `Writer.CreatePart` method from `mime/multipart`. + * + * If tainted data is written to the multipart section created by this method, the underlying writer + * should be considered tainted as well. + */ +private class MultipartWriterCreatePartModel extends TaintTracking::FunctionModel, Method { + MultipartWriterCreatePartModel() { + this.hasQualifiedName("mime/multipart", "Writer", "CreatePart") + } + + override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { + input.isResult(0) and output.isReceiver() + } +} + +/** + * A taint model of the `NewWriter` function from `mime/multipart`. + * + * If tainted data is written to the writer created by this function, the underlying writer + * should be considered tainted as well. + */ +private class MultipartNewWriterModel extends TaintTracking::FunctionModel { + MultipartNewWriterModel() { this.hasQualifiedName("mime/multipart", "NewWriter") } + + override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { + input.isResult() and output.isParameter(0) + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Encoding.qll b/go/ql/lib/semmle/go/frameworks/Encoding.qll new file mode 100644 index 00000000000..34af4ce6ed7 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Encoding.qll @@ -0,0 +1,28 @@ +/** + * Provides classes modeling taint propagation through marshalling and encoding functions. + */ + +import go + +/** Gets the package name `github.com/json-iterator/go`. */ +private string packagePath() { result = package("github.com/json-iterator/go", "") } + +/** A model of json-iterator's `Unmarshal` function, propagating taint from the JSON input to the decoded object. */ +private class JsonIteratorUnmarshalFunction extends TaintTracking::FunctionModel, + UnmarshalingFunction::Range { + JsonIteratorUnmarshalFunction() { + this.hasQualifiedName(packagePath(), ["Unmarshal", "UnmarshalFromString"]) + or + this.(Method).implements(packagePath(), "API", ["Unmarshal", "UnmarshalFromString"]) + } + + override DataFlow::FunctionInput getAnInput() { result.isParameter(0) } + + override DataFlow::FunctionOutput getOutput() { result.isParameter(1) } + + override string getFormat() { result = "JSON" } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } +} diff --git a/go/ql/lib/semmle/go/frameworks/EvanphxJsonPatch.qll b/go/ql/lib/semmle/go/frameworks/EvanphxJsonPatch.qll new file mode 100644 index 00000000000..6408b3d1d4c --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/EvanphxJsonPatch.qll @@ -0,0 +1,61 @@ +/** + * Provides classes modeling `github.com/evanphx/json-patch`. + */ + +import go + +private module EvanphxJsonPatch { + /** Gets the package name `github.com/evanphx/json-patch`. */ + private string packagePath() { result = package("github.com/evanphx/json-patch", "") } + + private class MergeMergePatches extends TaintTracking::FunctionModel { + MergeMergePatches() { this.hasQualifiedName(packagePath(), "MergeMergePatches") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + (inp.isParameter(0) or inp.isParameter(1)) and + outp.isResult(0) + } + } + + private class MergePatch extends TaintTracking::FunctionModel { + MergePatch() { this.hasQualifiedName(packagePath(), "MergePatch") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + (inp.isParameter(0) or inp.isParameter(1)) and + outp.isResult(0) + } + } + + private class CreateMergePatch extends TaintTracking::FunctionModel { + CreateMergePatch() { this.hasQualifiedName(packagePath(), "CreateMergePatch") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + (inp.isParameter(0) or inp.isParameter(1)) and + outp.isResult(0) + } + } + + private class DecodePatch extends TaintTracking::FunctionModel { + DecodePatch() { this.hasQualifiedName(packagePath(), "DecodePatch") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(0) and + outp.isResult(0) + } + } + + private class Apply extends TaintTracking::FunctionModel, Method { + Apply() { + exists(string fn | + fn in ["Apply", "ApplyWithOptions", "ApplyIndent", "ApplyIndentWithOptions"] + | + this.hasQualifiedName(packagePath(), "Patch", fn) + ) + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + (inp.isParameter(0) or inp.isReceiver()) and + outp.isResult(0) + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Gin.qll b/go/ql/lib/semmle/go/frameworks/Gin.qll new file mode 100644 index 00000000000..87212868ae3 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Gin.qll @@ -0,0 +1,72 @@ +/** + * Provides classes for working with untrusted flow sources from the `github.com/gin-gonic/gin` package. + */ + +import go + +private module Gin { + /** Gets the package name `github.com/gin-gonic/gin`. */ + string packagePath() { result = package("github.com/gin-gonic/gin", "") } + + /** + * Data from a `Context` struct, considered as a source of untrusted flow. + */ + private class GithubComGinGonicGinContextSource extends UntrustedFlowSource::Range { + GithubComGinGonicGinContextSource() { + // Method calls: + exists(DataFlow::MethodCallNode call, string methodName | + call.getTarget().hasQualifiedName(packagePath(), "Context", methodName) and + methodName in [ + "FullPath", "GetHeader", "QueryArray", "Query", "PostFormArray", "PostForm", "Param", + "GetStringSlice", "GetString", "GetRawData", "ClientIP", "ContentType", "Cookie", + "GetQueryArray", "GetQuery", "GetPostFormArray", "GetPostForm", "DefaultPostForm", + "DefaultQuery", "GetPostFormMap", "GetQueryMap", "GetStringMap", "GetStringMapString", + "GetStringMapStringSlice", "PostFormMap", "QueryMap" + ] + | + this = call.getResult(0) + ) + or + // Field reads: + exists(DataFlow::Field fld | + fld.hasQualifiedName(packagePath(), "Context", ["Accepted", "Params"]) and + this = fld.getARead() + ) + } + } + + private class ParamsGet extends TaintTracking::FunctionModel, Method { + ParamsGet() { this.hasQualifiedName(packagePath(), "Params", "Get") } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp.isReceiver() and outp.isResult(0) + } + } + + private class ParamsByName extends TaintTracking::FunctionModel, Method { + ParamsByName() { this.hasQualifiedName(packagePath(), "Params", "ByName") } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp.isReceiver() and outp.isResult() + } + } + + /** + * A call to a method on `Context` struct that unmarshals data into a target. + */ + private class GithubComGinGonicGinContextBindSource extends UntrustedFlowSource::Range { + GithubComGinGonicGinContextBindSource() { + exists(DataFlow::MethodCallNode call, string methodName | + call.getTarget().hasQualifiedName(packagePath(), "Context", methodName) and + methodName in [ + "BindJSON", "BindYAML", "BindXML", "BindUri", "BindQuery", "BindWith", "BindHeader", + "MustBindWith", "Bind", "ShouldBind", "ShouldBindBodyWith", "ShouldBindJSON", + "ShouldBindQuery", "ShouldBindUri", "ShouldBindHeader", "ShouldBindWith", + "ShouldBindXML", "ShouldBindYAML" + ] + | + this = FunctionOutput::parameter(0).getExitNode(call) + ) + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Glog.qll b/go/ql/lib/semmle/go/frameworks/Glog.qll new file mode 100644 index 00000000000..70b117a71e6 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Glog.qll @@ -0,0 +1,56 @@ +/** + * Provides models of commonly used functions in the `github.com/golang/glog` and `k8s.io/klog` + * packages. + */ + +import go +private import semmle.go.StringOps + +/** + * Provides models of commonly used functions in the `github.com/golang/glog` packages and its + * forks. + */ +module Glog { + private class GlogFunction extends Function { + int firstPrintedArg; + + GlogFunction() { + exists(string pkg, string fn, string level | + pkg = package(["github.com/golang/glog", "gopkg.in/glog", "k8s.io/klog"], "") and + level = ["Error", "Exit", "Fatal", "Info", "Warning"] and + ( + fn = level + ["", "f", "ln"] and firstPrintedArg = 0 + or + fn = level + "Depth" and firstPrintedArg = 1 + ) + | + this.hasQualifiedName(pkg, fn) + or + this.(Method).hasQualifiedName(pkg, "Verbose", fn) + ) + } + + /** + * Gets the index of the first argument that may be output, including a format string if one is present. + */ + int getFirstPrintedArg() { result = firstPrintedArg } + } + + private class StringFormatter extends StringOps::Formatting::Range instanceof GlogFunction { + StringFormatter() { this.getName().matches("%f") } + + override int getFormatStringIndex() { result = super.getFirstPrintedArg() } + + override int getFirstFormattedParameterIndex() { result = super.getFirstPrintedArg() + 1 } + } + + private class GlogCall extends LoggerCall::Range, DataFlow::CallNode { + GlogFunction callee; + + GlogCall() { this = callee.getACall() } + + override DataFlow::Node getAMessageComponent() { + result = this.getArgument(any(int i | i >= callee.getFirstPrintedArg())) + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/GoKit.qll b/go/ql/lib/semmle/go/frameworks/GoKit.qll new file mode 100644 index 00000000000..c501858997c --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/GoKit.qll @@ -0,0 +1,45 @@ +/** + * Provides classes for working with concepts relating to the [github.com/go-kit/kit](https://pkg.go.dev/github.com/go-kit/kit) package. + * + * Note that these models are not included by default; to include them, add `import semmle.go.frameworks.GoKit` to your query or to + * `Customizations.qll`. + */ + +import go + +/** + * Provides classes for working with concepts relating to the [github.com/go-kit/kit](https://pkg.go.dev/github.com/go-kit/kit) package. + */ +module GoKit { + /** Gets the package name. */ + string packagePath() { result = package("github.com/go-kit/kit", "") } + + /** + * Provides classes for working with concepts relating to the `endpoint` package of the + * [github.com/go-kit/kit](https://pkg.go.dev/github.com/go-kit/kit) package. + */ + module Endpoint { + /** Gets the package name. */ + string endpointPackagePath() { result = package("github.com/go-kit/kit", "endpoint") } + + // gets a function that returns an endpoint + private DataFlow::Node getAnEndpointFactoryResult() { + exists(Function mkFn, FunctionOutput res | + mkFn.getResultType(0).hasQualifiedName(endpointPackagePath(), "Endpoint") and + result = res.getEntryNode(mkFn.getFuncDecl()).getAPredecessor*() + ) + } + + private FuncDef getAnEndpointFunction() { + exists(Function endpointFn | endpointFn.getFuncDecl() = result | + endpointFn.getARead() = getAnEndpointFactoryResult() + ) + or + DataFlow::exprNode(result.(FuncLit)) = getAnEndpointFactoryResult() + } + + private class EndpointRequest extends UntrustedFlowSource::Range { + EndpointRequest() { this = DataFlow::parameterNode(getAnEndpointFunction().getParameter(1)) } + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/GoRestfulHttp.qll b/go/ql/lib/semmle/go/frameworks/GoRestfulHttp.qll new file mode 100644 index 00000000000..ddaf4dde544 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/GoRestfulHttp.qll @@ -0,0 +1,46 @@ +/** + * Provides models of the [go-restful library](https://github.com/emicklei/go-restful). + */ + +import go + +/** + * Provides models of the [go-restful library](https://github.com/emicklei/go-restful). + */ +private module GoRestfulHttp { + /** Gets the package name `github.com/emicklei/go-restful`. */ + string packagePath() { result = package("github.com/emicklei/go-restful", "") } + + /** + * A model for methods defined on go-restful's `Request` object that may return user-controlled data. + */ + private class GoRestfulSourceMethod extends Method { + GoRestfulSourceMethod() { + this.hasQualifiedName(packagePath(), "Request", + [ + "QueryParameters", "QueryParameter", "BodyParameter", "HeaderParameter", "PathParameter", + "PathParameters" + ]) + } + } + + /** + * A model of go-restful's `Request` object as a source of user-controlled data. + */ + private class GoRestfulSource extends UntrustedFlowSource::Range { + GoRestfulSource() { this = any(GoRestfulSourceMethod g).getACall() } + } + + /** + * A model of go-restful's `Request.ReadEntity` method as a source of user-controlled data. + */ + private class GoRestfulReadEntitySource extends UntrustedFlowSource::Range { + GoRestfulReadEntitySource() { + exists(DataFlow::MethodCallNode call | + call.getTarget().hasQualifiedName(packagePath(), "Request", "ReadEntity") + | + this = FunctionOutput::parameter(0).getExitNode(call) + ) + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/K8sIoApiCoreV1.qll b/go/ql/lib/semmle/go/frameworks/K8sIoApiCoreV1.qll new file mode 100644 index 00000000000..9918274f166 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/K8sIoApiCoreV1.qll @@ -0,0 +1,61 @@ +/** Provides models of commonly used functions in the `k8s.io/api/core/v1` package. */ + +import go + +/** + * Provides models of commonly used functions in the `k8s.io/api/core/v1` package. + */ +module K8sIoApiCoreV1 { + /** Gets the package name `k8s.io/api/core/v1`. */ + string packagePath() { result = package("k8s.io/api", "core/v1") } + + private class SecretDeepCopy extends TaintTracking::FunctionModel, Method { + string methodName; + FunctionOutput output; + + SecretDeepCopy() { + ( + methodName in ["DeepCopy", "DeepCopyObject"] and output.isResult() + or + methodName = "DeepCopyInto" and output.isParameter(0) + ) and + this.hasQualifiedName(packagePath(), ["Secret", "SecretList"], methodName) + } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp.isReceiver() and outp = outp + } + } + + private class SecretMarshal extends TaintTracking::FunctionModel, Method, + MarshalingFunction::Range { + SecretMarshal() { this.hasQualifiedName(packagePath(), ["Secret", "SecretList"], "Marshal") } + + override DataFlow::FunctionInput getAnInput() { result.isReceiver() } + + override DataFlow::FunctionOutput getOutput() { result.isResult(0) } + + override string getFormat() { result = "protobuf" } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class SecretUnmarshal extends TaintTracking::FunctionModel, Method, + UnmarshalingFunction::Range { + SecretUnmarshal() { + this.hasQualifiedName(packagePath(), ["Secret", "SecretList"], "Unmarshal") + } + + override DataFlow::FunctionInput getAnInput() { result.isReceiver() } + + override DataFlow::FunctionOutput getOutput() { result.isParameter(0) } + + override string getFormat() { result = "protobuf" } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/K8sIoApimachineryPkgRuntime.qll b/go/ql/lib/semmle/go/frameworks/K8sIoApimachineryPkgRuntime.qll new file mode 100644 index 00000000000..3ce4df3dc92 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/K8sIoApimachineryPkgRuntime.qll @@ -0,0 +1,424 @@ +/** Provides models of commonly used functions in the `k8s.io/apimachinery/pkg/runtime` package. */ + +import go + +/** + * Provides models of commonly used functions in the `k8s.io/apimachinery/pkg/runtime` package. + */ +module K8sIoApimachineryPkgRuntime { + /** Gets the package name `k8s.io/apimachinery/pkg/runtime`. */ + string packagePath() { result = package("k8s.io/apimachinery", "pkg/runtime") } + + private class ConvertTypeToType extends TaintTracking::FunctionModel { + ConvertTypeToType() { + this.hasQualifiedName(packagePath(), + [ + "Convert_Slice_string_To_Pointer_int64", "Convert_Slice_string_To_int", + "Convert_Slice_string_To_int64", "Convert_Slice_string_To_string", + "Convert_runtime_Object_To_runtime_RawExtension", + "Convert_runtime_RawExtension_To_runtime_Object", "Convert_string_To_Pointer_int64", + "Convert_string_To_int64" + ]) + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(0) and outp.isParameter(1) + } + } + + private class DecodeInto extends TaintTracking::FunctionModel, UnmarshalingFunction::Range { + DecodeInto() { this.hasQualifiedName(packagePath(), "DecodeInto") } + + override DataFlow::FunctionInput getAnInput() { result.isParameter(1) } + + override DataFlow::FunctionOutput getOutput() { result.isParameter(2) } + + override string getFormat() { + // The format is not fixed. It depends on parameter 1 or 2. + none() + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class DeepCopyJSON extends TaintTracking::FunctionModel { + DeepCopyJSON() { this.hasQualifiedName(packagePath(), ["DeepCopyJSON", "DeepCopyJSONValue"]) } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(0) and outp.isResult() + } + } + + private class Encode extends TaintTracking::FunctionModel, MarshalingFunction::Range { + Encode() { this.hasQualifiedName(packagePath(), ["Encode", "EncodeOrDie"]) } + + override DataFlow::FunctionInput getAnInput() { result.isParameter(1) } + + override DataFlow::FunctionOutput getOutput() { result.isResult(0) } + + override string getFormat() { + // The format is not fixed. It depends on the receiver. + none() + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class ReadField extends TaintTracking::FunctionModel { + ReadField() { this.hasQualifiedName(packagePath(), ["Field", "FieldPtr"]) } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(0) and outp.isParameter(2) + } + } + + private class SetField extends TaintTracking::FunctionModel { + SetField() { this.hasQualifiedName(packagePath(), "SetField") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(0) and outp.isParameter(1) + } + } + + private class CacheableObjectCacheEncode extends TaintTracking::FunctionModel, Method, + MarshalingFunction::Range { + CacheableObjectCacheEncode() { + this.implements(packagePath(), "CacheableObject", "CacheEncode") + } + + override DataFlow::FunctionInput getAnInput() { result.isReceiver() } + + override DataFlow::FunctionOutput getOutput() { result.isParameter(2) } + + override string getFormat() { + // The format is not fixed. It depends on the receiver. + none() + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class CacheableObjectGetObject extends TaintTracking::FunctionModel, Method { + CacheableObjectGetObject() { this.implements(packagePath(), "CacheableObject", "GetObject") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isReceiver() and outp.isResult() + } + } + + private class DecoderDecode extends TaintTracking::FunctionModel, Method, + UnmarshalingFunction::Range { + DecoderDecode() { + this.implements(packagePath(), "Decoder", "Decode") or + this.hasQualifiedName(packagePath(), "WithoutVersionDecoder", "Decode") + } + + override DataFlow::FunctionInput getAnInput() { result.isParameter(0) } + + override DataFlow::FunctionOutput getOutput() { result.isParameter(2) or result.isResult(0) } + + override string getFormat() { + // The format is not fixed. It depends on the receiver. + none() + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class EncoderEncode extends TaintTracking::FunctionModel, Method, + MarshalingFunction::Range { + EncoderEncode() { + this.implements(packagePath(), "Encoder", "Encode") or + this.hasQualifiedName(packagePath(), "WithVersionEncoder", "Encode") + } + + override DataFlow::FunctionInput getAnInput() { result.isParameter(0) } + + override DataFlow::FunctionOutput getOutput() { result.isParameter(1) } + + override string getFormat() { + // The format is not fixed. It depends on the receiver. + none() + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class FramerNewFrameReader extends TaintTracking::FunctionModel, Method { + FramerNewFrameReader() { this.implements(packagePath(), "Framer", "NewFrameReader") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(0) and outp.isResult() + } + } + + private class FramerNewFrameWriter extends TaintTracking::FunctionModel, Method { + FramerNewFrameWriter() { this.implements(packagePath(), "Framer", "NewFrameWriter") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(0) and outp.isResult() + } + } + + private class ObjectDeepCopyObject extends TaintTracking::FunctionModel, Method { + ObjectDeepCopyObject() { this.implements(packagePath(), "Object", "DeepCopyObject") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isReceiver() and outp.isResult() + } + } + + private class Decode extends TaintTracking::FunctionModel, UnmarshalingFunction::Range { + Decode() { this.hasQualifiedName(packagePath(), "Decode") } + + override DataFlow::FunctionInput getAnInput() { result.isParameter(1) } + + override DataFlow::FunctionOutput getOutput() { result.isResult(0) } + + override string getFormat() { + // The format is not fixed. It depends on the parameter 0. + none() + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class NewEncodable extends TaintTracking::FunctionModel { + NewEncodable() { this.hasQualifiedName(packagePath(), ["NewEncodable", "NewEncodableList"]) } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(1) and outp.isResult() + } + } + + private class UseOrCreateObject extends TaintTracking::FunctionModel { + UseOrCreateObject() { this.hasQualifiedName(packagePath(), "UseOrCreateObject") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(3) and outp.isResult(0) + } + } + + private class ObjectConvertorConvert extends TaintTracking::FunctionModel, Method { + ObjectConvertorConvert() { this.implements(packagePath(), "ObjectConvertor", "Convert") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(0) and outp.isParameter(1) + } + } + + private class ObjectConvertorConvertToVersion extends TaintTracking::FunctionModel, Method { + ObjectConvertorConvertToVersion() { + this.implements(packagePath(), "ObjectConvertor", "ConvertToVersion") + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(0) and outp.isResult(0) + } + } + + private class ObjectVersionerConvertToVersion extends TaintTracking::FunctionModel, Method { + ObjectVersionerConvertToVersion() { + this.implements(packagePath(), "ObjectVersioner", "ConvertToVersion") + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(0) and outp.isResult(0) + } + } + + private class ParameterCodecDecodeParameters extends TaintTracking::FunctionModel, Method, + UnmarshalingFunction::Range { + ParameterCodecDecodeParameters() { + this.implements(packagePath(), "ParameterCodec", "DecodeParameters") + } + + override DataFlow::FunctionInput getAnInput() { result.isParameter(0) } + + override DataFlow::FunctionOutput getOutput() { result.isParameter(2) } + + override string getFormat() { + // The format is not fixed. It depends on parameter 1. + none() + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class ParameterCodecEncodeParameters extends TaintTracking::FunctionModel, Method, + MarshalingFunction::Range { + ParameterCodecEncodeParameters() { + this.implements(packagePath(), "ParameterCodec", "EncodeParameters") + } + + override DataFlow::FunctionInput getAnInput() { result.isParameter(0) } + + override DataFlow::FunctionOutput getOutput() { result.isResult(0) } + + override string getFormat() { + // The format is not fixed. It depends on parameter 1. + none() + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class ProtobufMarshallerMarshalTo extends TaintTracking::FunctionModel, Method, + MarshalingFunction::Range { + ProtobufMarshallerMarshalTo() { + this.implements(packagePath(), "ProtobufMarshaller", "MarshalTo") or + this.implements(packagePath(), "ProtobufReverseMarshaller", "MarshalToSizedBuffer") + } + + override DataFlow::FunctionInput getAnInput() { result.isReceiver() } + + override DataFlow::FunctionOutput getOutput() { result.isParameter(0) } + + override string getFormat() { result = "protobuf" } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class RawExtensionDeepCopy extends TaintTracking::FunctionModel, Method { + RawExtensionDeepCopy() { this.hasQualifiedName(packagePath(), "RawExtension", "DeepCopy") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isReceiver() and outp.isResult() + } + } + + private class RawExtensionDeepCopyInto extends TaintTracking::FunctionModel, Method { + RawExtensionDeepCopyInto() { + this.hasQualifiedName(packagePath(), "RawExtension", "DeepCopyInto") + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isReceiver() and outp.isParameter(0) + } + } + + private class RawExtensionMarshal extends TaintTracking::FunctionModel, Method, + MarshalingFunction::Range { + RawExtensionMarshal() { this.hasQualifiedName(packagePath(), "RawExtension", "Marshal") } + + override DataFlow::FunctionInput getAnInput() { result.isReceiver() } + + override DataFlow::FunctionOutput getOutput() { result.isResult(0) } + + override string getFormat() { result = "protobuf" } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class RawExtensionUnmarshal extends TaintTracking::FunctionModel, Method, + UnmarshalingFunction::Range { + RawExtensionUnmarshal() { this.hasQualifiedName(packagePath(), "RawExtension", "Unmarshal") } + + override DataFlow::FunctionInput getAnInput() { result.isReceiver() } + + override DataFlow::FunctionOutput getOutput() { result.isParameter(0) } + + override string getFormat() { result = "protobuf" } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class UnknownDeepCopy extends TaintTracking::FunctionModel, Method { + UnknownDeepCopy() { + this.hasQualifiedName(packagePath(), "Unknown", ["DeepCopy", "DeepCopyObject"]) + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isReceiver() and outp.isResult() + } + } + + private class UnknownDeepCopyInto extends TaintTracking::FunctionModel, Method { + UnknownDeepCopyInto() { this.hasQualifiedName(packagePath(), "Unknown", "DeepCopyInto") } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isReceiver() and outp.isParameter(0) + } + } + + private class UnknownMarshal extends TaintTracking::FunctionModel, Method, + MarshalingFunction::Range { + string methodName; + + UnknownMarshal() { + methodName in ["Marshal", "NestedMarshalTo"] and + this.hasQualifiedName(packagePath(), "Unknown", methodName) + } + + override DataFlow::FunctionInput getAnInput() { result.isReceiver() } + + override DataFlow::FunctionOutput getOutput() { + methodName = "Marshal" and result.isResult(0) + or + methodName = "NestedMarshalTo" and result.isParameter(0) + } + + override string getFormat() { result = "protobuf" } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class UnknownUnmarshal extends TaintTracking::FunctionModel, Method, + UnmarshalingFunction::Range { + UnknownUnmarshal() { this.hasQualifiedName(packagePath(), "Unknown", "Unmarshal") } + + override DataFlow::FunctionInput getAnInput() { result.isReceiver() } + + override DataFlow::FunctionOutput getOutput() { result.isParameter(0) } + + override string getFormat() { result = "protobuf" } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + } + + private class UnstructuredUnstructuredContent extends TaintTracking::FunctionModel, Method { + UnstructuredUnstructuredContent() { + this.implements(packagePath(), "Unstructured", "UnstructuredContent") + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isReceiver() and outp.isResult() + } + } + + private class UnstructuredSetUnstructuredContent extends TaintTracking::FunctionModel, Method { + UnstructuredSetUnstructuredContent() { + this.implements(packagePath(), "Unstructured", "SetUnstructuredContent") + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp.isParameter(0) and outp.isReceiver() + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/K8sIoClientGo.qll b/go/ql/lib/semmle/go/frameworks/K8sIoClientGo.qll new file mode 100644 index 00000000000..c087cc26ff8 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/K8sIoClientGo.qll @@ -0,0 +1,28 @@ +/** Provides models of commonly used functions in the `k8s.io/client-go/kubernetes/typed/core/v1` package. */ + +import go + +/** + * Provides models of commonly used functions in the `k8s.io/client-go/kubernetes/typed/core/v1` + * package. + */ +module K8sIoClientGo { + /** Gets the package name `k8s.io/client-go/kubernetes/typed/core/v1`. */ + string packagePath() { result = package("k8s.io/client-go", "kubernetes/typed/core/v1") } + + /** + * A model of `SecretInterface` methods that are sources of secret data. + */ + private class SecretInterfaceSourceMethod extends Method { + SecretInterfaceSourceMethod() { + this.implements(packagePath(), "SecretInterface", ["Get", "List", "Patch"]) + } + } + + /** + * A model of `SecretInterface` as a source of secret data. + */ + class SecretInterfaceSource extends DataFlow::Node { + SecretInterfaceSource() { this = any(SecretInterfaceSourceMethod g).getACall().getResult(0) } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Logrus.qll b/go/ql/lib/semmle/go/frameworks/Logrus.qll new file mode 100644 index 00000000000..9255b6767b5 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Logrus.qll @@ -0,0 +1,53 @@ +/** Provides models of commonly used functions in the `github.com/sirupsen/logrus` package. */ + +import go +private import semmle.go.StringOps + +/** Provides models of commonly used functions in the `github.com/sirupsen/logrus` package. */ +module Logrus { + /** Gets the package name `github.com/sirupsen/logrus`. */ + string packagePath() { + result = package(["github.com/sirupsen/logrus", "github.com/Sirupsen/logrus"], "") + } + + bindingset[result] + private string getALogResultName() { + result + .matches([ + "Debug%", "Error%", "Fatal%", "Info%", "Log%", "Panic%", "Print%", "Trace%", "Warn%" + ]) + } + + bindingset[result] + private string getAnEntryUpdatingMethodName() { + result.regexpMatch("With(Context|Error|Fields?|Time)") + } + + private class LogFunction extends Function { + LogFunction() { + exists(string name | name = getALogResultName() or name = getAnEntryUpdatingMethodName() | + this.hasQualifiedName(packagePath(), name) or + this.(Method).hasQualifiedName(packagePath(), ["Entry", "Logger"], name) + ) + } + } + + private class LogCall extends LoggerCall::Range, DataFlow::CallNode { + LogCall() { this = any(LogFunction f).getACall() } + + override DataFlow::Node getAMessageComponent() { result = this.getAnArgument() } + } + + private class StringFormatters extends StringOps::Formatting::Range instanceof LogFunction { + int argOffset; + + StringFormatters() { + this.getName().matches("%f") and + if this.getName() = "Logf" then argOffset = 1 else argOffset = 0 + } + + override int getFormatStringIndex() { result = argOffset } + + override int getFirstFormattedParameterIndex() { result = argOffset + 1 } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Macaron.qll b/go/ql/lib/semmle/go/frameworks/Macaron.qll new file mode 100644 index 00000000000..a38b2b20da0 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Macaron.qll @@ -0,0 +1,30 @@ +/** + * Provides classes for working with concepts relating to the Macaron web framework + */ + +import go + +private module Macaron { + private class Context extends HTTP::ResponseWriter::Range { + SsaWithFields v; + + Context() { + this = v.getBaseVariable().getSourceVariable() and + exists(Method m | m.hasQualifiedName("gopkg.in/macaron.v1", "Context", "Redirect") | + v.getType().getMethod("Redirect") = m + ) + } + + override DataFlow::Node getANode() { result = v.similar().getAUse().getASuccessor*() } + } + + private class RedirectCall extends HTTP::Redirect::Range, DataFlow::MethodCallNode { + RedirectCall() { + this.getTarget().hasQualifiedName("gopkg.in/macaron.v1", "Context", "Redirect") + } + + override DataFlow::Node getUrl() { result = this.getArgument(0) } + + override HTTP::ResponseWriter getResponseWriter() { result.getANode() = this.getReceiver() } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Mux.qll b/go/ql/lib/semmle/go/frameworks/Mux.qll new file mode 100644 index 00000000000..bca64c17cf6 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Mux.qll @@ -0,0 +1,17 @@ +/** + * Provides classes for working with concepts in the Mux HTTP middleware library. + */ + +import go + +/** + * Provides classes for working with concepts in the Mux HTTP middleware library. + */ +module Mux { + /** An access to a Mux middleware variable. */ + class RequestVars extends DataFlow::UntrustedFlowSource::Range, DataFlow::CallNode { + RequestVars() { + this.getTarget().hasQualifiedName(package("github.com/gorilla/mux", ""), "Vars") + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/NoSQL.qll b/go/ql/lib/semmle/go/frameworks/NoSQL.qll new file mode 100644 index 00000000000..9f9ca609084 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/NoSQL.qll @@ -0,0 +1,121 @@ +/** + * Provides classes for working with NoSQL-related concepts such as queries. + */ + +import go + +/** Provides classes for working with NoSQL-related APIs. */ +module NoSQL { + /** + * A data-flow node whose value is interpreted as (part of) a NoSQL query. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `NoSQL::Query::Range` instead. + */ + class Query extends DataFlow::Node { + Query::Range self; + + Query() { this = self } + } + + /** Provides classes for working with NoSQL queries. */ + module Query { + /** + * A data-flow node whose value is interpreted as (part of) a NoSQL query. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `NoSQL::Query` instead. + */ + abstract class Range extends DataFlow::Node { } + + /** + * Holds if method `name` of struct `Collection` from package + * [go.mongodb.org/mongo-driver/mongo](https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo) + * interprets parameter `n` as a query. + */ + private predicate mongoDbCollectionMethod(string name, int n) { + // func (coll *Collection) CountDocuments(ctx context.Context, filter interface{}, + // opts ...*options.CountOptions) (int64, error) + name = "CountDocuments" and n = 1 + or + // func (coll *Collection) DeleteMany(ctx context.Context, filter interface{}, + // opts ...*options.DeleteOptions) (*DeleteResult, error) + name = "DeleteMany" and n = 1 + or + // func (coll *Collection) DeleteOne(ctx context.Context, filter interface{}, + // opts ...*options.DeleteOptions) (*DeleteResult, error) + name = "DeleteOne" and n = 1 + or + // func (coll *Collection) Distinct(ctx context.Context, fieldName string, filter interface{}, + // ...) ([]interface{}, error) + name = "Distinct" and n = 2 + or + // func (coll *Collection) Find(ctx context.Context, filter interface{}, + // opts ...*options.FindOptions) (*Cursor, error) + name = "Find" and n = 1 + or + // func (coll *Collection) FindOne(ctx context.Context, filter interface{}, + // opts ...*options.FindOneOptions) *SingleResult + name = "FindOne" and n = 1 + or + // func (coll *Collection) FindOneAndDelete(ctx context.Context, filter interface{}, ...) + // *SingleResult + name = "FindOneAndDelete" and n = 1 + or + // func (coll *Collection) FindOneAndReplace(ctx context.Context, filter interface{}, + // replacement interface{}, ...) *SingleResult + name = "FindOneAndReplace" and n = 1 + or + // func (coll *Collection) FindOneAndUpdate(ctx context.Context, filter interface{}, + // update interface{}, ...) *SingleResult + name = "FindOneAndUpdate" and n = 1 + or + // func (coll *Collection) ReplaceOne(ctx context.Context, filter interface{}, + // replacement interface{}, ...) (*UpdateResult, error) + name = "ReplaceOne" and n = 1 + or + // func (coll *Collection) UpdateMany(ctx context.Context, filter interface{}, + // update interface{}, ...) (*UpdateResult, error) + name = "UpdateMany" and n = 1 + or + // func (coll *Collection) UpdateOne(ctx context.Context, filter interface{}, + // update interface{}, ...) (*UpdateResult, error) + name = "UpdateOne" and n = 1 + or + // func (coll *Collection) Watch(ctx context.Context, pipeline interface{}, ...) + // (*ChangeStream, error) + name = "Watch" and n = 1 + or + // func (coll *Collection) Aggregate(ctx context.Context, pipeline interface{}, + // opts ...*options.AggregateOptions) (*Cursor, error) + name = "Aggregate" and n = 1 + } + + /** + * A query used in an API function acting on a `Collection` struct of package + * [go.mongodb.org/mongo-driver/mongo](https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo). + */ + private class MongoDbCollectionQuery extends Range { + MongoDbCollectionQuery() { + exists(Method meth, string methodName, int n | + mongoDbCollectionMethod(methodName, n) and + meth.hasQualifiedName(package("go.mongodb.org/mongo-driver", "mongo"), "Collection", + methodName) and + this = meth.getACall().getArgument(n) + ) + } + } + } + + /** + * Holds if taint flows from `pred` to `succ` through a MongoDB-specific API. + */ + 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 + f.getName() = "Value" + ) + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Protobuf.qll b/go/ql/lib/semmle/go/frameworks/Protobuf.qll new file mode 100644 index 00000000000..66b3bba8de9 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Protobuf.qll @@ -0,0 +1,178 @@ +/** Provides models of commonly used functions and types in the protobuf packages. */ + +import go + +/** Provides models of commonly used functions and types in the protobuf packages. */ +module Protobuf { + /** Gets the name of the modern protobuf top-level implementation package. */ + string modernProtobufPackage() { result = package("google.golang.org/protobuf", "proto") } + + /** Gets the name of the modern protobuf implementation's `protoiface` subpackage. */ + string protobufIfacePackage() { + result = package("google.golang.org/protobuf", "runtime/protoiface") + } + + /** Gets the name of the modern protobuf implementation's `protoreflect` subpackage. */ + string protobufReflectPackage() { + result = package("google.golang.org/protobuf", "reflect/protoreflect") + } + + /** Gets the name of a top-level protobuf implementation package. */ + string protobufPackages() { + result in [package("github.com/golang/protobuf", "proto"), modernProtobufPackage()] + } + + /** The `Marshal` and `MarshalAppend` functions in the protobuf packages. */ + private class MarshalFunction extends TaintTracking::FunctionModel, MarshalingFunction::Range { + string name; + + MarshalFunction() { + name = ["Marshal", "MarshalAppend"] and + ( + this.hasQualifiedName(protobufPackages(), name) or + this.(Method).hasQualifiedName(modernProtobufPackage(), "MarshalOptions", name) + ) + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + + override DataFlow::FunctionInput getAnInput() { + if name = "MarshalAppend" then result.isParameter(1) else result.isParameter(0) + } + + override DataFlow::FunctionOutput getOutput() { + name = "MarshalAppend" and result.isParameter(0) + or + result.isResult(0) + } + + override string getFormat() { result = "protobuf" } + } + + private Field inputMessageField() { + result.hasQualifiedName(protobufIfacePackage(), "MarshalInput", "Message") + } + + private Method marshalStateMethod() { + result.hasQualifiedName(protobufIfacePackage(), "MarshalOptions", "MarshalState") + } + + /** + * Additional taint-flow step modeling flow from `MarshalInput.Message` to `MarshalOutput`, + * mediated by a `MarshalOptions.MarshalState` call. + * + * Note we can taint the whole `MarshalOutput` as it only has one field (`Buf`), and taint- + * tracking always considers a field of a tainted struct to itself be tainted. + */ + private class MarshalStateStep extends TaintTracking::AdditionalTaintStep { + override predicate step(DataFlow::Node pred, DataFlow::Node succ) { + exists(DataFlow::PostUpdateNode marshalInput, DataFlow::CallNode marshalStateCall | + marshalStateCall = marshalStateMethod().getACall() and + // pred -> marshalInput.Message + any(DataFlow::Write w) + .writesField(marshalInput.getPreUpdateNode(), inputMessageField(), pred) and + // marshalInput -> marshalStateCall + marshalStateCall.getArgument(0) = globalValueNumber(marshalInput).getANode() and + // marshalStateCall -> succ + marshalStateCall.getResult() = succ + ) + } + } + + /** The `Unmarshal` function in the protobuf packages. */ + class UnmarshalFunction extends TaintTracking::FunctionModel, UnmarshalingFunction::Range { + UnmarshalFunction() { + this.hasQualifiedName(protobufPackages(), "Unmarshal") or + this.(Method).hasQualifiedName(modernProtobufPackage(), "UnmarshalOptions", "Unmarshal") + } + + override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { + inp = this.getAnInput() and outp = this.getOutput() + } + + override DataFlow::FunctionInput getAnInput() { result.isParameter(0) } + + override DataFlow::FunctionOutput getOutput() { result.isParameter(1) } + + override string getFormat() { result = "protobuf" } + } + + /** The `Merge` function in the protobuf packages. */ + private class MergeFunction extends TaintTracking::FunctionModel { + MergeFunction() { this.hasQualifiedName(protobufPackages(), "Merge") } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp.isParameter(1) and outp.isParameter(0) + } + } + + /** A protobuf `Message` type. */ + class MessageType extends Type { + MessageType() { this.implements(protobufReflectPackage(), "ProtoMessage") } + } + + /** The `Clone` function in the protobuf packages. */ + private class MessageCloneFunction extends TaintTracking::FunctionModel { + MessageCloneFunction() { this.hasQualifiedName(protobufPackages(), "Clone") } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp.isParameter(0) and outp.isResult() + } + } + + /** A `Get` method of a protobuf `Message` type. */ + private class GetMethod extends DataFlow::FunctionModel, Method { + GetMethod() { + exists(string name | name.matches("Get%") | this = any(MessageType msg).getMethod(name)) + } + + override predicate hasDataFlow(FunctionInput inp, FunctionOutput outp) { + inp.isReceiver() and outp.isResult() + } + } + + /** A `ProtoReflect` method of a protobuf `Message` type. */ + private class ProtoReflectMethod extends DataFlow::FunctionModel, Method { + ProtoReflectMethod() { this = any(MessageType msg).getMethod("ProtoReflect") } + + override predicate hasDataFlow(FunctionInput inp, FunctionOutput outp) { + inp.isReceiver() and outp.isResult() + } + } + + /** + * Gets the base of `node`, looking through any dereference node found. + */ + private DataFlow::Node getBaseLookingThroughDerefs(DataFlow::ComponentReadNode node) { + result = node.getBase().(DataFlow::PointerDereferenceNode).getOperand() + or + result = node.getBase() and not node.getBase() instanceof DataFlow::PointerDereferenceNode + } + + /** + * Gets the data-flow node representing the bottom of a stack of zero or more `ComponentReadNode`s + * perhaps with interleaved dereferences. + * + * For example, in the expression a.b[c].d[e], this would return the dataflow node for the read from `a`. + */ + private DataFlow::Node getUnderlyingNode(DataFlow::ReadNode read) { + (result = read or result = getBaseLookingThroughDerefs+(read)) and + not result instanceof DataFlow::ComponentReadNode + } + + /** + * Additional taint step tainting a Message when taint is written to any of its fields and/or elements. + */ + 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) + | + any(DataFlow::Write w).writesComponent(base, pred) + ) + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Revel.qll b/go/ql/lib/semmle/go/frameworks/Revel.qll new file mode 100644 index 00000000000..1ccad431b84 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Revel.qll @@ -0,0 +1,334 @@ +/** + * Provides classes for working with untrusted flow sources from the `github.com/revel/revel` package. + */ + +import go +private import semmle.go.security.OpenUrlRedirectCustomizations + +/** Provides classes and methods modeling the Revel web framework. */ +module Revel { + /** Gets the package name `github.com/revel/revel`. */ + string packagePath() { result = package(["github.com/revel", "github.com/robfig"], "revel") } + + private class ControllerParams extends UntrustedFlowSource::Range, DataFlow::FieldReadNode { + ControllerParams() { + exists(Field f | + this.readsField(_, f) and + f.hasQualifiedName(packagePath(), "Controller", "Params") + ) + } + } + + private class ParamsFixedSanitizer extends TaintTracking::DefaultTaintSanitizer, + DataFlow::FieldReadNode { + ParamsFixedSanitizer() { + exists(Field f | + this.readsField(_, f) and + f.hasQualifiedName(packagePath(), "Params", "Fixed") + ) + } + } + + private class ParamsBind extends TaintTracking::FunctionModel, Method { + ParamsBind() { this.hasQualifiedName(packagePath(), "Params", ["Bind", "BindJSON"]) } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp.isReceiver() and outp.isParameter(0) + } + } + + private class RouteMatchParams extends UntrustedFlowSource::Range, DataFlow::FieldReadNode { + RouteMatchParams() { + exists(Field f | + this.readsField(_, f) and + f.hasQualifiedName(packagePath(), "RouteMatch", "Params") + ) + } + } + + /** An access to an HTTP request field whose value may be controlled by an untrusted user. */ + private class UserControlledRequestField extends UntrustedFlowSource::Range, + DataFlow::FieldReadNode { + UserControlledRequestField() { + exists(string fieldName | + this.getField().hasQualifiedName(packagePath(), "Request", fieldName) + | + fieldName in [ + "Header", "ContentType", "AcceptLanguages", "Locale", "URL", "Form", "MultipartForm" + ] + ) + } + } + + private class UserControlledRequestMethod extends UntrustedFlowSource::Range, + DataFlow::MethodCallNode { + UserControlledRequestMethod() { + this.getTarget() + .hasQualifiedName(packagePath(), "Request", + [ + "FormValue", "PostFormValue", "GetQuery", "GetForm", "GetMultipartForm", "GetBody", + "Cookie", "GetHttpHeader", "GetRequestURI", "MultipartReader", "Referer", "UserAgent" + ]) + } + } + + private class ServerCookieGetValue extends TaintTracking::FunctionModel, Method { + ServerCookieGetValue() { this.implements(packagePath(), "ServerCookie", "GetValue") } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp.isReceiver() and outp.isResult() + } + } + + private class ServerMultipartFormGetFiles extends TaintTracking::FunctionModel, Method { + ServerMultipartFormGetFiles() { + this.implements(packagePath(), "ServerMultipartForm", ["GetFiles", "GetValues"]) + } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp.isReceiver() and outp.isResult() + } + } + + private string contentTypeFromFilename(DataFlow::Node filename) { + if filename.getStringValue().toLowerCase().matches(["%.htm", "%.html"]) + then result = "text/html" + else result = "application/octet-stream" + // Actually Revel can figure out a variety of other content-types, but none of our analyses care to + // distinguish ones other than text/html. + } + + /** + * `revel.Controller` methods which set the response content-type to and designate a result in one operation. + * + * Note these don't actually generate the response, they return a struct which is then returned by the controller + * method, but it is very likely if a string is being rendered that it will end up sent to the user. + * + * The `Render` and `RenderTemplate` methods are handled by `TemplateRender` below. + * + * The `RenderError` method can actually return HTML content, but again only via an HTML template if one exists; + * we assume it falls back to return plain text as this implies there is probably not an injection opportunity + * but there is an information leakage issue. + * + * The `RenderBinary` method can also return a variety of content-types based on the file extension passed. + * We look particularly for html file extensions, since these are the only ones we currently have special rules + * for (in particular, detecting XSS vulnerabilities). + */ + private class ControllerRenderMethods extends HTTP::ResponseBody::Range { + string contentType; + + ControllerRenderMethods() { + exists(Method m, string methodName, DataFlow::CallNode methodCall | + m.hasQualifiedName(packagePath(), "Controller", methodName) and + methodCall = m.getACall() + | + exists(int exposedArgument | + this = methodCall.getArgument(exposedArgument) and + ( + methodName = "RenderBinary" and + contentType = contentTypeFromFilename(methodCall.getArgument(1)) and + exposedArgument = 0 + or + methodName = "RenderError" and contentType = "text/plain" and exposedArgument = 0 + or + methodName = "RenderHTML" and contentType = "text/html" and exposedArgument = 0 + or + methodName = "RenderJSON" and contentType = "application/json" and exposedArgument = 0 + or + methodName = "RenderJSONP" and + contentType = "application/javascript" and + exposedArgument = 1 + or + methodName = "RenderXML" and contentType = "text/xml" and exposedArgument = 0 + ) + ) + or + methodName = "RenderText" and + contentType = "text/plain" and + this = methodCall.getAnArgument() + ) + } + + override HTTP::ResponseWriter getResponseWriter() { none() } + + override string getAContentType() { result = contentType } + } + + /** + * The `revel.Controller.RenderFileName` method, which instructs Revel to open a file and return its contents. + * We extend FileSystemAccess rather than HTTP::ResponseBody as this will usually mean exposing a user-controlled + * file rather than the actual contents being user-controlled. + */ + private class RenderFileNameCall extends FileSystemAccess::Range, DataFlow::CallNode { + RenderFileNameCall() { + this = + any(Method m | m.hasQualifiedName(packagePath(), "Controller", "RenderFileName")).getACall() + } + + override DataFlow::Node getAPathArgument() { result = this.getArgument(0) } + } + + /** + * The `revel.Controller.Redirect` method. + * + * It is currently assumed that a tainted `value` in `Redirect(url, value)`, which calls `Sprintf(url, value)` + * internally, cannot lead to an open redirect vulnerability. + */ + private class ControllerRedirectMethod extends HTTP::Redirect::Range, DataFlow::CallNode { + ControllerRedirectMethod() { + exists(Method m | m.hasQualifiedName(packagePath(), "Controller", "Redirect") | + this = m.getACall() + ) + } + + override DataFlow::Node getUrl() { result = this.getArgument(0) } + + override HTTP::ResponseWriter getResponseWriter() { none() } + } + + /** + * The getter and setter methods of `revel.RevelHeader`. + * + * Note we currently don't implement `HeaderWrite` and related concepts, as they are currently only used + * to track content-type, and directly setting headers does not seem to be the usual way to set the response + * content-type for this framework. If and when the `HeaderWrite` concept has a more abstract idea of the + * relationship between header-writes and HTTP responses than looking for a particular `http.ResponseWriter` + * instance connecting the two, then we may implement it here for completeness. + */ + private class RevelHeaderMethods extends TaintTracking::FunctionModel { + FunctionInput input; + FunctionOutput output; + string name; + + RevelHeaderMethods() { + this.(Method).hasQualifiedName(packagePath(), "RevelHeader", name) and + ( + name = ["Add", "Set"] and input.isParameter([0, 1]) and output.isReceiver() + or + name = ["Get", "GetAll"] and input.isReceiver() and output.isResult() + or + name = "SetCookie" and input.isParameter(0) and output.isReceiver() + ) + } + + override predicate hasTaintFlow(FunctionInput inp, FunctionOutput outp) { + inp = input and outp = output + } + } + + /** + * A read in a Revel template that uses Revel's `raw` function. + */ + class RawTemplateRead extends HtmlTemplate::TemplateRead { + RawTemplateRead() { parent.getBody().regexpMatch("(?s)raw\\s.*") } + } + + /** + * A write to a template argument field that is read raw inside of a template. + */ + private class RawTemplateArgument extends HTTP::TemplateResponseBody::Range { + RawTemplateRead read; + + RawTemplateArgument() { + exists(TemplateRender render, VariableWithFields var | + render.getRenderedFile() = read.getFile() and + // if var is a.b.c, any rhs of a write to a, a.b, or a.b.cb + this = var.getParent*().getAWrite().getRhs() + | + var.getParent*() = render.getArgumentVariable() and + ( + var = read.getReadVariable(render.getArgumentVariable()) + or + // if no write or use of that variable exists, no VariableWithFields will be generated + // so we try to find a parent VariableWithFields + // this isn't covered by the 'getParent*' above because no match would be found at all + // for var + not exists(read.getReadVariable(render.getArgumentVariable())) and + exists(string fieldName | fieldName = read.getFieldName() | + var.getQualifiedName() = + render.getArgumentVariable().getQualifiedName() + + ["." + fieldName.substring(0, fieldName.indexOf(".")), ""] + ) + ) + or + // a revel controller.Render(arg) will set controller.ViewArgs["arg"] = arg + exists(Variable arg | arg.getARead() = render.(ControllerRender).getAnArgument() | + var.getBaseVariable() = arg and + var.getQualifiedName() = read.getFieldName() + ) + ) + } + + override string getAContentType() { result = "text/html" } + + override HTTP::ResponseWriter getResponseWriter() { none() } + + override HtmlTemplate::TemplateRead getRead() { result = read } + } + + /** + * A render of a template. + */ + abstract class TemplateRender extends DataFlow::Node, TemplateInstantiation::Range { + /** Gets the name of the file that is rendered. */ + abstract File getRenderedFile(); + + /** Gets the variable passed as an argument to the template. */ + abstract VariableWithFields getArgumentVariable(); + + override DataFlow::Node getADataArgument() { result = this.getArgumentVariable().getAUse() } + } + + private IR::EvalInstruction skipImplicitFieldReads(IR::Instruction insn) { + result = insn or + result = skipImplicitFieldReads(insn.(IR::ImplicitFieldReadInstruction).getBase()) + } + + /** A call to `Controller.Render`. */ + private class ControllerRender extends TemplateRender, DataFlow::MethodCallNode { + ControllerRender() { this.getTarget().hasQualifiedName(packagePath(), "Controller", "Render") } + + override DataFlow::Node getTemplateArgument() { none() } + + override File getRenderedFile() { + exists(Type controllerType, string controllerRe, string handlerRe, string pathRe | + controllerType = skipImplicitFieldReads(this.getReceiver().asInstruction()).getResultType() and + controllerRe = "\\Q" + controllerType.getName() + "\\E" and + handlerRe = "\\Q" + this.getRoot().(FuncDef).getName() + "\\E" and + // find a file named '/views//(.